FCR001 / cantata

Automatically exported from code.google.com/p/cantata
GNU General Public License v3.0
0 stars 0 forks source link

[Enhancement] Better Podcast Support #547

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Problem: New Episodes are not Tracked

When a new Podcast is added all episodes are displayed in bold and the total 
number of episodes is displayed in the "Detailed Tree" view.  There is no way 
to mark one or all episodes as listened to.

This leads to several inconveniences:

1. When checking for new episodes it is impossible to tell which are new 
without clicking the Podcast and hovering the pointer over the episode to see 
the date in the tooltip.  If auto-downloading is enable it is still impossible 
to see if a new episode has arrived without clicking each Podcast individually.

2. There is no way to limit the number of episodes that are considered new when 
adding a Podcast.  This means that if I add a feed with 100 entries and have 
auto-downloading enable Cantata will try to download all 100 episodes.  As far 
as I can tell there is no way to cancel a download after it starts without 
quitting Cantata and delving into the file system.  The current workaround is 
to disable auto-downloading, add feed, enable auto-downloading, and then 
manually download the latest episode of the added feed.

3. There is no option to limit the displayed number of episodes.  A Podcaster 
may provide all his or her episodes in a feed, in some cases 500 or more, and 
they are always displayed, in bold text, when all I am interested in is perhaps 
the last 10 episodes.

My thoughts on solving these issues:

1. Add an option in the configuration dialog to consider all episodes except 
the latest as listened to when adding a new feed.

2. Add an option to download only the latest episode automatically when adding 
a new feed.  (Or just make that the default behavior if auto-downloading is 
enabled.  I can't imagine anyone wanting to download hundreds of episodes.)

3. Add an option to limit number of displayed episodes.

4. Only show new episodes in bold, and include the number of new episodes (and 
possibly downloaded episodes) next to the total number of episodes in the 
"Detailed Tree" view.

5. Consider an episode as "listened" after starting playback of it.  New 
context menu entries to mark individual or selected episodes as "listened to" 
and "New" would be useful.

I hope I was clear enough (and made sense and did this right).  As far as I can 
tell Cantata is the best MPD client around (especially for KDE), and I have no 
idea how complex or annoying it would be to track episodes, but it would 
greatly enhance the usability of Cantata's pocatching feature.

Original issue reported on code.google.com by stupidgo...@gmail.com on 24 Sep 2014 at 8:46

GoogleCodeExporter commented 9 years ago
The issue with episodes always being bold was a bug. This should now be fixed, 
and only unplayed episodes should be bold.

As to your thoughts above:

1. No - unplayed are unplayed. The latest should be at the top anyway.

2. I guess a 'Download X' episodes automatically would make sense.

3. Why? This is not as easy as it seems. Should it be X epsiodes, or X unplayed 
episodes? What about downloaded episodes - should they always bee displayed? 
There is no other limiting of items - e.g. you cant limit an album to only show 
10 tracks. What do other apps (e.g. Amarok, Clementine, etc) do?

4. Not sure about this. If the podcast is bold - then it means it has new 
episodes. Not convinced the number of new episode makes much difference.

5. It is - this was the bug that has now been fixed.

I also think it should be possible to cancel podcast downloads, and I'll try 
and add this for 1.5.0

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 11:15

GoogleCodeExporter commented 9 years ago
I *almost* filed the bold thing as a bug...guess I should have :)

1. If the podcast header turns bold when new episodes are available and the new 
episodes are shown in bold then this is no longer an issue.  I know the new 
episodes are always at the top, the problem was there was no convenient way to 
tell if it was listened to or not.

2. I agree.

3. I admit this is more of a pet peeve than a deficiency.  Gpodder offers this 
feature as well as most feed readers such as Akregator.  It's simply a way to 
unclutter the interface and allow for viewing more open feeds at once.  Amarok 
is too buggy on my computer to use so I can't speak to that, but Clementine is 
the player I used before Cantata and it does not offer this feature (although 
it has many of its own problems with Podcast support, including #2).
I can write a Bash script that will blow your socks off but I am by no means a 
developer and hoped this would be trivial to implement.  If you were to 
implement it I would say that it should be X episodes *unless* X is less than 
the number of unplayed episodes.  If unplayed episodes *exceeds* X then show 
all unplayed episodes past X.  In other words, show all unplayed episodes no 
matter what, perhaps with a context menu to mark episodes as listened or not.

4. I agree.  As long as there is a visual cue that does not require clicking 
every feed I don't think it matters what that cue is.

5. Yay!

The only thing I'm unclear on is what happens when I add a new feed.  I assume 
a new feed is wholly consider unplayed (Cantata is failing to compile so I 
can't find out, see below).  So will every feed always be considered unplayed 
until I play each and every episode?  For example, here was the (clunky) 
process of adding a new Podcast in Clementine:

1. Disable auto-download (don't forget this because no way to cancel in 
Clementine either!)
2. Add feed
3. Re-enable auto-download
4. Shift-click all episodes (which are bold to indicate unplayed) except the 
latest, right click, select "Mark as Listened", at which point they are no 
longer bold.
5. Right click latest episode to download

In Clementine, without the right click menu, all the old episodes would be bold 
forever and the feed would always indicate new episodes.

Here is the error when I try to compile:

Linking CXX static library ../lib/libsupport.a
Generating moc_playlistspage.cpp
Generating moc_audiocddevice.cpp
Generating moc_albumsmodel.cpp
Generating moc_scrobblinglove.cpp
[ 20%] Built target support
Generating moc_synccollectionwidget.cpp
Generating moc_othersettings.cpp
Generating moc_devicepropertieswidget.cpp
Generating moc_preferencesdialog.cpp
Generating moc_albumspage.cpp
Generating moc_wikipediasettings.cpp
Generating moc_onlineservicespage.cpp
Generating moc_musiclibrarymodel.cpp
Generating moc_contextwidget.cpp
Generating moc_taghelperiface.cpp
Generating moc_backdropcreator.cpp
Generating moc_dynamicpage.cpp
Generating moc_musiclibraryproxymodel.cpp
Generating moc_digitallyimportedsettings.cpp
Generating moc_playbacksettings.cpp
Generating moc_streamsearchmodel.cpp
Generating moc_tagreader.cpp
Generating moc_digitallyimported.cpp
Generating moc_cddbselectiondialog.cpp
Generating moc_magnatuneservice.cpp
Generating moc_devicespage.cpp
Generating moc_httpstream.cpp
Generating moc_streamdialog.cpp
Generating moc_actionmodel.cpp
Generating moc_actionitemdelegate.cpp
Generating moc_volumeslider.cpp
Generating moc_onlineservicesmodel.cpp
Generating moc_podcastsettingsdialog.cpp
Generating moc_devicesmodel.cpp
Generating moc_albumscanner.cpp
Generating moc_application_kde.cpp
Generating moc_playlistsproxymodel.cpp
Generating moc_valueslider.cpp
Generating moc_messageoverlay.cpp
Generating moc_lastfmengine.cpp
Generating moc_albumview.cpp
Generating moc_devicepropertiesdialog.cpp
Generating moc_listview.cpp
Generating moc_songview.cpp
Generating moc_filejob.cpp
Generating moc_actiondialog.cpp
Generating moc_dynamicrulesdialog.cpp
Generating moc_metaengine.cpp
Generating moc_networkaccessmanager.cpp
Generating moc_streamsmodel.cpp
Generating moc_dynamicruledialog.cpp
Generating moc_lyricsdialog.cpp
Generating moc_mainwindow.cpp
Generating moc_streamspage.cpp
Generating moc_mountpoints.cpp
Generating moc_trackorganiser.cpp
Generating moc_scrobblingstatus.cpp
Generating moc_coverdialog.cpp
Generating moc_powermanagement.cpp
Generating moc_cddbinterface.cpp
Generating moc_device.cpp
Generating moc_onlinesettings.cpp
Generating moc_httpsocket.cpp
Generating moc_cachesettings.cpp
Generating moc_scrobbler.cpp
Generating moc_httpserver.cpp
Generating moc_playqueueview.cpp
Generating moc_tageditor.cpp
Generating moc_treeview.cpp
Generating moc_multimusicmodel.cpp
Generating moc_ultimatelyricsprovider.cpp
Generating moc_notelabel.cpp
Generating moc_servicestatuslabel.cpp
Generating moc_wikipediaengine.cpp
Generating moc_playlistsmodel.cpp
Generating moc_searchmodel.cpp
Generating moc_transcodingjob.cpp
Generating moc_soundcloudservice.cpp
Generating moc_covers.cpp
Generating moc_streamproviderlistdialog.cpp
Generating moc_currentcover.cpp
Generating moc_streamssettings.cpp
Generating moc_dynamic.cpp
Generating moc_scrobblingsettings.cpp
Generating moc_filenameschemedialog.cpp
Generating moc_mpdstats.cpp
Generating moc_notify.cpp
Generating moc_initialsettingswizard.cpp
Generating moc_stretchheaderview.cpp
Generating moc_coverwidget.cpp
Generating moc_playqueueproxymodel.cpp
Generating moc_dirviewproxymodel.cpp
Generating moc_extractjob.cpp
Generating moc_umsdevice.cpp
Generating moc_syncdialog.cpp
Generating moc_trayitem.cpp
Generating moc_itemview.cpp
Generating moc_magnatunesettingsdialog.cpp
Generating moc_autohidingsplitter.cpp
Generating moc_podcastservice.cpp
Generating moc_actionlabel.cpp
Generating moc_searchpage.cpp
Generating moc_view.cpp
Generating moc_librarypage.cpp
Generating moc_ratingwidget.cpp
Generating moc_genrecombo.cpp
[ 20%] Built target cantata_automoc
Makefile:137: recipe for target 'all' failed
make: *** [all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 5:37

GoogleCodeExporter commented 9 years ago
I've just updated the podcast support;

1. The podcast name (not episodes) should have had the unread count in brackets 
at the end. It used to, and this was broken. I have fixed this now (for both 
1.5.0 and 1.4.2)

2. You can now mark podcasts as having been played, or not

3. Podcasts are downloaded sequentially - so not all at once.

4. You can cancel the download

As to the compile failier, I'm not sure - there is no error message. Could you 
try a Qt-only build? Pass -DENABLE_KDE=OFF to cmake  I'll try a KDE build in a 
mo, just to see if thats the issue.

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 6:36

GoogleCodeExporter commented 9 years ago
Just tried a KDE build - and it was broken. Fixed now.

So, the only features left to do are:

1. Limit number of downloads. Is this necessary now? seeing as they are now 
done sequentially?

2. Limit the display to X episodes

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 6:46

GoogleCodeExporter commented 9 years ago
Compiled and tried.  I must say you are amazing.

1. I suppose it's a matter of convenience.  I added a random podcast (Comedy 
Bang Bang) which has a total of 328 episodes.  With auto-downloading enabled it 
started the first one and queued the rest.  So it seems I have to select the 
other 237 episodes and cancel the downloads then mark them as listened.  I 
think that limiting the number of downloads for newly added Podcasts or simply 
an option to not download anything for new feeds would be very helpful, but if 
it would be a pain to implement I guess it's not that big a deal.

2. Perhaps if the display of episodes could be limited then the number of 
initial downloads initiated when adding a Podcast could be limited to that 
number.  Not a great solution, but maybe simpler?

I didn't mention it before, but I see you made a commit to notice when Cantata 
is closed and a Podcast is being downloaded.  The previous behavior was to 
leave a ".partial" file behind and now the behavior seems to be removing all 
indications of the download and starting it over manually from the beginning.  
Would it be possible to make Cantata resume partial downloads if they are 
interrupted?

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 7:40

GoogleCodeExporter commented 9 years ago
Never mind part of that last bit, I wasn't on the latest commit.

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 7:53

GoogleCodeExporter commented 9 years ago
1. Limiting the number of downloads should be easy enough to do - I just 
haven't gotten round to it yet.

2. I'm still not convinced about hiding things. If the episodes are not 
automatically downloaded, what difference does it make if they appear? At least 
you know what is available.

Cantata has never resumed the downloads. If any previous .partial was left 
over, it would just be removed. I guess it depends on whether the server 
supports resuming. It /could/ be done - again, its a matter of time and 
priorities.

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 7:56

GoogleCodeExporter commented 9 years ago
Configurable download limit is now in trunk - but I have not actually tested 
this yet! :-)

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 8:57

GoogleCodeExporter commented 9 years ago
2. I agree, this feature has no bearing on anything really.  Just something I 
would make use of.  Don't know how useful it would be to anyone else and it 
certainly isn't necessary.

As for resuming, I think I didn't explain very well.  The current behavior 
seems to be that if I begin a download a ".partial" file is created in 
$HOME/Podcasts/PODCAST.  If I quit Cantata or a crash occurs that ".partial" 
file is left on the file system.  When I restart Cantata there is no indication 
that the download did not complete and that there is a ".partial" file in 
$HOME/Podcasts/PODCAST.

For example, I subscribe to "The Partially Examined Life."  I began downloading 
two random episodes and closed Cantata.  Now these two files exists in 
$HOME/Podcasts/The Partially Examined Life Philosophy Podcast:

PEL_ep_096_6-6-14.mp3.partial
PEL_ep_092_3-16-14.mp3.partial

When I start Cantata the files remain and there is no indication in the UI that 
these partial downloads exists or that any downloads were interrupted.

Being in $HOME/Podcasts/PODCAST and not in /tmp or not being removed in some 
other way means that the files could potentially be there forever. 
Resuming/restarting the download or providing some visual indication that the 
download was interrupted when Cantata is restarted would solve this, but I 
guess it's not an issue that would directly affect many users in a noticeable 
way, which is why I didn't mention it before.  I'm not a developer (nor am I 
you) so I don't know how important such a thing is :)

In any case I'll stop bothering you and thanks for taking the time to work on 
this.  I really appreciate it!

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 8:57

GoogleCodeExporter commented 9 years ago
Build Failure!

Building CXX object CMakeFiles/cantata.dir/gui/filesettings.o
[ 52%] Building CXX object CMakeFiles/cantata.dir/gui/interfacesettings.o       

In file included from /usr/include/string.h:25:0,
                 from /usr/include/qt4/QtCore/qbytearray.h:48,
                 from /usr/include/qt4/QtCore/qstring.h:46,
                 from /usr/include/qt4/QtCore/QString:1,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/support/configuration.h:27,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/settings.h:27,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/settings.cpp:24:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE 
are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^
/home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/settin
gs.cpp: In member function ‘void 
Settings::savePodcastAutoDownloadLimit(int)’:
/home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/settin
gs.cpp:1349:13: error: ‘class Configuration’ has no member named 
‘remove’
         cfg.remove("podcastAutoDownload");
             ^
CMakeFiles/cantata.dir/build.make:1268: recipe for target 
'CMakeFiles/cantata.dir/gui/settings.o' failed
make[2]: *** [CMakeFiles/cantata.dir/gui/settings.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /usr/include/string.h:25:0,
                 from /usr/include/qt4/QtCore/qbytearray.h:48,
                 from /usr/include/qt4/QtCore/qvariant.h:46,
                 from /usr/include/qt4/QtCore/QVariant:1,
                 from /usr/include/kconfiggroup.h:32,
                 from /usr/include/kdialog.h:32,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/build/ui_filesettings.h:1,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/filesettings.h:27,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/filesettings.cpp:24:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE 
are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^
In file included from /usr/include/string.h:25:0,
                 from /usr/include/qt4/QtCore/qbytearray.h:48,
                 from /usr/include/qt4/QtCore/qstring.h:46,
                 from /usr/include/qt4/QtCore/qobject.h:48,
                 from /usr/include/qt4/QtCore/qcoreapplication.h:45,
                 from /usr/include/qt4/QtCore/QCoreApplication:1,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/build/config.h:4,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/preferencesdialog.h:27,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/preferencesdialog.cpp:24:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE 
are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^
In file included from /usr/include/string.h:25:0,
                 from /usr/include/qt4/QtCore/qbytearray.h:48,
                 from /usr/include/qt4/QtCore/qvariant.h:46,
                 from /usr/include/qt4/QtCore/QVariant:1,
                 from /usr/include/kconfiggroup.h:32,
                 from /usr/include/kdialog.h:32,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/build/ui_interfacesettings.h:1,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/interfacesettings.h:27,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/interfacesettings.cpp:24:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE 
are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^
In file included from 
/usr/include/c++/4.9.1/x86_64-unknown-linux-gnu/bits/os_defines.h:39:0,
                 from /usr/include/c++/4.9.1/x86_64-unknown-linux-gnu/bits/c++config.h:430,
                 from /usr/include/c++/4.9.1/new:39,
                 from /usr/include/qt4/QtCore/qiterator.h:50,
                 from /usr/include/qt4/QtCore/qmap.h:46,
                 from /usr/include/qt4/QtCore/QMap:1,
                 from /usr/include/kxmlguiclient.h:24,
                 from /usr/include/kxmlguiwindow.h:32,
                 from /usr/include/KDE/KXmlGuiWindow:1,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/mainwindow.h:32,
                 from /home/odin/code/archlinux/aur/vcs/cantata-kde-svn/src/cantata-kde-svn/gui/mainwindow.cpp:27:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE 
are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^
CMakeFiles/Makefile2:63: recipe for target 'CMakeFiles/cantata.dir/all' failed
make[1]: *** [CMakeFiles/cantata.dir/all] Error 2
Makefile:137: recipe for target 'all' failed
make: *** [all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 9:03

GoogleCodeExporter commented 9 years ago
Ah - another KDE build issue. Sorry, currently I build Qt-only. Only when I get 
nearer a release do I check KDE builds! :-( Fixed now, anyway.

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 9:08

GoogleCodeExporter commented 9 years ago
When Cantata cancels a download, it should remove the .partial file. If it 
crashes, then no it would not remove them.

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 9:38

GoogleCodeExporter commented 9 years ago
I tried "Latest episode", "Latest 2 episodes" and "Latest 5 episodes" and 
everything worked as expected.

Yes, manually canceling the download removes the partial.  But if I close 
Cantata the partials are not removed.  For example, if I am unaware that 
Cantata is downloading new episodes and I restart my computer the partials will 
remain on the file system and the new episodes will not finish downloading 
without manual intervention.

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 9:54

GoogleCodeExporter commented 9 years ago
When you say close Cantata - are you not prompted to cancel the downloads?

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 9:56

GoogleCodeExporter commented 9 years ago
Ah, I see!  What I was saying must have been confusing.

When I have the Cantata window visible and select quit it does ask me about 
downloads.

When I right click the tray icon and select quit there is no warning.

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 10:01

GoogleCodeExporter commented 9 years ago
Ah - then that is a bug. There should be a warning, I'll fix this. (Again, I 
dont use the tray)

Also, when starting Cantata will now remove any .partial podcast files - this 
helps in the case where it crashes.

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 10:09

GoogleCodeExporter commented 9 years ago
I've been using the tray this whole time :)

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 10:15

GoogleCodeExporter commented 9 years ago
I've updated the KDE code now - so that the quit from the tray should prompt. 
However, on my current laptop I dont have KDE - so have not actual tested the 
compile!

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 10:26

GoogleCodeExporter commented 9 years ago
The removal of .partial files works when I start Cantata.
The warning now appears when I quit from the tray.

Is coding really that easy or are you just that good at it?

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 10:31

GoogleCodeExporter commented 9 years ago
Really - if you look at Cantata's code, you would see that it's not that great!

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 10:35

GoogleCodeExporter commented 9 years ago
So - is this feature request now complete? The only thing missing is the limit 
to the number of items shown - but I'm not too keen on that.

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 10:36

GoogleCodeExporter commented 9 years ago
Yes, it is complete.  Thank You!

Original comment by stupidgo...@gmail.com on 25 Sep 2014 at 10:42

GoogleCodeExporter commented 9 years ago
Cool :-)

Well, its late here - and I have work in the morning!

Original comment by craig.p....@gmail.com on 25 Sep 2014 at 10:43