Ajatt-Tools / anki.koplugin

KOReader plugin enabling Anki card generations for words looked up in the internal dictionary.
49 stars 6 forks source link

“Couldn’t Synchronize Note, Couldn’t Get Deck ID Error” #15

Closed squishygian closed 8 months ago

squishygian commented 8 months ago

Hello, I am trying to run this on my BOOX Palma but I’m not sure if it’s compatible or not, the Palma’s OS is Android 11 and I currently use the Ankidroid and Ankiconnect android apps along with the Yomitan broswer extension to automatically create flashcards while using my regular browser. I really needed something for when I’m reading though so when I saw this I was pretty excited and downloaded it and was able to install it to Koreader but unfortunately whenever I select the “add to anki” button after highlighting a word, I get an error that says “Couldn’t Synchronize Note, Couldn’t Get Deck ID” and then a bunch of other random words(see picture below) I just want to know if it’s even possible to use this plugin on Android so I don’t waste my time ripping my hair out trying to figure this out because it would be a huge lifesaver for me as I currently create anki cards by hand for all my reading vocab, thank you so much!

squishygian commented 8 months ago

3602800C-257C-42E7-9544-6AE87CD16FFE

squishygian commented 8 months ago

OK, I went into the anki settings in koreader and changed the deckname so it matched the one I have in ankidroid, now there is a different error that says “couldnt get model ID”

squishygian commented 8 months ago

Sorry I didn’t mean to close the issue this is my first time using github so the UI is a little confusing

squishygian commented 8 months ago

84B1B036-0972-4D23-8C48-BAA7803B9201

squishygian commented 8 months ago

Update: When the android ankiconnect app is off it will store the notes offline and say “unable to reach anki connect, connection refused” as opposed to the previous error, so it does seem to be communicating with ankiconnect on some level.

nairyosangha commented 8 months ago

The bunch of other random words aren't coming from this plugin, that's a stacktrace coming from that ankiconnect implementation you're using. I've never seen this before. Considering the "Couldn’t Get Deck ID" was fixed by using the correct deck name in your config, I assume "couldnt get model ID" means you also have the wrong model name in your config.

The plugin normally should just work on android, as long as you have some way to connect with Anki. That custom ankiconnect implementation should work, although I remember there was an issue with it before (https://github.com/KamWithK/AnkiconnectAndroid/issues/47) that doesn't seem to have been addressed yet

squishygian commented 8 months ago

The bunch of other random words aren't coming from this plugin, that's a stacktrace coming from that ankiconnect implementation you're using. I've never seen this before. Considering the "Couldn’t Get Deck ID" was fixed by using the correct deck name in your config, I assume "couldnt get model ID" means you also have the wrong model name in your config.

The plugin normally should just work on android, as long as you have some way to connect with Anki. That custom ankiconnect implementation should work, although I remember there was an issue with it before (KamWithK/AnkiconnectAndroid#47) that doesn't seem to have been addressed yet

Thank you for the resourceful reply! Just a few questions I’m a little confused on

  1. What configurations have people used for this on android that have worked? i.e. What is another way I can connect the plugin with anki that doesn’t involve these apps
  2. Do you know if other people have been successful using ankidroid and ankiconnect?
  3. How would I change the config to reflect the correct model? What model is it even referring to? Sorry for all the questions thanks again for the help!
nairyosangha commented 8 months ago

1: There shouldn't be anything preventing you from using the normal ankiconnect implementation, this being the addon on the desktop Anki version (https://ankiweb.net/shared/info/2055492159) The obvious downside with that is that you need to have your PC running anki to be able to connect to it and sync your notes. The koplugin stores notes locally for this reason, so you can sync occasionally and don't need to have your PC running all the time.

2: No idea, I haven't heard back from the one guy that tried doing this. I've never tried it myself. It claims to just be another implementation of the ankiconnect addon so it should work

3: in Anki each note has an associated model which determines what fields are on your note. You can check in Anki itself, in the menu: Tools - Manage Note Types. You need to provide the name of the note type you want, and the word_field, def_field, etc. should refer to fields of this note type

squishygian commented 8 months ago

1: There shouldn't be anything preventing you from using the normal ankiconnect implementation, this being the addon on the desktop Anki version (https://ankiweb.net/shared/info/2055492159) The obvious downside with that is that you need to have your PC running anki to be able to connect to it and sync your notes. The koplugin stores notes locally for this reason, so you can sync occasionally and don't need to have your PC running all the time.

2: No idea, I haven't heard back from the one guy that tried doing this. I've never tried it myself. It claims to just be another implementation of the ankiconnect addon so it should work

3: in Anki each note has an associated model which determines what fields are on your note. You can check in Anki itself, in the menu: Tools - Manage Note Types. You need to provide the name of the note type you want, and the word_field, def_field, etc. should refer to fields of this note type

Hello, sorry for the late reply, I did not realize I could connect through my pc, I totally misinterpreted the instructions, and to be honest Im still a but confused by them so I was wondering if you could help me answer these questions:

  1. I have the plugin up and running on koreader but it’s not able to send notes to anki on my computer even when I plug it in, I installed ankiconnect on my computer and changed the webbindaddress to 0.0.0.0 as instructed, the next step says to replace the destination path, I’m assuming this is just for the installation of the plugin? I see the destination path has a website though what is that for?

  2. What do I do with the ssh server and ip address information from step 3?

  3. What is that line of code in step 3, do I need to add that to anki connect or something?

Thank you

nairyosangha commented 8 months ago

No need to worry about step 2 and step 3, they are instructions to install the plugin on your desktop (since you can use KOReader on desktop too), and on your e-reader device, which you already managed to do just fine.

You just need to configure the plugin correctly so it can reach AnkiConnect, so that's the url in your settings, that should be either localhost (when you're running AnkiConnect on your android device directly) or the local IP of your PC itself (when running Anki on your PC with the ankiconnect addon).

Judging by the errors you showed earlier ankiconnect-android was working okay, you just had the wrong deck- and model name in your config

squishygian commented 8 months ago

I changed it to the correct deckname and now I get this error 5C0231ED-EB26-4ABC-B1D0-C2F0CFE73EFD

squishygian commented 8 months ago

Actually I don’t think it has anything to do with the deckname, even if I change it to a non existing deck it crashes everytime I try to add to anki on my koreader app

squishygian commented 8 months ago

OK sorry, I hadn’t changed the deck type to the one I wanted (basic) here is the new crash report CEAC5E47-0AA6-46CC-A6BF-3CF812190C1E

squishygian commented 8 months ago

I should also add that I’m trying to add English words, I don’t know what affect that might have

nairyosangha commented 8 months ago

Sorry, I have no idea what those errors are about, you mean KOreader opens fine, the plugin loads, but once you click the button it shows that error?

Can you upload your crash.log? It's a log file that's normally somewhere in koreader's root directory, posting snippet from koreader docs below:

Not sure how you managed to get from the useful errors to this hard crash, I'm not following which changes you made exactly anymore. Might be worth a try to reinstall the plugin completely. The errors you got when opening this issue were simply related to your config having the wrong deck and model name, I can't tell what's going wrong anymore now

I should also add that I’m trying to add English words, I don’t know what affect that might have

That should not be a problem at all

squishygian commented 8 months ago

OK I apologize, I neglected to add the https:// before the localhost 8765 on the anki koreader plugin settings on my device, I fixed that and no longer am experiencing crashes but I am still unable to connect so I will continue to troubleshoot

nairyosangha commented 8 months ago

Make sure you have that android-ankiconnect thing running if you're gonna use localhost, it was connecting fine before

squishygian commented 8 months ago

I’m just going to stick with how it was intended to be used with the PC as the host and Japanese vocab for now because doing it from the ereader with the apps is a whole different can of worms and I’m still not sure if it’s even possible, I referenced the other closed articles and changed my url in the koreader plugin to my computers ipv4, now I’m getting a message that says: “Unable to reach ankiconnect invalid host: ‘nil’ stored offline”

nairyosangha commented 8 months ago

84B1B036-0972-4D23-8C48-BAA7803B9201

For what it's worth, I think you were pretty close to getting it working with the android ankiconnect implementation here. You managed to connect to it fine, the only thing that seemed to be wrong was the model name in your config which is an easy fix.

I’m just going to stick with how it was intended to be used with the PC as the host and Japanese vocab for now because doing it from the ereader with the apps is a whole different can of worms and I’m still not sure if it’s even possible

It's intended to be used with the ankiconnect REST api, on some devices the only option is connecting to your PC's ankiconnect, but that custom implementation should work just as well.

I referenced the other closed articles and changed my url in the koreader plugin to my computers ipv4, now I’m getting a message that says: “Unable to reach ankiconnect invalid host: ‘nil’ stored offline”

that sounds like your url is incorrect still, I'd suggest trying if you can 'talk' to ankiconnect on your browser from the built-in terminal to see if that works: https://github.com/Ajatt-Tools/anki.koplugin/issues/2#issuecomment-1489214507

squishygian commented 8 months ago

OK so I guess I will attempt with the apps because it would be way more convenient, I don’t think it’s connecting anymore though because I’m getting a message that says: “unable to reach anki connect wantread stored offline”

nairyosangha commented 8 months ago

Did you set the url back to http://localhost:8765 ?

Also make sure it's http and not https

squishygian commented 8 months ago

Oh my god I apologize again I am so tech illiterate 😭 one “s” at the end of http was causing a meltdown, thank you for your infinite patience with me, OK I’m back at the couldn’t get model ID error, so I downloaded a code editor to edit config.lua, I changed the deckname to the correct one, what else do I need to do in there?

nairyosangha commented 8 months ago

change modelName to whatever model you want it to use. What note type do you use to make cards usually? Just pick that, if it's the plain flashcard one it's just called 'Basic' by default

squishygian commented 8 months ago

So the Default deck in ankidroid uses “Basic (and reversed card)” I tried inputting both “Basic” and “Basic (and reversed card)” and I’m still getting the couldnt get model id error

nairyosangha commented 8 months ago

You're confusing deck and model I think, deck is the name of the deck your cards go in, model is the type of note you're storing in that deck

squishygian commented 8 months ago

image

I don’t think I am? I attached an image of my config.lua

nairyosangha commented 8 months ago

Oh fuck you're right, sorry

That looks good to me :thinking: Another thought, you mentioned earlier:

OK, I went into the anki settings in koreader and changed the deckname so it matched the one I have in ankidroid, now there is a different error that says “couldnt get model ID”

So you actually installed that patch then to get to the menu? Can you check if it actually shows the correct deck and model name in there too? It actually stores whatever you set in there in a different place from the actual config.lua you're editing now, and that place takes precedence.

I put a note about that at the bottom here https://github.com/Ajatt-Tools/anki.koplugin?tab=readme-ov-file#edit-configuration-within-koreader

squishygian commented 8 months ago

Yes I deleted the .lua file in settings, I even tried a new deck with basic with no luck :( I’ll just try the PC route again

nairyosangha commented 8 months ago

Ok I have another idea, I took a look at that ankiconnect implementation:

https://github.com/KamWithK/AnkiconnectAndroid/blob/3e301637f83970723686eb487691dfa2f4c574ce/app/src/main/java/com/kamwithk/ankiconnectandroid/ankidroid_api/IntegratedAPI.java#L151

In here it is asking for the model name, passing in what I assume to be the correct one. However, it also passes in data.size(), this is a list of all fields you're trying to add on your note. This means it will not consider any model as valid if the amount of fields on it are less than the amounts of fields you're trying to save on it (This is different from the standard ankiconnect!)

The Basic note type only has 2 fields (back and front), but this plugin by default tries to save a few more, namely all the fields listed here https://github.com/Ajatt-Tools/anki.koplugin?tab=readme-ov-file#features, that's the stuff below 'NOTE FIELD CONFIGURATION OPTIONS' in config.lua

Since you're trying to use the Basic note template, I guess you only really want the word (word_field) and the definition (def_field). So if you remove all the other fields (you can just delete these from the config completely), there should only be these 2 fields and then it might work.

squishygian commented 8 months ago

I tried doing that and no luck, it just won’t recognize the model id for whatever reason, I’m still getting the nil host error on my pc, I tried the terminal and it didn’t work, here are all my settings:

My config.lua settings: (same in the anki.plugin koreader settings)

url= (My computer’s IPv4 address)

deckName = "Anki test",

modelName = "Basic",

My settings on the ankiconnect desktop app:

"apiKey":null, "apiLogPath": null, "ignoreOriginalList: [], "webBindAddress": “0.0.0.0” "webBindPort": 8765, "webCorsOrigintist "http://localhost

What the terminal showed:

62FE319A-2EFD-43B8-AF41-3FF66EA411AA

nairyosangha commented 8 months ago

I tried doing that and no luck, it just won’t recognize the model id for whatever reason, I’m still getting the nil host error on my pc, I tried the terminal and it didn’t work, here are all my settings:

My config.lua settings: (same in the anki.plugin koreader settings)

url= (My computer’s IPv4 address)

deckName = "Anki test",

modelName = "Basic",

My settings on the ankiconnect desktop app:

"apiKey":null, "apiLogPath": null, "ignoreOriginalList: [], "webBindAddress": “0.0.0.0” "webBindPort": 8765, "webCorsOrigintist "http://localhost”

What the terminal showed:

62FE319A-2EFD-43B8-AF41-3FF66EA411AA

You didn't run the command though, curl 127.0.0.1:8765 (replace 127.0.0.1 with your local IP address) which should print the 'AnkiConnect' string. Since this e-reader runs android, does it come with a browser too? If so, you can just go to the url http://127.0.0.1:8765 and see if it prints anything.

nairyosangha commented 8 months ago

I tried doing that and no luck, it just won’t recognize the model id for whatever reason, I’m still getting the nil host error on my pc, I tried the terminal and it didn’t work, here are all my settings:

I'd like you to post the crash.log after enabling debug logging (in settings - More tools - Developer options - Enable debug logging, note that this setting only shows up in the koreader filemanager, not while having a document open)

If you try to save a note then it should print the actual message it's sending to ankiconnect. If you could do that for both the PC and android ankiconnect versions it might contain a hint as to what's wrong

squishygian commented 8 months ago

I want to provide you with an important update…….ITS ADDING CARDS ON THE ANKIDROID APP ANYTHING IS POSSIBLE!!!! albeit the cards just say “null” on the front and back 😭 I think your suggestion of deleting everything except for those 2 fields worked, I must’ve left a bracket or something behind by accident the first time, we’re almost there I can feel it 😬, what should I do next? 44C4C9B5-ED0A-442B-9E7B-4F7D0E8257B0

squishygian commented 8 months ago

Just an uneducated guess, could this possibly have to do with the values for the word field and glossary field? i.e. VocabKanji and VocabDef? Should I try changing these to something else?

squishygian commented 8 months ago

YESSSSSSS!!!! IT WORKS NOW I JUST HAD TO CHANGE THOSE TWO VALUES TO “FRONT” and “BACK” THANK YOU SO MUCH SIR YOU ARE A GENIUS YOU HAVE NO IDEA HOW MUCH TIME THIS WILL SAVE ME HAPPY NEW YEARS TO YOU SIR

nairyosangha commented 8 months ago

:partying_face: glad you got it working in the end, that word_field and def_field indeed need to refer to the names of the fields on your note where you want them to go to, but looks like you figured that out

squishygian commented 7 months ago

🥳 glad you got it working in the end, that word_field and def_field indeed need to refer to the names of the fields on your note where you want them to go to, but looks like you figured that out

Another exciting update!! This might be obvious to more advanced Anki users but going off of what you said earlier I wanted to see if it was possible to use all the features by adding more fields to the Basic card type, and it is! You just need to go into ankidroid and create the fields you want with the correct names, then edit your card type, doesn’t matter what type as long as it’s the one referenced in the code, and manually add the field types in and it should work!! Just wanted to leave this here in case anyone else using this on an android platform was curious