Skip to content
  • Gabriel Burt's avatar
    Massive commit that brings Podcasting back to the land of the living. Our · 9a58d67e
    Gabriel Burt authored
    2008-05-17  Gabriel Burt  <gabriel.burt@gmail.com>
    
    	Massive commit that brings Podcasting back to the land of the living.  Our
    	internal classes for doing track filtering and showing the browsers have
    	been made generic, so that Podcasting can use all of them to show its
    	Browser (with a single Podcast filter).  I still do NOT recommend users use
    	this; it needs more work to migrate 0.13.2 podcasting data, and probably
    	has bugs that will eat your children.
    
    	* src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackShuffleActions.cs:
    	* src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs:
    	* src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs:
    	Update to use new BansheeActionGroup ctor and properties.
    
    	* src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs:
    	* src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs:
    	Implement empty FilterModels property.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs:
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService_Interface.cs:
    	Listen to the events offered up in Migo, grab podcast artwork, and move
    	most of the action-related code into PodcastActions.cs.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImageFetchJob.cs:
    	New MetadataServiceJob subclass for fetching podcast artwork.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastCore_Interface.cs:
    	Renamed to PodcastService.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs:
    	Hot new renderer for podcasts, showing artwork, name, and when last
    	updated.  Duplicates a ton of code with ColumnCellAlbum, should be
    	refactored.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPublished.cs:
    	Override for ColumnCellDateTime to just print the short date.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs:
    	New class, a BansheeActionGroup subclass, for registering and handling
    	podcast actions.  Quite a few actions aren't implemented yet (like mark
    	new/old and delete podcast).
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastFeedPropertiesDialog.cs:
    	Get rid of bold titles, make casing consistent, don't put ""s around the
    	description.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs:
    	Casing, grammer, get rid of expander.
    
    	* src/Extensions/Banshee.Podcasting/Makefile.am:
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastItem.cs:
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackInfo.cs:
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastPropertiesDialog.cs:
    	PodcastItem renamed to PodcastTrackInfo, pulls more data from FeedItem and
    	the enclosure/file.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/ColumnCells/PixbufColumnCell.cs:
    	Add new ctor required by new ColumnController business.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/ColumnCells/ItemActivityColumnCell.cs:
    	Add new ctor, get rid of Video and New Item icons; just show download status
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSourceContents.cs:
    	Change to be a ListBrowserSourceContents subclass, which is what
    	CompositeTrackListView inherit from too.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSource.cs:
    	Change to inherit from LibrarySource, add a XML column controller property
    	to add Published and Download Status columns.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Models/PodcastFeedModel.cs:
    	Change to inherit from DatabaseBrowsableListModel, which goes against the
    	db and knows how to filter the track model.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Views/PodcastFeedView.cs:
    	Change to inherit from TrackFilterListView and to use the new Podcast
    	renderer.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Views/PodcastItemView.cs:
    	Fix up columns, names.
    
    	* src/Extensions/Banshee.Podcasting/Resources/ActiveSourceUI.xml: Use the
    	normal TrackContextMenu for podcast items, but add some things to it when
    	podcast source is active.
    
    	* src/Extensions/Banshee.Podcasting/Resources/GlobalUI.xml: Get rid of
    	PodcastItemViewPopup, add several normal Library-source context menu
    	items, remove some items from PodcastFeedPopup that didn't make sense.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.addin.xml: Update
    	copyright info.
    
    	* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.mdp: Lots of new
    	files, ref TagLib, System.Xml, gdk.
    
    	* src/Clients/Nereid/Nereid/PlayerInterface.cs: Fix assumptions regarding
    	composite_view, and get rid of IHasTrackSelection crap.
    
    	* src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs:
    	* src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs:
    	* src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs:
    	* src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs:
    	Rename TrackInfo.ArtistAlbumId to ArtworkId.
    
    	* src/Dap/Banshee.Dap/Banshee.Dap/MediaGroupSource.cs: Fix delete from
    	drive action label, reload after intialized.
    
    	* src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Add the two media sources
    	before loading, avoiding ThreadAssist nastiness.
    
    	* src/nuke-gconf-keys: New scriptlet for clearing your banshee-1 gconf
    	keys, for testing from a clean slate.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs:
    	Add ability to set a default <sort-column>column-id</sort-column>.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs:
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs:
    	Inherit from TrackFilterListView, getting rid of a lot of dupe code.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs:
    	New column cell renderer for file sizes.  Should be changed to always spit
    	out one decimal point and to right align, for scanability.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs:
    	Move RowActivated handler here from Nereid.PlayerInterface, so that any
    	TrackListView instance/subclass will start playing when you double click
    	on a row.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackFilterListView.cs:
    	New class, refactored Album and Artist code here.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs:
    	Don't display anything if duration is zero.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs:
    	Add FileSize column, make duration column a bit smaller by default.
    
    	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDateTime.cs:
    	Add DateTimeFormat to control what format of date/time string is used.
    
    	* src/Core/Banshee.ThickClient/Banshee.ThickClient.mdp: Add new files.
    
    	* src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs: Add
    	ShowContextMenu method, take the interface_action_service in the ctor and
    	expose through Actions property.
    
    	* src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs: Get rid of
    	awful TrackSelector crap.
    
    	* src/Core/Banshee.ThickClient/Makefile.am: Updates.
    
    	* src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ListBrowserSourceContents.cs:
    	Refactored out of CompositeTrackSourceContents, made generic so can be
    	used with any ITrackModelSource with its arbitrary FilterModels.  Means we
    	can have different types of browsers for different sources (Music Library
    	vs Podcasts, for instance) and they share a lot of code, and the top/left
    	preference.
    
    	* src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs:
    	Inherit from ListBrowserSourceContents.
    
    	* src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs: Fix
    	bug where files were used before they were fully downloaded by saving to a
    	temp file and moving once finished writing.
    
    	* src/Core/Banshee.Services/Banshee.Sources/Source.cs:
    	* src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs:
    	* src/Core/Banshee.Services/Banshee.Sources/ITrackModelSource.cs: Get rid
    	of AlbumModel and ArtistModel, replaced by generic FilterModels.
    
    	* src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs:
    	* src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Add the
    	conditions intead of setting them, meaning we can play nicely with
    	other conditions instead of racing.
    
    	* src/Core/Banshee.Services/Banshee.Collection/BrowsableListModel.cs: New
    	abstract subclass of BansheeListModel, that defines the Selection as a
    	SelectAllSelection.
    
    	* src/Core/Banshee.Services/Banshee.Collection/BansheeListModel.cs: Add
    	FocusedItem getter, and make RaiseReloaded public.
    
    	* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs:
    	* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs:
    	Inherit from DatabaseBrowsableListModel
    
    	* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseBrowsableListModel.cs:
    	New abstract class for filter models.
    
    	* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs:
    	Sort of lame, but put the actual Provider.Save/Refresh calls inside
    	virtual methods so that PodcastTrackInfo can use its own provider.
    
    	* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs:
    	Get rid of ReloadTrigger enum, replaced by just passing in the actual
    	IFilterModel that triggered the reload (if any).  Reload algorithm made
    	generic, uses the ITrackModelSource's list of FilterModels, so will work
    	with 0 - N filter models (used by PodcastSource to filter just on Podcast,
    	atm).  Get rid of built-in album/artist assumptions.
    
    	* src/Core/Banshee.Services/Banshee.Services.mdp: New files.
    
    	* src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs:
    	New migration, drop any podcast tables created using the 1.0 series
    	- 0.13.2 data shouldn't be affected - so we can start over.  Add an
    	ExternalId column to CoreTracks.
    
    	* src/Core/Banshee.Services/Banshee.Database/BansheeModelCache.cs: Don't
    	require BansheeModelProvider since SqliteModelProvider suffices fine.
    
    	* src/Core/Banshee.Services/Makefile.am: New files.
    
    	* src/Core/Banshee.Core/Resources/translators.xml: Updated.
    
    	* src/Core/Banshee.Core/Banshee.Base/CoverArtSpec.cs: Make the actual
    	escaping code public (so we can use it to make podcast artwork ids).  Log
    	a message stating where the album art directory is.
    
    	* src/Libraries/Hyena/Hyena.Collections/Selection.cs: Add a FocusedIndex
    	property, factored out of ListView, so that we can get to it so long as we
    	can get to the Selection, instead of having to get to the ListView.
    
    	* src/Libraries/Hyena/Hyena/Log.cs: Add WarningFormat.
    
    	* src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs: Added
    	convenience factory method RelativeToNow.
    
    	* src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs: Determine the
    	best factor after having our value set.
    
    	* src/Libraries/Hyena/Hyena.Data/IFilterable.cs: Rename Filter to
    	UserQuery.
    
    	* src/Libraries/Hyena/Hyena.Data/IListModel.cs: Add non-generic IListModel
    	interface.
    
    	* src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs: Make Save,
    	Load, and Delete methods virtual, change FetchFirstMatching to not
    	duplicate FetchAllMatching code, change both to accept params, fix bug
    	with Refresh, and add protected PrimaryKeyFor method.
    
    	* src/Libraries/Hyena.Gui/Hyena.Data.Gui/IListView.cs: Add non-generic
    	interface.
    
    	* src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs: Add useful
    	debugging logging if a specified property doesn't exist.
    
    	* src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs:
    	* src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs:
    	Change to use Selection.FocusedIndex.
    
    	* src/Libraries/Migo/Migo.mdp:
    	* src/Libraries/Migo/Makefile.am: New files, only build if
    	--enable-podcast set.
    
    	* src/Libraries/Migo/Migo/Migo.Net/AsyncWebClient.cs: Add a public static
    	UsreAgent property so we can set it to Banshee.Web.Browser.UserAgent.  Get
    	rid of many try {} catch {} statements to avoid swallowing exceptions.
    
    	* src/Libraries/Migo/Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs:
    	* src/Libraries/Migo/Migo/Migo.DownloadCore/DownloadManager.cs:
    	* src/Libraries/Migo/Migo/Migo.TaskCore/TaskGroup.cs: Fix formatting,
    	logging.
    
    	* src/Libraries/Migo/Migo/Migo.DownloadCore/HttpFileDownloadTask.cs: Don't
    	set the UserAgent here.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/FeedsManager.cs: Separated most
    	of this code out into FeedManager and EnclosureManager.  This class was
    	trying to be too many things to too many users.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/XmlUtils.cs: Add
    	GetNamespaceManager method, and GetITunesDuration method.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/FeedItem.cs: Default active to
    	true, change provider to be a MigoModelProvider, add static Exists (guid)
    	method, many of fixes.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/FeedEnclosure.cs: Change
    	provider and inherit from MigoItem, fix up SetFileImpl method, database
    	properties, etc.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/Feed.cs: Inherit from MigoItem,
    	uset MigoModelProvider, fix up db properties, add method that starts
    	automatically downloading any new items when appropriate.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/Rfc822DateTime.cs: Fix so
    	parses some dates it wasn't parsing before.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/OpmlParser.cs: New class, not
    	at all finished, for parsing OPML files.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/RssParser.cs: Get the image url
    	from itunes:image first, since it's probably higher quality.  Get the
    	keywords and category properties too.  Get the duration for enclosures, if
    	set.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/MigoModelProvider.cs: A
    	subclass of SqliteModelProvider with an interesting twist: every item that
    	is retrieved is cached in a Dictionary indexed by DbId, which allows us to
    	combine the power of Migo's downloading ability (which wouldn't work if
    	there were multiple instances of a FeedItem, for example, that all
    	represented the same actual item/db row, with the power of
    	SqliteModelProvider for finding items.  So you can do
    	Feed.Provider.FetchAllMatch ("LastDownloadedAt < ?', some datetime) and
    	be returned the already-instantiated objects.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/FeedUpdateTask.cs: Fixed up.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs:
    	Chagned, but I don't think this is used anymore.  Should be culled.
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/FeedManager.cs:
    	* src/Libraries/Migo/Migo/Migo.Syndication/EnclosureManager.cs: New
    	classes taking over for things FeedsManager did before (namely, managing
    	downloads and firing off events).
    
    	* src/Libraries/Migo/Migo/Migo.Syndication/MigoItem.cs: Simple abstract
    	class that implements ICacheableItem and has an abstract DbId property.
    
    	* build/build.environment.mk: Tidy up MIGO deps.
    
    	* tests/Makefile.am: Add Migo/XmlTests.
    
    	* tests/Migo/XmlTests.cs: Add tests for itunes:duration parsing and
    	Rfc822DateTime parsing.
    
    	* tests/BansheeTests.cs: add TransformPair struct.
    
    svn path=/trunk/banshee/; revision=3927
    9a58d67e