Git Product home page Git Product logo

Comments (13)

rmcrackan avatar rmcrackan commented on August 12, 2024 6

All right folks -- your patience has (finally) been rewarded. Custom file and folder names are now available. It was a months-long endeavor to undo some early assumptions but it's finally done and I'm very pleased with the result. Applies to GUI and CLI. I'll update the documentation soon with examples.

from libation.

wtanksleyjr avatar wtanksleyjr commented on August 12, 2024

from libation.

rmcrackan avatar rmcrackan commented on August 12, 2024

This is going to get LONG. Bottom line: yes, let's start this conversation and find a solution.

As Libation gets more popular, it's clear that what I made for my preferences is not the way others want to use it. I'm not willing to stop making it convenient for me -- it was for me first dammit :) -- but I'm willing to rethink some optional settings. This thread seems like a good place to start.

There's already a lot above in this thread to address:

  • Libation doesn't need a flat folder structure. You point to a directory -- any directory -- and it will search that and all folders nested beneath it to any depth. It deep scans them a lot though so don't just point to C:\ or you're gonna have a bad time. I point to something like C:\Dropbox\audiobooks and within that I have all manner of OCD folder hierarchy. New books get liberated to that folder then I later move them within that folder
  • Technically Libation looks for any audio file with the id in the file name. I assume people might want to convert to: m4b, mp3, aac, mp4, m4a, ogg, flac
  • Regarding the 0-byte file idea: that would work with the current paradigm but it's totally a hack. And I actually support a secret hack exactly like this -- in addition to common audio filetypes, it also looks for files with the audible id and filetype ".libhack". Feel free to use this nasty trick. I did it for another users with exactly your needs.
  • Storing all full files locally. "libhack" will do the trick. On my laptop, I use Dropbox's "smart sync" which makes it look to Windows like the files are local but they actually take up zero space unless I re-download them from Dropbox.

I think we can do better. Goals:

  • "I would like to have complete control over my destination path and the created filenames."
  • Not keep files around, yet have Libation recognize when book-liberation has occurred
  • no hack-y extra files

I think the answer is:

  • when you liberate a book, Libation should raise a flag in its database. In the folder scans, if it finds a liberated book then raise this same database flag -- this will fix the setting for books which have already been liberated
  • new config setting for whether live-scanning will signal that a title is not currently liberated even if the database flag indicates it has been
  • this means there needs to be a way to reverse that flag. What you really don't want to happen is: user liberates book, moves book file, and loses it. Now they can never liberate it again unless they edit/delete the database file
  • someone's actually got to update the readme/documentation one of these days. Who's in charge of this mess anyway? Damn slacker...

2nd tier desires:

  • A setting for custom file-naming patterns built directly into Libation. The "happy" path of this is dead simple. It's the edge cases that are hard. What about when someone has a typo in their pattern settings? What happens when a book has no author listed (yes, this has happened)? What happens when there are too many authors and the file name is so long it causes issues for windows (some versions of windows STILL haven't fixed the max file path length issue yet)? If the title is long and the author list is long, which do you truncate? What to do when a 'number in series' entry is weird? eg: "0.5", "1-4", ...
  • export book.json like I do with .cue files. Seems do-able. Maybe add settings for both cue and json. A lot of people have wondered why I create these for all books when most people don't need them
  • decrypt directly to mp3. I know this wasn't discussed here, but trust me when I say this is the number-one request by a wide margin

If you actually read all this, go get yourself a beer -- you earned it

from libation.

rmcrackan avatar rmcrackan commented on August 12, 2024

I look forward to hearing your thoughts on this also.

from libation.

eragon921 avatar eragon921 commented on August 12, 2024

Well it looks like someone beat me to the punch in creating this request! That said, my needs are simple. I'd just like to be able to have [Author] - [Title] - [Series].m4b in general. I have no problem appending the audibleID to the end of that though. As to author length, truncate after the second author, or take a queue from the scientific community and add Et Al. The metadata can store the full list. As to odd numbering of the series position, I can't say I have a good answer other than leave as is since neither . nor - should negatively affect file naming if I recall both my Windows and Linux path acceptable characters.

Please do keep the CUE files since they're the most uniformly acceptable to media players. JSON could certainly be an additional option though!

As to MP3, maybe I'm an oddball, but M4B is my preferred format since I can have everything in one file with the chapter markers. File size really isn't an issue in this day and age, especially with third-party AudioBook apps like Sirin, Voice, and Audiobook Player available on Android and iTunes natively on iOS. MP3 sure is universal, but I never feel like I get as good quality out of it. That said, I maintain my library (previously liberated using InAudible) with M4B and the CUE file in case I ever do need to convert to MP3 for whatever reason, or split by chapter markers. Since FFMPEG is the back end for this, I guess just having an option to tell it what to convert to and keep the CUE file would work to cover most people.

As to remote/central library storage, I empathize with the earlier post. If it's "easy" enough to implement the database idea with flags which could be overridden by a manual folder scan, I'd personally go that way. The .libhack method just doesn't sit well with me.

I think that's everything to address rmcrackan's post of options. But I may have missed something.

from libation.

wtanksleyjr avatar wtanksleyjr commented on August 12, 2024

Hold on, I'm going to grab a beer having read all the way through ;) . OK, I'm back.

Actually, with you commenting that you support 0-length-files so long as their extension is "libhack", well, I'm good with that, will begin using it. Delighted to hear that I might get an autoexported "books.json" as well, that's awesome too.

You're right that moving books into folders is hard (I know, I do it, and therefore my current system is broken in a billion ways). This is kind of similar to the request someone else made that we (ahem, well, a programmer who knows C#) normalize the tags in certain recommended ways. I think those two requests would actually be nice to handle; I really, honestly, should consider helping with this. I'm just not as comfortable in C# as Python, and I still have some bugs in my own system.

from libation.

shokinn avatar shokinn commented on August 12, 2024

think we can do better. Goals:

  • "I would like to have complete control over my destination path and the created filenames."
  • Not keep files around, yet have Libation recognize when book-liberation has occurred
  • no hack-y extra files

That sounds awsome 😅

I think the answer is:

  • when you liberate a book, Libation should raise a flag in its database. In the folder scans, if it finds a liberated book then raise this same database flag -- this will fix the setting for books which have already been liberated

  • new config setting for whether live-scanning will signal that a title is not currently liberated even if the database flag indicates it has been

  • this means there needs to be a way to reverse that flag. What you really don't want to happen is: user liberates book, moves book file, and loses it. Now they can never liberate it again unless they edit/delete the database file

It would be also good if there is away to set this flag manual.
For example a lot of my books are stored on a different storage which I cant easily mount into my Filestructure.
So the flag for already converted books would never be raised.

  • someone's actually got to update the readme/documentation one of these days. Who's in charge of this mess anyway? Damn slacker...

Well you know, we all don't like to do documentation, because I/WE know already how it works. So why bothering to document it 😅
But let's be ohnest, A good documentation is still a key part when you open source software to encurage like minded to get started working on it.
(Yes I still have the same problem, I'm also quiet lazy 😹)

2nd tier desires:

  • A setting for custom file-naming patterns built directly into Libation. The "happy" path of this is dead simple. It's the edge cases that are hard. What about when someone has a typo in their pattern settings? What happens when a book has no author listed (yes, this has happened)? What happens when there are too many authors and the file name is so long it causes issues for windows (some versions of windows STILL haven't fixed the max file path length issue yet)? If the title is long and the author list is long, which do you truncate? What to do when a 'number in series' entry is weird? eg: "0.5", "1-4", ...

What about when someone has a typo in their pattern settings?

Validate the pattern before saving.
Maybe taking a look into https://github.com/filebot they use such a feature where you can change the destination path/filename pattern.

What happens when a book has no author listed (yes, this has happened)?

Use N. N. (Audible does this too e.g. for the german version of "Permanent Record" where the narrator is unnamed).
N. N. is latin for:

  • Nomen nescio - I don't know the name
  • Nullum nomen - Name is not mentioned (e.g. because of for security reasons for that person or because they want to be unnamed)
  • Nomen nominandum - Name to be named (yet)
  • Numerius Negidius - is a name used in Roman jurisprudence, based on a play on words: Numerius is a Roman praenomen, or forename, resembling the verb numero, "I pay"; while Negidius has the form of a gentile name formed from the verb nego, "I refuse". Thus, Numerius Negidius is a personal name that can also be interpreted to mean "I refuse to pay". For this reason, it was used to refer to the defendant in a hypothetical lawsuit.

Source: German Wikipedia

  • export book.json like I do with .cue files. Seems do-able. Maybe add settings for both cue and json. A lot of people have wondered why I create these for all books when most people don't need them

  • decrypt directly to mp3. I know this wasn't discussed here, but trust me when I say this is the number-one request by a wide margin

Sounds fair :)
Tbh. I don't have interest in both 😅
Maybe beeing able to deactivate the creation of the cue file since I don't need it at all.
m4b rocks :P

If you actually read all this, go get yourself a beer -- you earned it

Consider this as done :P

I have no problem appending the audibleID to the end of that though.

Mhh maybe the audible ID could be added as non standard tag to the file (I know it's id3 for mp3, don't know the standard for m4b files).

from libation.

rmcrackan avatar rmcrackan commented on August 12, 2024

I hope to revisit this eventually. For now though, there are just too many higher priorities items. So with respect to everyone here, I'm closing this for now -- I don't want to get your hopes up. If this were a paid job or if I had another few trusted developers, this could be a thing. I hope you understand.

Hopefully the structured exports can help you script a home spun solution.

from libation.

rmcrackan avatar rmcrackan commented on August 12, 2024

Fyi -- the "libhack" files are no mas. Do not use them. The alternative is officially supported now. The button which used to be edit-tags now exposes more functions, including this.

from libation.

wtanksleyjr avatar wtanksleyjr commented on August 12, 2024

from libation.

rmcrackan avatar rmcrackan commented on August 12, 2024

@wtanksleyjr libhack was, well, a hack and never intended as a usable feature.

The new workflow is that when a book is liberated, its state is saved in the db and it no longer matters what you do with the files. This change was made with users like you in mind. When this change was made recently, a migration script ran silently in the background to record these existing states to the database. If the file was found, it was set to Liberated. If not, it stayed on Not Liberated, and if the libhack file was found it was set to Error. Therefore, I imagine you have a ton of books with an Error status. You can manually change these in the UI, 1 book at a time.

Normally I 100% do not endorse users touching the database or coding directly against it -- the database is not an API and will not be supported like one. In this one case what you need to do is update Books set BookStatus=1 where BookStatus=2; 0 = Not Liberated , 1 = Liberated , 2 = Error

In general please do not write scripts against the database. I need to be able to alter it without breaking other people's stuff.

from libation.

wtanksleyjr avatar wtanksleyjr commented on August 12, 2024

from libation.

CharlieRussel avatar CharlieRussel commented on August 12, 2024

Thanks for this! Really appreciated.

from libation.

Related Issues (20)

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.