View Issue Details

IDProjectCategoryView StatusLast Update
0001856MMW v4Otherpublic2007-06-11 18:33
Reporterrusty Assigned To 
PriorityurgentSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Fixed in Version3.0 
Summary0001856: Podcasting Support
DescriptionHigh Level Requirements of a Podcast Listener:
==============================================
Ability to browse/listen to podcasts
 -via a podcast's url
 -via browsing an OPML feed
Ability to subscribe/unsubscribe to a podcast
Global subscription config:
 -Check for new episodes at specified times
Ability to define subscription rules per subscription and globally:
 -When new episodes are available: download all / download the most recent one
 -Delete podcasts that have been listened to
 -Delete podcasts older than xu
Ability to view status of a podcast (not downloaded/in progress/ready), and trigger an update for a single podcast or all podcasts
Possibility of dynamically updating the opml feeds that are listed
Possibility of manually adding to the opml feeds that are listed
Ability to easily synch podcasts

Suggested Implementation:
=========================
The following suggested implementation borrows heavily from the iTunes7 implementation, but has numerous differences since MM will rely on OPML directories and since MM's tracklist is'nt as freeform as iTunes':

Main Panel:
-----------
The main panel contains a 'Podcasts' node that is the primary interface for configuring podcast subscriptions, in a manner similar to how radio stations will be managed (as described in bug 0002162). It is used for browsing OPML directories, listening to podcasts that haven't been subscribed to, and subscribing to podcasts, etc.

1) 'Podcasts' node (in the tree) should appear in the tree just below Playlists. It contains only a single child in the tree--'Podcast Directory'.
2) If the 'Podcasts' node is selected, the tracklist shows subscribed podcasts .
-Only those episodes that match subscription rules appear as children of a particular podcast node.
-Individual episodes appear in black if they've been downloaded--otherwise they're grey.
-Each subscription has subscription attributes in brackets and can be modified via right clicks.
-The headers in the tracklist are: Artist/Title, Description, Location, Time, Date, Rules(Description=Podcast description or Episode description depending on the element, Location=Podcast location or Episode location depending on the element, Time=Episode Time, Date=Episode date, Rules=Download X, Delete episodes older than x, only if they've been listened to, always retain xxx, OR Default).

-The tracklist nodes appear as follows
-Engadget - The podcast for gadget freaks
    --Episode1-RSS and MP3 players (individual episodes in the tracklist in Grey/Black)
  -CBS News - World news
    --World News
    --Tech News


Context Menus:
Podcast Subscription: New Subscription, [[Edit Subscription]], Unsubscribe, Update Podcast(s),
Podcast Episode: Same as regular tracks but adds, 'Update Podcast(s)'. Same default double-click behaviour as for a normal track.

a) New Subscription -->
-------------------------------------------------------------------------------------------------------
|New Subscription
-------------------------------------------------------------------------------------------------------
|__|Browse Podcasts|______||Manage Subscriptions||________|Options|__
| Enter Podcast or URL:
|-------------------------------------------------------
| Title:
| Description:
|-------------------------------------------------------
|[ ] Customize subscription rules for this podcast
| When new episodes are available: download all / download the most recent one / do nothing
| [x] Delete episodes older than [1 day, 3 days, [1 week], 2 weeks, 1 month]
| [x] Only if they have been listened to
| [x] Always retain the [1, [2], 3, 5, 10] most recent episodes
--------------------------------------------------------------------------------------------------------
| [Global Podcast Options] [[OK]] [Cancel]
--------------------------------------------------------------------------------------------------------


b) Edit Subscription -->
-------------------------------------------------------------------------------------------------------
|Edit Subscription Properties
-------------------------------------------------------------------------------------------------------
|__|Browse Podcasts|______||Manage Subscriptions||________|Options|__
|
| Title:
| Description:
| Enter Podcast or URL:
|-------------------------------------------------------
|[ ] Customize subscription rules for this podcast
| When new episodes are available: download all / download the most recent one / do nothing
| [x] Delete episodes older than [1 day, 3 days, [1 week], 2 weeks, 1 month]
| [x] Only if they have been listened to
| [x] Always retain the [1, [2], 3, 5, 10] most recent episodes
--------------------------------------------------------------------------------------------------------
| [Global Podcast Options] [[OK]] [Cancel]
--------------------------------------------------------------------------------------------------------


c) Unsubscribe (or deletion of a podcast subscription node) -->
Are you sure you want to unsubscribe <podcast title>?
(o) Unsubscribe
( ) Unsubscribe and delete all episodes
[Yes] [No]


d) 'Update podcast(s)' -->
 Triggers update to podcasts that are subscribed but not yet downloaded
 -->When a podcast is updating, there should be visible feedback to that effect (preferably next to the podcast like in iTunes, but most likely in the status bar)

e) -If the user deletes podcast episodes from the tracklist --> those episodes are deleted (though MM might download them again if the subscription rules are that it should be downloaded)

f) Play -->
 -Episode is downloaded if required and then played.

g) -When podcasts are downloaded, MediaMonkey should tag them as follows:
--Title <--> Episode Title
--Artist <--> Podcast Title
--Album <--> Podcast Title
--Year <--> Episode date
--Genre <--> Podcast,xxx (it would be useful if users could assign a second genre for each Subscription)

Open Issues:
-can <Year> hold more detailed date information? If not, how do we store this?


3) If the 'Podcast directory' node is selected, then the user is presented with a list of OPML directories in the tracklist. From this node, the user can browse podcasts containted within different directories, and subscribe to podcasts of interest.
+Podcast Directory A
  -Podcast Directory B
   --Mike and Bob's Fishing Show
   --Jack and Jill's cooking show
     --Episode 1
     --Episode 2


Context Menus:
OPML Directory: Add Directory, Remove Directory
Podcast Subscription: New Subscription, Edit Subscription, Unsubscribe (default behaviour should be 'New Subscription' if not subscribed, and Edit Subscription if Subscribed).
Podcast Episode: Play Now, Play Next, Play Last (default double-click behaviour)

 a) Add Directory -->
|------------------------------------------------------------------------------------------------------
| Add Directory
|------------------------------------------------------------------------------------------------------
| Enter a link to a Podcast Directory, to include in the list: __________________________________________
| [[OK]] [Cancel]
|------------------------------------------------------------------------------------------------------


 b) Remove Directory -->
Directory and podcasts listings contained within are deleted. Note: this does not delete any podcasts.


Open issue:
We'll need to implement filtering functionality in order to allow users to have different views of their collections (e.g. Podcasts, Children's Music, All Music, Comedy, etc.). We also need to figure out how/whether to use these filters in the synchronization and burn dialogs.



Podcast Global Configuration:
------------------------------
Podcast configuration can be via a single node in the Options panel (below or sub to the Library node):

-------------------------------------------------------------------------------------------------------
|Podcast Configuration
-------------------------------------------------------------------------------------------------------
|__|Subscriptions|______||Options||__________
| Check for new episodes: [Every hour/Every day/Every week/Manually]
| + show next/last check as in iTunes
| Download podcasts to: /My Documents/Podcasts/<Artist>-<Date>-<Title> [Browse]
| When new episodes are available: download all / download the most recent one / do nothing
| [x] Delete episodes older than [1 day, 3 days, [1 week], 2 weeks, 1 month]
| [x] Only if they have been listened to
| [x] Always retain the [1, [2], 3, 5, 10] most recent episodes
|
-----------------------------------------------------------------------------------

notes:
-the last 3 options described above are being set globally, but are overriden by per-subscription settings.
-this dialog is also accessible via the podcast properties dialogs



Synchronization Configuration:
------------------------------
The following implementation closely mirrors that of iTunes. It is all contained within a 'Podcasts' tab, but this change requires some adjustment to the synchronization dialog:

||AutoSync List||-|Sync Options|--|Auto-Conversion|--|Device Configuration|-
--||Music||----|Podcasts|----|Options|----
  AutoSync the following: _show checked/show all_^
 ---------------------------------------------------------
 [ ] All
  +Location
  +Artist
  +Album


 ---------------------------------------------------------
 Capacity: xx GB [||||||||||||||||||||| x% free ]
 ---------------------------------------------------------
 [ ] Synchronize Random Subset up to device capacity
     [ ] Synchronize higher rated tracks more often

----------------------------------------------------------
                                            [OK] [Cancel]
--------------------------------------------------------------


||AutoSync List||-|Sync Options|--|Auto-Conversion|--|Device Configuration|-
--|Music|----||Podcasts||----------
  AutoSync [all, (1,2,3,5,10 most recent), [all unplayed], (1, 2, 3, 5, 10 most recent unplayed) episodes of:
 ---------------------------------------------------------
 [ ] All
    [ ] Engadget
    [ ] CBS Daily News
    ...

 ---------------------------------------------------------
 Capacity: xx GB [||||||||||||||||||||| <free GB> ]
 ---------------------------------------------------------

----------------------------------------------------------
                                            [OK] [Cancel]
--------------------------------------------------------------



Notes:
-The 'Sync Options' panel needs to be modified with:
  'Synch Podcasts to:'
  and to make it consistent with the burn dialog: 'Synch Playlist tracks to:'____.
-Podcasts are deleted from the device based on the global autosynch options
TagsNo tags attached.
Fixed in build1013

Relationships

related to 0002703 resolveduser9 MM has a problem with reading file info from some files. 
related to 0002869 closedrusty The '+' sign always appears in the podcast directory hierarchy even when there's no subdirectory 
related to 0005062 closedLudek Podcasts: cannot delete Dead subscriptions 

Activities

jiri

2006-10-17 21:27

administrator   ~0008021

Technically, we'll need some new DB tables:

PodcastDirs (List of Podcast directories user can browse)
 ID
 DirName
 DirURL
 ...... (anything else?)

Podcasts (List of Podcasts user is subscribed to)
 ID
 PodcastName
 PodcastURL
 ..... Description and other fields

PodcastEpisodes (This table links between Podcast and its Episodes stored in Songs table)
 ID
 IDPodcast
 IDTrack
 ..... Possibly some Episode details that aren't in Songs table (if there are any).

Ludek

2006-10-19 09:33

developer   ~0008034

Assigned to me because I'm working on it.

jiri

2006-10-31 17:14

administrator   ~0008118

Note: iTunes supports PDF for Podcasts (you can e.g. download sudoku at http://podcast.timesonline.co.uk/rss/sudoku.rss). We should think about it, nothing special seems to be needed, only open PDF in external browser (as assigned in Shell, usually Acrobar Reader). Just a way to open the file needs to be specced (click somewhere?).

rusty

2006-11-29 04:20

administrator   ~0008206

I played with build 1010 and would offer the following comments (i realize the implementation isn't yet complete, so just consider this as informal feedback).

General UI issues:
1) Podcast directories in the tree is a bit confusing since:
--they're in the tree (and it would be strange to grey out tree elements)
--they appear to be already contained in the MM library
There are a couple of tools we can use to improve this:
a) Have the directory appear in the tracklist (unsubscribed podcasts greyed out). This would require the use of the hierarchy in the tracklist (note: subscribed podcasts could still appear in the tree).
b) Make use of a context-sensitive toolbar for commands such as 'Add podcast'. This context-sensitive toolbar isn't specced yet; all that it would do is cause context-sensitive commands to appear when relevant nodes are selected, in this case causing a new node containing the OPML podcast directories to be displayed OR websites such as podcast.net.
Whatever approach we take should be somewhat consistent with the Net Radio node.

2) The '+' sign always appears in the podcast directory hierarchy even when there's no subdirectory

3) When the user browses the podcast directory, there's very little metadata available, either about the podcast (e.g. description) or about individual episodes (e.g. date). Currently, browsing for a podcast to download is rather painful (there's almost no way to decide whether it's worth subscribing to a podcast or not):
.a)Is it possible to include more or is the information not available?
.b)Is it possible to display it without forcing the user to first subscribe to the podcast to see the description field?

4a) When the user views the episodes in an unsubscribed podcast, they appear in black. They should appear grey (they only become grey once the podcast is subscribed to).
4b) As tracks are downloaded, the status in the tracklist doesn't change from Grey to Black

5) The 'Title' and 'Description' fields for a subscription appear to be editable even though they're not.

6) 'has not known yet' should be changed to 'Not yet available' (although I hope that we can eliminate this situation altogether).

Bugs:
7) MM downloaded a .mov file event though it's not supported. At the end of the download, MM crashes. Try with Geekcast.

Missing functionality;
8) Clicking a feed in Firefox doesn't seem to be able to associate it with MediaMonkey

p.s. I don't think we really need to worry about supporting RSS for other file types.

jiri

2006-12-06 13:12

administrator   ~0008242

Technical notes about synchronization:
 1. MM will notify device plug-in about the fact the synchronized file is also a Podcast episode by adding a special flag to DEVICE_NotifyFile() function. Flag will be declared as

dnfIsPodcast = $16;

in DeviceCommon.pas.

 2. Some changed are needed in d_iPod.dll plug-in, so that iPod properly shows Podcasts on its menus. All details about this should be found at http://ipodlinux.org/ITunesDB
  The modifications should be made in DBiPod.pas, I suppose that some flags should be set in FillFromSD() method, so that iPod knows it's a Podcast. Then also some kind of special playlists should be created in SavePlaylists() method (when called with 'writepodcasts' parameter).

 3. The last step should be showing of Podcasts in MM UI, which should be done in iPod plug-in, DeviceUI.pas unit - similarly to how iPod Playlists are shown there.

rusty

2006-12-11 18:37

administrator   ~0008269

One other usability issue I'm having:
-There's an Aug. 30 episode of the Geekcast that is a video file. Due to another bug it crashes MM so I'm trying to figure out how to get MM to not download it and all prior podcasts, however, I can't figure out how! Everytime I start up MM it tries to download that file!

Is this because MM is configured to automatically download new podcasts and MM considers this to be a 'New' episode even though it's a couple of months old?

Ludek

2006-12-11 18:59

developer   ~0008271

Rusty, I don't know which MM build you use, but I think that you should test it on a newer one, because all except item 1) in your 8206 note has been fixed.

i.e. A video episode files like *.mpg aren't handled by MM now. I have added a filter for this. (only MM known extensions are handled).

I have noticed now, that 'mov' etension has been added to MM known extensions array, so you are probably pointing to a *.mov episode and
Yes, the bug you are speaking about is 0002703.

jiri

2006-12-14 16:55

administrator   ~0008296

Increased priority of this issue, so that as much as possible is implemented/polished for MM 3.0 alpha.

Ludek

2006-12-18 13:48

developer   ~0008314

As I've already written, but for a clarification:

 - All has been implemented and fixed except item 1) in the 8206 note
      (there are some problems to discuss and it is not fully speeced yet)

 - Synchronization of podcasts seems to work fine without any problems.

 - 2703 should be fixed or '*.mov' should be removed from
     the MM known extensions array (KnownExts[]) so that there were not
     the problems with *.mov episodes.

In generally it is ready for an alpha testing.

rusty

2007-06-11 18:33

administrator   ~0009312

Verified 1037. There are numerous open issues, however, we'll track these in separate bugs.