Coder Social home page Coder Social logo

nov1n / remarkablepocket Goto Github PK

View Code? Open in Web Editor NEW
127.0 5.0 6.0 98.07 MB

Synchronize Pocket articles with the Remarkable tablet.

License: GNU General Public License v3.0

Java 98.96% Shell 1.04%
remarkable-tablet remarkable remarkable-2 pocket downloader epub articles

remarkablepocket's Introduction

Example article

Remarkable Pocket synchronizes articles from Pocket to your Remarkable tablet. It can be run on your computer, on a server, or on your Raspberry Pi. Because it does not run on the device itself this approach saves battery life, and is resistant to Remarkable software updates.

An example run of the program can be found below:

[2021-11-02 14:21:22] Starting sync...
[2021-11-02 14:21:25] Found 1 read article(s) on Remarkable.
[2021-11-02 14:21:25] (1/1) Marking 'Getting Unstuck' as read on Pocket...
[2021-11-02 14:21:25] (1/1) Deleting 'Getting Unstuck' from Remarkable...
[2021-11-02 14:21:27] Found 5 unread article(s) on Remarkable. Downloading 5 more from Pocket.
[2021-11-02 14:21:27] (1/5) Downloading: 'What Modules Are About'.
[2021-11-02 14:21:33] (2/5) Downloading: 'Pursue High-quality Leisure'.
[2021-11-02 14:21:39] (3/5) Downloading: 'Hunting down a C memory leak in a Go program'.
[2021-11-02 14:21:45] (4/5) Downloading: 'Beginner's Guide To Abstraction'.
[2021-11-02 14:22:03] (5/5) Downloading: 'Timer Modules in Microcontrollers'.
[2021-11-02 14:22:03] No content found. Skipping...
[2021-11-02 14:22:15] (6/5) Downloading: 'SSH Tunneling Explained'.
[2021-11-02 14:22:33] Uploading 5 article(s) to Remarkable.
[2021-11-02 14:22:33] (1/5) Uploading: 'What Modules Are About.epub'.
[2021-11-02 14:22:34] (2/5) Uploading: 'Pursue High-quality Leisure.epub'.
[2021-11-02 14:22:34] (3/5) Uploading: 'Hunting down a C memory leak in a Go program.epub'.
[2021-11-02 14:22:34] (4/5) Uploading: 'Beginner's Guide To Abstraction.epub'.
[2021-11-02 14:22:34] (5/5) Uploading: 'SSH Tunneling Explained.epub'.
[2021-11-02 14:22:35] Completed sync in 1m 13s.
[2021-11-02 14:22:35] Next sync in 30m.
Click here to see what a downloaded article looks like on the Remarkable. An example article on the Remarkable.

Features

  • No installation required. The application can be run with a single command.
  • Works on Remarkable 1 and 2.
  • Full support for images, code blocks, and formulas.
  • Articles are downloaded as epubs. This allows you to customize the font, font size, margins, etc.
  • Automatically archive read articles on Pocket. When you finish reading an article and close it while on the last page, it will be automatically deleted from the Remarkable and archived on Pocket. A new unread article will be downloaded in its place.
  • Download articles from Pocket with a given tag. If a tag-filter (see Configuration) is supplied then only articles with that tag will be downloaded.

Usage

The easiest way to run the application is using Docker. First install Docker for your platform from https://docs.docker.com/get-docker/. Then run the following command to start the application on Linux or Mac (I have not tested it on Windows yet):

touch ~/.remarkable-pocket ~/.rmapi && mkdir -p ~/.rmapi-cache && docker run -it --env TZ=Europe/Amsterdam -p 65112:65112 -v ~/.remarkable-pocket:/root/.remarkable-pocket -v ~/.rmapi:/root/.rmapi -v ~/.rmapi-cache:/root/.cache/rmapi ghcr.io/nov1n/remarkable-pocket:0.4.0

The first time you run the application, you will be asked to authorize Pocket and Remarkable Cloud. Once you have done this subsequent runs will read the credentials from the ~/.remarkable-pocket and ~/.rmapi file. You can also change the timezone in the command to match your location.

By default, articles are synchronized to the /Pocket/ directory on the Remarkable every 60 minutes.

Docker Compose

If you prefer to use Docker Compose first run the command in the Usage section and complete the authentication steps (this only needs to happen once). When syncing starts you can stop the container, download the docker-compose.yml file, and run docker-compose up.

Raspberry Pi

There is also a Docker image available for the Raspberry Pi, so the command in Usage will work. You do need a browser to complete the authentication flow. If your Pi runs without a screen I recommend using a VNC client when running the program for the first time.

Launchd on MacOS

To launch the program on startup and keep it running in the background you can use launchd (on Mac) or systemd (on Linux). On Mac right click here and click "Save Link As...". Then move the downloaded file to ~/Library/LaunchAgents/. Finally run launchctl load -w ~/Library/LaunchAgents/nl.carosi.remarkable-pocket.plist in a terminal. Logs will be sent to ~/.remarkable-pocket.log.

Configuration

The default configuration can be changed by providing command-line arguments. Simply append these to the docker run command. Below is a list of all available options.

Usage: remarkable-pocket [-hnorV] [-d=<storageDir>] [-f=<tagFilter>] [-i=<interval>] [-l=<articleLimit>]
Synchronizes articles from Pocket to the Remarkable tablet.
  -f, --tag-filter=<tagFilter>
                            Only download Pocket articles with the this tag.
  -o, --run-once            Run the synchronization once and then exit.
  -n, --no-archive          Don't archive read articles.
  -l, --article-limit=<articleLimit>
                            The maximum number of Pocket articles to be present on the Remarkable.
                              Default: 10
  -i, --interval=<interval> The interval between subsequent synchronizations.
                              Default: 60m
  -d, --storage-dir=<storageDir>
                            The storage directory on the Remarkable in which to store downloaded Pocket articles.
                              Default: /Pocket/
  -v, --verbose             Enable verbose logging.
  -h, --help                Show this help message and exit.
  -V, --version             Print version information and exit.

Limitations

  • Articles behind a paywall cannot be downloaded.
  • Articles on websites with DDOS protection or captcha cannot be downloaded.
  • Articles that use javascript to load the content cannot be downloaded.

Build Instructions

The project uses Gradle as a build tool and can be built using the gradle build command. This will generate jars in build/libs/. To run the jar, use the java -jar build/libs/remarkable-pocket-x.x.x.jar command, replacing x.x.x with the correct version.

Building docker

To build the docker image run gradle jib. This will use a dynamically generated Dockerfile based on the configuration in the jib section of the build.gradle file. To run the image, see the command in the Usage section.

Other package formats

If you would like to package the application in another format e.g. deb, nix or AUR, I'm happy to review a Pull Request.

Thanks

Support

"Buy Me A Coffee" if you want to say thanks. :-)

Disclaimer

The author(s) and contributor(s) are not associated with reMarkable AS, Norway. reMarkable is a registered trademark of reMarkable AS in some countries. Please see https://remarkable.com for their product.

RemarkablePocket uses rmapi to connect to Remarkable cloud. The newly released sync protocol is not yet tested through and may contain bugs. As recommended by rmapi please make sure you have a backup of your files.

remarkablepocket's People

Contributors

nov1n avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

remarkablepocket's Issues

Please use PocketItem.getItemId() to reference Pocket articles.

.map(e -> Article.of(e.getResolvedId(), e.getResolvedUrl(), e.getResolvedTitle()))

There are some instances where the Resolved ID is different to the Item ID, and does not work with the call to modify/archive the article. (although the Pocket API still says it worked)

Many thanks,
Tony.

https://github.com/tchudyk/pocket-integration/blob/4ba9851295197e6199edc0ecb03896d4e74bf7d7/src/main/java/pl/codeset/pocket/read/PocketItem.java#L73

UnsatisfiedDependencyException: Cannot run program "/usr/local/bin/rmapi": error=2, No such file or directory

Hi there.

After the issue with the new API version I found some time to give RemarkablePocket another spin. Unfortunately, the software crashes with a ton of exceptions, apparently one caused by the other.

It would be great to get some help on this. Thanks very much!

I removed the three files and ran the command described in the Readme:

$ touch ~/.remarkable-pocket ~/.rmapi && mkdir -p ~/.rmapi-cache && docker run -it --env TZ=Europe/Amsterdam -p 65112:65112 -v ~/.remarkable-pocket:/root/.remarkable-pocket:Z -v ~/.rmapi:/root/.rmapi:Z -v ~/.rmapi-cache:/root/.cache/rmapi:Z ghcr.io/nov1n/remarkable-pocket:0.2.2

I only added :Z to the volume mappings which is necessary to work with SELinux and also tried version 0.2.2 which seems to be released but not mentioned in the Readme.

The first line output is the following:

[2022-10-08 15:32:08] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.ArticleValidator': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableApi': Invocation of init method failed; nested exception is java.lang.RuntimeException: Could not authenticate to Remarkable API

I believe this is an accumulation of all other exceptions output in red in the log. The second one being:

Caused by: java.io.IOException: Cannot run program "/usr/local/bin/rmapi": error=2, No such file or directory

Sync stopped working

[2022-01-12 23:22:05] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableService': Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke "java.util.List.stream()" because the return value of "es.jlarriba.jrmapi.Jrmapi.listDocs()" is null

Invalid article with code block

Hello ๐Ÿ‘‹๐Ÿป

First of all, thank you kindly for this wonderful application. Put it on my NAS and it's working like a charm. Really appreciate.

I wanted to try some articles with code block to know if it's reasonable to read code on the Remarkable.

Full support for images, code blocks, and formulas.

So I tried with the homepage of this github repository to get the ReadME.md. The parsing is perfect on Pocket :

CleanShot 2023-10-14 at 12 56 11

But I got the log to say it was invalid. I don't think Github use JS to fetch the content of the README.md after loading it.

[2023-10-14 12:49:55] User: ~~REDACTED~~, SyncVersion: 15
[2023-10-14 12:49:59] Starting sync...
[2023-10-14 12:50:11] Found 0 read article(s) on Remarkable.
[2023-10-14 12:50:17] Found 4 unread article(s) on Remarkable. Downloading 1 more from Pocket.
[2023-10-14 12:50:17] (1/1) Downloading: 'Synchronize Pocket articles with the Remarkable tablet.'.
[2023-10-14 12:50:25] Downloaded article is invalid. See https://github.com/nov1n/RemarkablePocket#limitations for possible causes.
[2023-10-14 12:50:25] Uploading 0 article(s) to Remarkable.
[2023-10-14 12:50:25] Completed sync in 25s.
[2023-10-14 12:50:25] Next sync in 5m.

Thanks a lot

Archiving not working

Hi,

I got remarkable-pocket syncing fine from Pocket to RM, but I do not get it to Archive the content when reaching 100% read. It is detected, but the article is not archived in Pocket, so it gets synced everytime back to RM:

[2022-01-10 18:12:41] Starting sync...
[2022-01-10 18:12:44] Found 1 read article(s) on Remarkable.
[2022-01-10 18:12:44] (1/1) Marking 'Article' as read on Pocket...
[2022-01-10 18:12:44] (1/1) Deleting 'Article' from Remarkable...
[2022-01-10 18:12:45] Found 6 unread article(s) on Remarkable. Downloading 1 more from Pocket.
[2022-01-10 18:12:45] (1/1) Downloading: 'Article'.
[2022-01-10 18:12:52] Uploading 1 article(s) to Remarkable.
[2022-01-10 18:12:52] (1/1) Uploading: 'Article.epub'.
[2022-01-10 18:12:52] Completed sync in 11s.
[2022-01-10 18:12:52] Next sync in 1h.

Thanks!

Error during sync: entry

Hi
The tool is wonderful, but I encountered a second misbehaviour, that I cannot get rid off...

[2022-09-12 08:12:05] Starting sync...
[2022-09-12 08:12:06] Error occurred during sync: entry
[2022-09-12 08:12:06] Next sync in 1h.

I removed the ~/.remarkable-pocket and re-initialised the rights, but it is still blocked... Any idea ?

Running into this

Hi,
Very interested in your application!
I'm a total noob in this, but I'm running into this (can you help me out?):

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableService': Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke "java.util.List.stream()" because the return value of "es.jlarriba.jrmapi.Jrmapi.listDocs()" is null

Fresh install crash

Hi,
Wanted to test that using docker-compose, but it crash at first run.
Here is my docker-compose:

version: '3'

services:
  remarkable-pocket:
    image: ghcr.io/nov1n/remarkable-pocket:0.3.0
    restart: always
    environment:
      - TZ=Europe/Paris
    ports:
      - "65112:65112"
    volumes:
      - ./data/remarkable-pocket:/root/.remarkable-pocket
      - ./data/rmapi:/root/.rmapi
      - ./data/rmapi-cache:/root/.cache/rmapi

Docker version: 20.10.21, build baeda1f82a
Docker compose: installed as a plugin (v2)

I couldn't guess much from the standard error. The debug logs says it's not connected to the internet, but it is.

But I cannot debug further, as I haven't found the Dockerfile. Where is it?

Standard error output

[2022-10-29 12:18:19] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
[2022-10-29 12:18:19] 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2022-10-29 12:18:19] Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
        ... 26 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
        ... 42 common frames omitted
Caused by: java.lang.RuntimeException: Could not authenticate with Pocket
        at nl.carosi.remarkablepocket.SyncApplication.pocket(SyncApplication.java:44)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$9da5f0aa.CGLIB$pocket$1(<generated>)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$9da5f0aa$$FastClassBySpringCGLIB$$2d43d3de.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$9da5f0aa.pocket(<generated>)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 43 common frames omitted
Caused by: java.nio.file.FileSystemException: /root/.remarkable-pocket: Device or resource busy
        at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
        at java.base/sun.nio.fs.UnixFileSystemProvider.implDelete(Unknown Source)
        at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
        at java.base/java.nio.file.Files.delete(Unknown Source)
        at nl.carosi.remarkablepocket.PocketAuthenticator.getAuth(PocketAuthenticator.java:46)
        at nl.carosi.remarkablepocket.SyncApplication.pocket(SyncApplication.java:42)
        ... 53 common frames omitted
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
        ... 26 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.RuntimeException: Could not authenticate with Pocket
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
        ... 42 more
Caused by: java.lang.RuntimeException: Could not authenticate with Pocket
        at nl.carosi.remarkablepocket.SyncApplication.pocket(SyncApplication.java:44)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$9da5f0aa.CGLIB$pocket$1(<generated>)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$9da5f0aa$$FastClassBySpringCGLIB$$2d43d3de.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$9da5f0aa.pocket(<generated>)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 43 more
Caused by: java.nio.file.FileSystemException: /root/.remarkable-pocket: Device or resource busy
        at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
        at java.base/sun.nio.fs.UnixFileSystemProvider.implDelete(Unknown Source)
        at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
        at java.base/java.nio.file.Files.delete(Unknown Source)
        at nl.carosi.remarkablepocket.PocketAuthenticator.getAuth(PocketAuthenticator.java:46)
        at nl.carosi.remarkablepocket.SyncApplication.pocket(SyncApplication.java:42)
        ... 53 more

Debug error output: https://pastebin.com/ZXGwrW0n

Error on M1 chip Macbook

Hello! I'm new to use of Docker, but trying to run this on a Macbook Pro with the newer M1 chip and I think that's the root of the issue I'm encountering.

Here's the command I'm running and output:

โžœ  RemarkablePocket git:(main) touch ~/.remarkable-pocket ~/.rmapi && mkdir -p ~/.rmapi-cache && docker run -it --env TZ=Europe/Amsterdam -p 65112:65112 -v ~/.remarkable-pocket:/root/.remarkable-pocket -v ~/.rmapi:/root/.rmapi -v ~/.rmapi-cache:/root/.cache/rmapi ghcr.io/nov1n/remarkable-pocket:0.2.2@sha256:670deb45f64aa78e67aba8fb34159e19b554ad1ef055dc021530308542522364
Unable to find image 'ghcr.io/nov1n/remarkable-pocket:0.2.2@sha256:670deb45f64aa78e67aba8fb34159e19b554ad1ef055dc021530308542522364' locally
ghcr.io/nov1n/remarkable-pocket@sha256:670deb45f64aa78e67aba8fb34159e19b554ad1ef055dc021530308542522364: Pulling from nov1n/remarkable-pocket
2b55860d4c66: Pull complete
49a58ffb4a94: Pull complete
89d66e37a1ba: Pull complete
88abbee52af5: Pull complete
1d9fdd2e27fa: Pull complete
58ec3c005ac0: Pull complete
107cfaeeff63: Pull complete
45db46aa51cb: Pull complete
ef33a0271b9f: Pull complete
Digest: sha256:670deb45f64aa78e67aba8fb34159e19b554ad1ef055dc021530308542522364
Status: Downloaded newer image for ghcr.io/nov1n/remarkable-pocket@sha256:670deb45f64aa78e67aba8fb34159e19b554ad1ef055dc021530308542522364
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
[2022-10-01 20:47:01] Visit https://getpocket.com/auth/authorize?request_token=REDACTED&redirect_uri=http://localhost:65112/redirect and authorize this application.

[2022-10-01 20:47:11] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.ArticleValidator': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
[2022-10-01 20:47:11]

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2022-10-01 20:47:12] Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.ArticleValidator': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
        ... 26 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
        ... 40 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
        ... 56 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at pl.codeset.pocket.IOUtil.toBytes(IOUtil.java:13)
        at pl.codeset.pocket.HttpClient.lambda$readResponse$0(HttpClient.java:41)
        at java.base/java.util.Optional.orElseGet(Unknown Source)
        at pl.codeset.pocket.HttpClient.readResponse(HttpClient.java:39)
        at pl.codeset.pocket.HttpClient.send(HttpClient.java:25)
        at pl.codeset.pocket.PocketAuthFactory.generateAccessToken(PocketAuthFactory.java:57)
        at pl.codeset.pocket.PocketAuthFactory.createForCode(PocketAuthFactory.java:23)
        at pl.codeset.pocket.PocketAuthFactory.create(PocketAuthFactory.java:40)
        at nl.carosi.remarkablepocket.PocketAuthenticator.authenticate(PocketAuthenticator.java:98)
        at nl.carosi.remarkablepocket.PocketAuthenticator.authAndStore(PocketAuthenticator.java:66)
        at nl.carosi.remarkablepocket.PocketAuthenticator.getAuth(PocketAuthenticator.java:52)
        at nl.carosi.remarkablepocket.SyncApplication.pocket(SyncApplication.java:42)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$ce897a90.CGLIB$pocket$1(<generated>)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$ce897a90$$FastClassBySpringCGLIB$$27486db9.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$ce897a90.pocket(<generated>)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 57 common frames omitted
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.ArticleValidator': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
        at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
        ... 40 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
        ... 56 more
Caused by: java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
        at pl.codeset.pocket.IOUtil.toBytes(IOUtil.java:13)
        at pl.codeset.pocket.HttpClient.lambda$readResponse$0(HttpClient.java:41)
        at java.base/java.util.Optional.orElseGet(Unknown Source)
        at pl.codeset.pocket.HttpClient.readResponse(HttpClient.java:39)
        at pl.codeset.pocket.HttpClient.send(HttpClient.java:25)
        at pl.codeset.pocket.PocketAuthFactory.generateAccessToken(PocketAuthFactory.java:57)
        at pl.codeset.pocket.PocketAuthFactory.createForCode(PocketAuthFactory.java:23)
        at pl.codeset.pocket.PocketAuthFactory.create(PocketAuthFactory.java:40)
        at nl.carosi.remarkablepocket.PocketAuthenticator.authenticate(PocketAuthenticator.java:98)
        at nl.carosi.remarkablepocket.PocketAuthenticator.authAndStore(PocketAuthenticator.java:66)
        at nl.carosi.remarkablepocket.PocketAuthenticator.getAuth(PocketAuthenticator.java:52)
        at nl.carosi.remarkablepocket.SyncApplication.pocket(SyncApplication.java:42)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$ce897a90.CGLIB$pocket$1(<generated>)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$ce897a90$$FastClassBySpringCGLIB$$27486db9.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
        at nl.carosi.remarkablepocket.SyncApplication$$EnhancerBySpringCGLIB$$ce897a90.pocket(<generated>)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 57 more

[Feature Request] Support for Raspberry Pi

Awesome project! When I tried running this via VNC into my Raspberry Pi 4B, I get the following error:

_Status: Downloaded newer image for ghcr.io/nov1n/remarkable-pocket:0.0.3

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested

standard_init_linux.go:228: exec user process caused: exec format error_

Would appreciate if you can support Raspberry Pi! Thanks!

running in azure cloud

Hi, thanks for doing this utility - it is super useful.
I'm trying to run this on a linux VM in the cloud.
The pocket authorization doesn't go through, because the link to visit refers to localhost.
I ssh into linux VM, then click the getpocket authorization link, it pops a local browser, hence the mismatch I'm assuming.

Any idea how I could resolve that issue, and authorize my VM, and not the local machine on which the browser is running?

Error on start-up

Following the indicated instructions, just modified to use podman instead of docker:
touch ~/.remarkable-pocket ~/.rmapi && mkdir -p ~/.rmapi-cache && podman run -it --env TZ=Europe/Amsterdam -p 65112:65112 -v ~/.remarkable-pocket:/root/.remarkable-pocket -v ~/.rmapi:/root/.rmapi -v ~/.rmapi-cache:/root/.cache/rmapi ghcr.io/nov1n/remarkable-pocket:0.3.0

leads to that error at start-up:

[2022-12-21 10:06:33] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
[2022-12-21 10:06:33]

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2022-12-21 10:06:33] Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pocket' defined in nl.carosi.remarkablepocket.SyncApplication: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.codeset.pocket.Pocket]: Factory method 'pocket' threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[], int, int)" because "is" is null
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
	at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
	at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
	at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
	at picocli.CommandLine.access$1300(CommandLine.java:145)
	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
	at picocli.CommandLine.execute(CommandLine.java:2078)
	at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)

How to add the command-line arguments, e.g. interval en article limit

Thank you for building this great program.
I've managed to sync the first articles to my remarkable after building the container and authenticating the services according to your instructions.
However, I'm not sure how to run the container with non-default settings, such as a higher article limit (30) or a larger interval (4 hours). Could you give an example on what i would look like to use these command-line arguments?

Cheers, Alexander

Feature suggestion: sync more frequently when things are changing

Currently the default sync frequency is one hour, which is fine. However I'd suggest that if it's detected a change on the reMarkable file store, the next run (or maybe two or so) happen at a more frequent rate, for example with only a 15 minute delay. This means that if I'm actively reading things then I'll be getting fresh content as I go.

I was originally thinking that it would just do this if something gets marked as read, but if it can easily notice a change in percentage read of an article and use that, it might be even better.

There's a chance I'll get around to implementing this myself, but I don't know how much spare computer time I'll have in the near future and maybe someone likes the idea enough to beat me to it :)

Add SSH tunnel instructions to README.md

Hey!

Thanks for a great piece of software, I am really enjoying reading my pocket articles from my reMarkable. I have a slight addition to the setup process if I may. Currently, for Raspberry Pi the instructions state that:

... You do need a browser to complete the authentication flow. If your Pi runs without a screen I recommend using a VNC client when running the program for the first time.

I suggest that you could add that for users using Raspberry Pi via SSH: You can simply create a SSH tunnel for to the Raspberry Pi so you can avoid installing and enabling VNC. You can do this by running the following on the host computer:

ssh -L 65112:localhost:65112 <rpi username>@<rpi ip address>

After this you can proceed with the initial run Docker command and simply copy paste the authentication URL from the terminal to the host machine's browser. The redirect will be tunneled to the Raspberry Pi via the SSH tunnel.

I successfully used this method myself.

Error when running command:

Hello,

I had it working fine on my Pi 4 via docker, but now when I try to re-run the command, it returns a bunch of error messages, starting with

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.SyncService': Unsatisfied dependency expressed through constructor parameter 6; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.Duration'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.beans.factory.annotation.Value java.time.Duration] for value 'PT300'; nested exception is java.lang.IllegalArgumentException: 'PT300' is not a valid ISO-8601 duration

I'm at a loss as to what to try next. I've already tried restarting the Pi and stopping and restarting the container via Portainer. Any help is greatly appreciated! It was working great for the first 2 syncs!

Unread articles marked as read and deleted

I have a "minor" issue in which some of my pocket saves are correctly transferred (I can see the log for sending is ok), but are removed during the next sync (thus an hour) after having being marked as read... while I haven't read them ๐Ÿ˜ข

No errors in the logs and so on.

My RM was off or "in pause", not working, at this time

Any idea ?

"Could not authenticate to Remarkable API"

Great work man! Unfortunately I got the below error.

Tried to install on both my iMac M1 and my MacBook Pro, trying versions 0.2.2 and 0.3.0 (saw this in other issues like #11 , #15 )
Got the message after fetching my code from my.remarkable.com.

Did remarkable change their API (again)?

[2022-12-31 11:00:21] Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableApi': Invocation of init method failed; nested exception is java.lang.RuntimeException: Could not authenticate to Remarkable API
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
	at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
	at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
	at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
	at picocli.CommandLine.access$1300(CommandLine.java:145)
	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
	at picocli.CommandLine.execute(CommandLine.java:2078)
	at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableApi': Invocation of init method failed; nested exception is java.lang.RuntimeException: Could not authenticate to Remarkable API
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
	... 26 common frames omitted
Caused by: java.lang.RuntimeException: Could not authenticate to Remarkable API
	at nl.carosi.remarkablepocket.RemarkableApi.login(RemarkableApi.java:110)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
	... 39 common frames omitted
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nl.carosi.remarkablepocket.MetadataProvider': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableApi': Invocation of init method failed; nested exception is java.lang.RuntimeException: Could not authenticate to Remarkable API
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143)
	at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:125)
	at nl.carosi.remarkablepocket.SyncCommand.call(SyncCommand.java:16)
	at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
	at picocli.CommandLine.access$1300(CommandLine.java:145)
	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2311)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
	at picocli.CommandLine.execute(CommandLine.java:2078)
	at nl.carosi.remarkablepocket.SyncCommand.main(SyncCommand.java:93)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nl.carosi.remarkablepocket.RemarkableApi': Invocation of init method failed; nested exception is java.lang.RuntimeException: Could not authenticate to Remarkable API
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
	... 26 more
Caused by: java.lang.RuntimeException: Could not authenticate to Remarkable API
	at nl.carosi.remarkablepocket.RemarkableApi.login(RemarkableApi.java:110)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
	... 39 more

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.