DobyTang / LazyLibrarian

This project isn't finished yet. Goal is to create a SickBeard, CouchPotato, Headphones-like application for ebooks. Headphones is used as a base, so there are still a lot of references to it.
728 stars 72 forks source link

All Owned/Wanted books are added to 'Read' shelf even when not read (GoodReads) #1602

Closed Routhinator closed 5 years ago

Routhinator commented 5 years ago

Repo: https://github.com/dobytang/lazylibrarian Branch: master Updated: Mon Oct 8 21:00:24 2018 Current Version: 9416a5e80b443a6c6f26966971a8f5c5f61bfa67 Latest Version: f3e62ca3076c6c5841a4b1c68fdf4d2385493110 Using thraxis/lazylibrarian-calibre docker container

LazyLibrarian has a bug that was introduced at some point in the last year, but I can not be certain when. All books added to any shelf are also added to the 'Read' shelf. This is a problem as I have not read all the books I own, and I've specifically told LazyLibrarian in the settings not to touch that shelf. Once a book is on the Read shelf the only way to remove it is to delete all books from all shelves in GoodReads. The the issue reoccurs on the next sync.

Settings for GoodReads:

Sync Wanted eBooks to Goodreads shelf: wanted Sync Open/Have eBooks to Goodreads shelf: owned Sync Wanted AudioBooks to Goodreads shelf: audio_wanted Sync Open/Have AudioBooks to Goodreads shelf: audio_owned Delete from GoodReads Wanted shelf if also on Open/Have shelf: Checked

philborman commented 5 years ago

All books added to any shelf are also added to the 'Read' shelf. This is done by goodreads, not lazylibrarian. We only talk to the shelves named in our config, but it looks like goodreads assumes if you add a book to a custom shelf it should also be added to 'Read', this is a recent change at goodreads end, I think. We can maybe override it by explicitly removing books from 'Read' if they are already on 'Wanted' or 'Owned', I will have a look in the coming days.

wookielover commented 5 years ago

I experience the same behavior. What I have personally done as a workaround for this issue is that I have set the custom shelf and the read shelf as exclusive on the good reads website.. When you set it this way a book may only be in the custom shelf or the read shelf, not both. Obviously the best thing would be to stop the behavior you are describing completely, but this method achieves a similar result for me.

To set this in Goodreads you login to your goodreads account and then click the (edit) link next to your list of bookshelves. Then next to your custom shelf check the exclusive box. Then anything in your custom shelf won't appear elsewhere until you add it into another shelf.

If this method is determined to be the final solution, maybe there could be an ability/option to set the custom shelf to exclusive through the API upon creation by lazylib?

philborman commented 5 years ago

Yeah, I've just been playing with some code to remove all entries in "Read" that are also on a lazylibrarian shelf, but goodreads tells us it deleted them and then immediately puts them back. Seems we need to make custom shelves exclusive as you suggested. Will make it switchable in the next release, probably after the weekend. It's all a learning curve ;-)

Routhinator commented 5 years ago

Very odd choices by GoodReads, I guess they have never heard of shared libraries that have books that are owned but have not been read and are not on the to-read list. Lol, I'll try the workaround.

philborman commented 5 years ago

We are trying to get goodreads shelves to do something they are not really designed for. Their shelves are a per-user "reading list" so each book is either read/to-read/currently-reading there are no other options.

Our "Wanted" list is fairly easy, presumably if a book is "wanted" it's to-read, but we are also trying to do an "owned" list where some books are owned-and-read, others are owned-to-read etc, which goodreads can't do. Also our "owned" list is library contents, not user specific, so a book can be owned but not read by all users yet.

The original reason for adding goodreads sync was as a backup list of your "wanted" books, and an easy way to use goodreads to add books for lazylibrarian to find. Adding "owned" makes it more complicated and doesn't really add a lot of useful functionality. If it's just a backup of your "owned" books you can use libraryscan to recover the same data.

Personally I run with no custom shelves, Open/Have is left blank so it's not used, and Wanted points to GoodReads To-Read shelf

Problem with making lazylibrarian shelves exclusive is that you can't have a book on a lazylibrarian shelf and also on one of the original goodreads shelves, so if you have a book as "lazylibrarian owned" it can't also be on "goodreads read" when ideally we might want it to be on both.

philborman commented 5 years ago

I think I will have to treat this as "broken as designed" The default goodreads shelves are not really meant for what we are trying to do, good for "wanted", not good for "owned" unless owned is the same as read. You could always keep your own shelves for read, owned, wanted and completely ignore the default goodreads ones...