rmcrackan / Libation

Libation: Liberate your Library
GNU General Public License v3.0
2.8k stars 152 forks source link

Feature Requests: 7 Features - Other tabs besides Library, add all episodes from podcast to queue, convert .aax to other formats, and 4 more features! #272

Closed ghost closed 2 years ago

ghost commented 2 years ago

Add All Episodes From Podcast To Queue If you have a podcast or series with many episodes, it can be a pain to select them all manually. Audiobooks should retain their correct order

Convert .aax To Other Formats To .wav, .flac, or .mp3. With all the audio file options/mp3 encoding options we currently have, with optional splitting with .cue file. Depends on how much of a utility you'd want Libation to be, but you could also add support to convert aac, m4a, m4b, alac, aaxc, m4p, ogg. To .wav, .flac, or .mp3.

Resume Feature Make Libation remember the last chapter decrypted/converted so if Libation unexpected closes/shuts down/errors/loss of power then you can reopen Libation and it will know the chapter it was currently working on was corrupted/not finished. It could delete it and start over from that chapter without having to start over again from the beginning. I thought Libation had a feature similar to this awhile back, where it would go through and recheck if there was an error and pick back up. But at some point, I don't know if the feature was removed, but it no longer does that for me if i get an error.

Online Backup After an audiobook/podcast has decrypting/converting. The files can be uploaded to your online cloud storage. If possible, an optional setting to automatically upload each chapter/episode as Libation continues to work. Mega.nz & Mega.io allow the use of "Megadrop folders" where you can create a folder and set it so that anyone can upload to it without an account, without authentification. I think that makes this possible. Just like, tell Libation the folder url?

More Info On Tags & Details Page Source File Bitrate (Bitrate that the audiobook/podcast episode) originally has. Not the one you might have set in MP3 Encoding options.

Estimated Queue Download Time Libation will estimate how long it will take to download everything in your queue.

Multiple Tabs Concept Image (and image of typo within Libation) "Library" Tab | "New" Tab | "Wishlist" Tab | Follow Tab | Archive Tab [Ability To Reorder Tabs?]

Library - Displays Library

New - Podcasts/Series that you follow that have had episodes added in the past week or month (User Option)

Wishlist - Displays items in wishlist and the current price (Updated at Libation Launch)

Follow - Authors that you add to Libation yourself. When authors part of this list release an audiobook, it is displayed here. Keep new releases the "Follow" tab for a week or month. User Option Like the "New" tab

Archive - Like "Library View" except, Archive, displays anything ever added to your audible account. Even if it was added but never liberated. Even if an Audiobook/podcast is removed from your library, it stays here. Its your archive of anything you have ever added to your audible account. However, In order to redownload/listen to the audiobook/podcast again, you would have to readd it to your library.

"Made by a programmer, not a designer so the goals are function rather than beauty. And it shows" Libation doesnt actually look bad in my opinion and function is more important than looks anyways, but with that being said. If you are ever interested in a full appearance/design overhaul. I have some great ideas to make Libation appear much more "modern". While I don't know how to actually make the look happen, I could create some concept images that'd make Libation look beautiful.

Mbucari commented 2 years ago

Add All Episodes From Podcast To Queue

I really like this idea, but I'm not sure how to integrate this into the UI. We're already using the "Liberate" button to expand/collapse the series. Maybe ctrl+click adds all episodes to the queue? How would you like to see this feature implemented?

Convert .aax To Other Formats

First so we're all on the same page, mp4, m4a, m4b files are all the same container format. The file extensions imply different things about the contents, but the actual container format is the same. All audible audiobooks (except for podcasts) are delivered as mp4 files containing an aac-lc audio stream. All audiobooks' audio streams are stereo, and the sample rates are either 22kHz or 44kHz

Convert to wave is just not possible. The wave file format maxes out at 4gb. For 22kHz stereo files (the lowest quality offered by audible), that's ~13.5 hours. It's half that for 44kHz files. Audiobooks are just too long to be saved as wave file.

Flac is possible, but to what end? Flac is a lossless standard, so to convert the native aac audio to flac, you'd decode the aac to wave and then losslessly conpress the wave to flac. You'll end up with a file size much larger than the original m4b file, and it will be playable by even fewer devices than the m4b file. I don't know much about ogg, but I do know not many players support it.

Resume Feature

This somehow got disabled at some point, but it was re-enabled in Libation 7.2. Note that the only part of the process that is resumable is the aax file download. The decryption/encoding step is not and never has been resumable. There are reasons for that, but the tl;dr is it's way too much work for too little reward. For most people, download the encrypted audiobook is the most time expensive part, so making that resumable makes sense and it is pretty easy to do. Plus, many people have data caps on their internet plans, so minimizing internet traffic is a big plus. Making decoding/transcoding resumable is an entirely different can of worms that would add a lot of complexity, and the only payoff is you'd get to save some of your CPU time after an error occured. I just don't want to do it.

Online Backup

I'll let @rmcrackan speak for himself about implementing this feature, but if you have a cloud storage account with a provider that has a desktop folder sync program, you can either set libation to store books in that cloud sync folder, or you can create a symbolic directory link to the libation books folder inside your cloud sync folder.

mklink /d c:\Path\To\CloudSyncFolder c:\users\you\Libation\Books

More Info On Tags & Details Page

I would love this feature, and I think it's possible. It would only be an estimate based on what audible claims the bitrate is. Audible says their bitrates are 32, 64 or 128 kBps, but actual bitrate for any given file varies and may be higher or lower (usually lower) by ~3%.

@rmcrackan, for this to work, we'd need to add the Item.AvailableCodecs into to the Books files. We only need to add 1 codec: the highest quality aax file (since we always request the maximum quality when downloading, that is the only applicable codec)

Estimated Queue Download Time

This is another feature I'd love to have, and it requires the same addition of audio bitrate to the db as the previous feature.

Multiple tabs

I'll let @rmcrackan address these since they all require infor from the audible API, and he's the resident expert on that.

Bringing UX into the current decade

I'd love some ideas and design mock-ups. I just redesigned the liberate icons for Libation 8, and they represent the height of my graphic design abilities. I'm not exactly up to date on current design trends, but I'm pretty sure "flat" is still in, right? 3D Glossy is sooo 2005.

rmcrackan commented 2 years ago

Wow, lots of good feedback here.

Add All Episodes From Podcast To Queue

My 1st thought was like @Mbucari 's: I love this in principle. Not sure how to cleanly work it into the UI

Convert .aax To Other Formats

If another developer (eg: @Mbucari ) takes it upon themself, I'll allow it. I'm not personally interested though. My goal is to be best at what we do and let others do the same. For file conversion, so many other people already do this better. Libation's mp3 conversion is already more than I'd originally intended. It's really nice though and was an incredibly popular user request.

Resume Feature

I think this already happens

Online Backup

On the first tab in settings, you can change the output location. I use this to automatically put all books into Dropbox. Compatible with google drive, icloud, etc. I don't know how mega does it.

More Info On Tags & Details Page

Interesting idea. The data we gather is about the content metadata, not file metadata. No reason we couldn't do it though while we're in the process of decrypting. However there will be no way to get it again for past files which have already been downloaded if the user moves the file from the orig download location. Exception: if the user keeps the orig id in the file name. It's annoying but possible to reset the 'downloaded' status to re-download stuff if the stats are important to you.

@Mbucari : RE "add the Item.AvailableCodecs into to the Books files" I don't want to take liberties with the users' files. We could store this info in our db at decrypt time. We can also do this if the file or its folder retained the audible id (like we do when you click the green light on a moved item).

Estimated Queue Download Time

I'm a little hesitant because as a user I hate how inaccurate these always are. I don't want to be another source of frustration in people's life. If you'd find it valuable though we could certainly look into it.

Tabs

Probably not. 'New' sounds useful. 'Follow' requires a level of getting info from audible which I don't even know if it's possible via their api. 'Archive' is very similar to what's already in the main grid. Where it should differ will be too subjective. Where you want removed books to stay the next person won't and the person after that will want everything except podcasts. The main grid defaults to sorting by date added to your library which isn't identical to new but is close enough that I don't think it merits the level of overhaul that one tab would require.

Made by a programmer ... doesnt actually look bad

Thanks! It's a lot better than it used to be. Yes, if you have any advice or mock ups, I'd love to see them. I can't promise I'd even know how to implement them myself but I'd like to try. Are you a designer?

Bringing UX into the current decade

pssh. I'm backend. Monospace text and grey squares never go out of style. Fight me!

Mbucari commented 2 years ago

RE "add the Item.AvailableCodecs into to the Books files" I don't want to take liberties with the users' files.

Sorry, that was worded poorly. What I mean is add a property to the Books class and store bitrate (and maybe sample rate) in the db when books are imported. That's the only way to get encoding info in batches, otherwise you'd have to query individual files from the API, and that'd take forever.

Monospace text and grey squares never go out of style.

Courier New is my font of choice in my apps for personal use!

rmcrackan commented 2 years ago

add a property to the Books class

Ah! Yes. That we can do :) We could either extend books or better: add something "owned" similar to UserDefinedItem -- where it's basically 1:1 with the book. Just an implementation detail to keep the areas of concern encapsulated -- Books for content metadata and this other new class/table for audio file metadata

ghost commented 2 years ago

@rmcrackan @Mbucari I agree with alot of the things you guys say, I just... didn't realize them myself. Add All Episodes From Podcast To Queue I think a ctrl+click, alt+click, shift+click on the "+" to expand the podcast series would work well. Or maybe just a standard right click even. Many "power users" are used to using ctrl+click, alt+click,shift+click type combinations on other programs already. And for most, i think it'd be a simple concept to grasp even if they are technologically challenged"

Convert .aax To Other Formats

Flac is possible, but to what end? Flac is a lossless standard, so to convert the native aac audio to flac, you'd decode the aac to wave and then losslessly conpress the wave to flac. You'll end up with a file size much larger than the original m4b file I've done this with multiple tools before, and it ended up being alot of work for little payout and a gigantic filesize. So i see why it wouldn't be a priority, Also. not to mention, Libation's system already works beautifully. Why fix what isn't broken

I think to me, the feature to convert at all, within libation would more be a quality of life feature more than something important.

Online backup I didn't even think to use the sync feature. Mega has this.

Estimated Queue Download Time

I'm a little hesitant because as a user I hate how inaccurate these always are. I don't want to be another source of frustration in people's life. If you'd find it valuable though we could certainly look into it.

These were my exact thoughts when i had the idea for this. I don't think theres any point in adding it, if it wouldn't have a fair degree of accuracy. It would be nice to have, but, is that all it'd be? Or would it actually be useful to anyone? I think, if you think it's something people could benefit from, it might be worth atleast looking into. But above all else, if the estimated time can't have a decent accuracy, then there would be no point in adding it at all. Obviously it wouldn't be perfect. But again, i guess it depends on accuracy of time.

Tabs Actually almost removed this idea from the post. Soley due to where it should differ. But i wanted to atleast hear other's thoughts

Design I'm not a designer. well, not professionally. I know most of what i know about design by just messing around with photoshop and i make logos and stuff for fun. Most of the things i've worked on have never been seen. However, I do admit that i've gotten some skills and am very creative. I don't have any mockups/concepts for libation. But if you give me an idea of hypothetically how much effort youd want into a potential redesign, i can make some based on that. Yes, @rmcrackan the current design will never go out of style. We must bow to your sweet succulent grey squares!

I could go all out and make libation look completely different, while preserving all of it's functions. Or i could simply add some spice. Or modernize the current design/layout. There's alot of directions i could go in. I just need an idea of what types of concepts/mockups you'd be interested in seeing. Unfortunately due to an accident with a pc awhile back, i lost alot of what i made. But here's a folder of stuff i made. Simple stuff for the most part. The company concept logo i made in 15 minutes simply to mess with someone a long time ago. I've emailed the decryption key to you, to the email you have listed on your github @rmcrackan . I'd rather not share this stuff (Although, of no value) publicly. @Mbucari You didn't have an email or a way i could message you privately from what i saw. could @rmcrackan forward the decryption key to ya privately?

rmcrackan commented 2 years ago

Add All Episodes From Podcast To Queue

I don't like the lack of discoverability of keyboard shortcuts. Oooh, but maybe the mouseover can show the keyboard shortcut. That could work.

Estimated Queue Download Time

High accuracy requires knowing file-specific stuff which I believe we don't know until we get to that file. However we have the all books' runtime ahead of time so we can estimate based on that. I guess we could find the user's bits vs runtime ratio which would get more and more refined as we process a queue. If we can't get it right though, I don't want to be yet another pain point in people's digital life.

Yes, @rmcrackan the current design will never go out of style. We must bow to your sweet succulent grey squares!

Yer damn right. Get offa my lawn!!

Unfortunately due to an accident with a pc awhile back

Ouch!! We've all been there. The pain is real.

I've emailed the decryption key to you

Thanks. I fwd'd that email to @MBucari

Notes on design:

Mbucari commented 2 years ago

A change to a different framework

We've had this conversation a few times already, and I had even started some work to do that. I stopped working on it when I realized just how hacked together the UI was, and that those hacks could not be applied to different frameworks. Since then, the main grid has been overhauled and the only ui hacking for the library display is the work done OnPaint. Several display frameworks still allow you to do custom painting, so porting to a new framework should be possible without a total re-conception of UI design. But yeah, it'll still be a herculean effort.

.NET MAUI doesn't have the controls we'd need out-the-box, so we'd have to build them. As it happens, my recent experience creating the ProcessQueueControl used many of the same building blocks that would be required to build a DataGridView control from individual UI components. But my god, that would be a lot of work. DevExpress has a DataGridView control build with MAUI, but it's not free. Maybe get a free trial and have a little look under the hood, *wink* *wink* *nudge* *nudge*.

Remember Avalonia UI (I mentioned it last year and even started doing some work with it)? It has a MVVM DataGrid control. In fact, the reason I started pushing to move full MVVM was precisely so we could port to Avalonia. It has all the parts we need, like data binding and custom column templates.

If we do port to Avalonia, Libation can truly be cross-platform. AAXClean.Codecs can be made cross-platform by compiling the aac decoding and mp3 encoding libs to mac and linux. Both those libs are from platform-independent code, so it should just be a matter of changing the target platform and recompiling.

Or as someone on reddit mentioned, just throw Libation into a docker container. Doesn't solve the ui beautification problem, but it does solve cross-platform.

rmcrackan commented 2 years ago

Yup -- I recall

In the near future, MAUI will either get more mature and will have better components or it will prove that it's yet another mess that MS doesn't take far enough. Also I don't think there's linux support even planned for it -- which is effing baffling to me. Right now it looks like the future but lord knows I've been burned by such claims before.

If Libation can't be made truly cross platform, I don't think there's any reason to do a full framework overhaul. A full replacement just for aesthetics is bad return on effort. Which means MAUI (maybe), 3rd party like Avalonia, or web-app that somehow plays nice with the OS, files, exe.s, etc. All that to say: you're welcome to take this on as long as you know what you're getting yourself into. Oh yeah, AND you'd get to try to design it while other changes might be made in parallel to the main codebase. I wouldn't try to trip you up but shtuff happens.

ghost commented 2 years ago

I was struggling with how to display the shortcut(s) as well. Mouseover would be good though!

Estimated Queue Download Time

The more that is said about this, the more I realize how much of a pain this would be, for so little payout

Design Give me some time to research what can/can't be done with winforms and ill try to make some mockups based on what can be accomplished with it. I really put effort into ANY mockup/concept art i make, so give me some time to really learn the limits and such. I wouldn't be able to justify a framework rewrite just for a redesign. @rmcrackan @Mbucari A quick search on my source for clean, activated copies of Devexpress, turned up many results. I'd vouch for them in terms of being safe. If that's something either of you are willing to work with and dont have any objections. Contact me via email.

Mbucari commented 2 years ago

The more that is said about this, the more I realize how much of a pain this would be, for so little payout

If we can add the file bitrate on library sync (which would be quite easy), it really would not be much of a pain to add estimated completion time to the queue. It would not be very accurate, but I don't think it would be as an accurate as you or @rmcrackan fear. We would have the law of large numbers on our side, so the longer the queue, the more accurate the ETA would be. I'm game for giving it a try at least.

Design, research what can/can't be done with winforms...

Really, anything you could imagine could be done with winforms. But at this point we are at a crossroads. We can either invest more energy into improving the display with winforms, or we can port libation to a new UI framework. As @rmcrackan said, a full UI replacement just for aesthetics is a bad ROI. But if we replace the UI for aesthetics and for cross-platform compatibility, that is a huge ROI. Cross-platform is an evergreen request, and it just cannot happen without changing the UI framework to something cross-platform. I've been wanting to do this for a while, and I think I'm going to attempt it soon. As @rmcrackan said, it is a Herculean effort (and yes, I do know what I would be getting into, which is why I'm sounding so non-committal).

But what would be very helpful is if you could compile some screenshots of UI elements that you think would look good in libation. Maybe an example of a table / grid of data that we could try to mimic for the main library view. Or a particular style for buttons or menu items that we could copy. Basically, examples that we can try to mimic.

Thanks!

ghost commented 2 years ago

I already have some ideas. Ill start on them this weekend! Knowing how picky i am, and how perfect things need to be before i'm satisfied enough to share stuff, im estimating itll be a week. I'm definitely going to have fun with this though. This might end up being a project where i create like 30 mockups. simply because i have so many ideas haha. Ill keep you both posted here, or create a new issue with Feature Request when they're ready.

As for the time estimates. Theres no harm in trying atleast, Could a formula of sorts be used? like 64kbps every x seconds = Time and then set the formula to work with any bitrate. Working backwords in a way i guess. I feel like thats wayyy too simple to even work in the slightest, but. thats the best i've got. Sort've feels like im just throwing an ikea table on the ground and hoping it puts itself together with this idea :laughing:

rmcrackan commented 2 years ago

Design

What he said :) Seriously, though, I'm sympatico with all points that @Mbucari made

Estimated Queue Download Time

tl;dr: it could be a fun engineering challenge but unlikely to be good ROI. But hey, I've done more for less

It's not insurmountable but it is a lot of effort for possibly limited reward. On fast internet, we've gotten it so fast that you can eyeball your remaining books and know that your time is that number times a few seconds. On slow internet, speed is more likely to be unstable and that's where the uncertainty comes in.

If we can add the file bitrate on library sync (which would be quite easy)

Right ... bitrate is probably available in the orig query. We just don't currently use it so that didn't occur to me. Another 1/2 baked idea: would it be useful to save each book's raw json? If yes, be careful when re-saving changes.

64kbps every x seconds = Time

This is one part math and one part environment. It's that last part that kicks us in the teeth.

My internet is high speed but once every few hours, AT&T apparently decides to take a siesta and everything stops responding for a minute or so. Then it resumes again.

The old-school way of doing this is seeing those familiar annoying: 0:03, 0:02, 22:11:43, 99:04:43, 0:01. No one wants that.

Most GPS/maps apps calculate how fast you should be able to go for your particular route. If you go slower than that, the arrival time increases. If conditions get worse and the 'how fast you should be able to go' gets worse, the arrival time increases. If you stop for 2 minutes, 2 minutes simply gets added to your arrival time. Better but the last one especially is still frustrating in our case.

Accumulating a long term average is bad when things change; it takes too long for a new permanent change in environment to affect a really long term average. You can keep an rolling average to smooth out the curves that happen with big changes in download speed. (Rolling average: same as a normal average except only retain the most recent x readings.)

Mbucari commented 2 years ago

@ilicity I hope you try out the beta released with version 8.2. It's got the new UI framework we're trying out. To opt in to the beta, go to settings and check "Use the beta version of Libation"

rmcrackan commented 2 years ago

I think this ticket has become too long and unfocused to be useful. If there are any specific pending requests, let's open a new ticket for each.