2008-05-22 Aaron Bockover Banshee 1.0 Beta 2 (0.99.2) Released 2008-05-22 Gabriel Burt * src/Libraries/Migo/Migo.Syndication/FeedItem.cs: Fix issue with feed item Guids being empty so we'd have duplicates of items. 2008-05-22 Gabriel Burt * src/Clients/Nereid/Nereid/PlayerInterface.cs: Don't set the PersistentColumnController within the composite_view check, move it to TrackListView so it's more general. * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/PersistentColumnController.cs: Set loaded to false whenever reloading the source's settings. * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs: When setting the model, also set the source on the controller if it's a PersistentColumnController. * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs: Fix bug with column cache not being invalidated, which caused checkboxes to try to show up in the music library after ejecting an audio cd, causing a crash. Also, don't do anything if we're already set to the controller in question. * src/Libraries/Hyena/Hyena.Data/ColumnDescription.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs: Comment out verbose logging. 2008-05-22 Aaron Bockover * configure.ac: Bumped to 1.0 Beta 2 (0.99.2) 2008-05-22 Gabriel Burt * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs: Improve eject-when-done-importing label. * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs: Display nothing for file sizes == 0. * src/Core/Banshee.Core/Resources/contributors.xml: Add and alphabetize names. * src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs: Add ... at end of Write to CD label. * NEWS: Updated for forthcoming 0.99.2 release. 2008-05-22 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs: Added a SelectionChanged event * src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml: Allow the placeholders in the edit menu above the add to playlist entry * src/Core/Banshee.Core/Banshee.Base/Paths.cs: Added FindProgramInPath * src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs: A quick hack to allow launching selected tracks in Brasero as an audio CD project * src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeService.cs: Load Brasero support if it's found on the system 2008-05-22 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs: Offset the cell damage areas by the view adjustment values 2008-05-22 Gabriel Burt There were some pretty big performance issues with podcasting if you had quite a few items in your library. The two issues were not having proper indices (to join CoreTracks.ExternalID = PodcastItems.ItemID for example) and hitting the database to get Migo.Feed/FeedItem/FeedEnclosure objects when we already had them cached in our MigoModelProviders' dictionaries. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs: Schedule a delegate job to reload the feeds on startup. * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Add an index on CoreTracks for the ExternalID column. * src/Core/Banshee.Core/Makefile.am: * src/Core/Banshee.Core/Banshee.Core.mdp: * src/Core/Banshee.Core/Banshee.Kernel/DelegateJob.cs: New class for running parameterless methods/delegates as a Job. * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs: Add a CreateIndex convenience method, and make FetchSingle virtual * src/Libraries/Migo/Migo.Syndication/FeedItem.cs: * src/Libraries/Migo/Migo.Syndication/FeedEnclosure.cs: * src/Libraries/Migo/Migo.Syndication/Feed.cs: Add indices, speeds up podcast queries a whole lot. * src/Libraries/Migo/Migo.Syndication/MigoModelProvider.cs: Override FetchSingle to pull directly from the dictionary and avoid the DB entirely if possible (happens very frequently). * src/Libraries/Migo/Migo.Syndication/FeedManager.cs: Only download 2 feeds at at time, not 4. 2008-05-22 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs: Save and reset the bound object on motion/pointer leave to a hover object variable and draw the checkbox as prelit if that's set 2008-05-22 Gabriel Burt * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSourceContents.cs: * src/Core/Banshee.ThickClient/Banshee.ThickClient.mdp: * src/Core/Banshee.ThickClient/Makefile.am: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/ListBrowserSourceContents.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSourceContents.cs: Rename ListBrowserSourceContents to FilteredListSourceContents. * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs: Right align durations. * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs: Avoid passing null string to gtk. 2008-05-22 James Willcox * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTiles.cs: Set tooltips on the status label since it frequently gets ellipsized 2008-05-21 Scott Peterson * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs: * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedManager.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Feed.cs: Add IsSubscribed to Feed and modified migration code to use true as the default. 2008-05-21 Scott Peterson * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSourceContents.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs: Add null checks to avoid NRE. * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs: * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs: * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs: * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs: Removed rendering canvases. * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs: Removed rendering canvases and fixed some bugaboos with cell event proxying. 2008-05-21 Gabriel Burt * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs: Replace the disc image for 'All Podcasts' with the podcast icon. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs: If the user has some text on the clipboard that starts with http, automatically put that in the url entry. Make the dialog a big wider. 2008-05-21 Gabriel Burt * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs: When migrating old podcast data, call SyncWithFeedItem to get a bunch of good settings (Genre, MediaAttributes, etc). 2008-05-21 Gabriel Burt * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSource.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Models/PodcastFeedModel.cs: * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseBrowsableListModel.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs: Change BrowsableListModels to automatically filter on any 'upstream' filters (ones defined before them), so upshot is albums filters on artists again. 2008-05-21 Gabriel Burt * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs: Migrate podcast feeds and items from 0.13.2 podcast plugin. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSource.cs: Allow sorting on download status and published date, make the default PubDate descending. * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs: Allow defining the sort direction in addition to the default sort column. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: Add an override for GetTrackForUri method. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs: Expose SortQuery via protected property, and make GenerateSortQueryPart virtual. * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Skip items with non-local URIs. * src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs: Add FileSize sorting. * src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs: Add QueryEnumerable methods. * src/Libraries/Migo/Migo/Migo.Syndication/FeedItem.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedEnclosure.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Feed.cs: Create the model within the Init function. 2008-05-21 Scott Peterson * src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs: Fixed rendering problem with sort arrow if the first column was sorted. 2008-05-21 Scott Peterson * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs: Fixed first column being unsortable. 2008-05-21 Aaron Bockover * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdDiscModel.cs: Added an EnabledCount property * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs: Added a check box column to control the RipEnabled property on each CD track; when the EnabledCount on the model is zero, disable the rip action * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdTrackInfo.cs: When RipEnabled is set or unset, increment or decrement the EnabledCount on the model if the value actually changes * src/Core/Banshee.ThickClient/Banshee.Gui/TrackActions.cs: NRE protection * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs: Do not layout text if it's null or empty 2008-05-21 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Data.Gui/IInteractiveCell.cs: Added a PointerLeaveEvent method * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs: Save last cell reference so it can be sent a pointer leave event when the pointer focuses on another cell or leaves the widget entirely; computer proper cell damage rectangles for when Scott fixes area redrawing * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs: * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs: * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs: Implemented PointerLeaveEvent 2008-05-21 Scott Peterson * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Headers.cs: Make sure that a columns max height is not less that its min height. This fixes some aweful bugs. 2008-05-21 Mike Urbanski * src/Libraries/Migo/Makefile.am: * src/Libraries/Migo/Migo.mdp: * src/Libraries/Migo/Migo/Migo.TaskCore/AsyncCommandQueue/CommandQueueManager.cs: Added CommandQueueManager. * src/Libraries/Migo/Migo/Migo.TaskCore/GroupStatusManager.cs: * src/Libraries/Migo/Migo/Migo.TaskCore/GroupProgressManager.cs: * src/Libraries/Migo/Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs: * src/Libraries/Migo/Migo/Migo.TaskCore/Migo.TaskCore.Collections/TaskCollection.cs: * src/Libraries/Migo/Migo/Migo.TaskCore/TaskGroup.cs: * src/Libraries/Migo/Migo/Migo.TaskCore/Task.cs: * src/Libraries/Migo/Migo/Migo.DownloadCore/DownloadManager.cs: * src/Libraries/Migo/Migo/Migo.DownloadCore/DownloadGroupStatusManager.cs: * src/Libraries/Migo/Migo/Migo.DownloadCore/HttpFileDownloadTask.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedsManager.cs: Transparent architectural changes to promote looser coupling between TaskCore components (i.e. removing hacketry.) 2008-05-21 Aaron Bockover * src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs: Return the full HttpWebResponse instead of the response stream * src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs: Updated to reflect API change above * src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs: Updated to reflect API change above and to check the content type on the response to ensure it's text/xml - Rhapsody now redirects to the best-match HTML page if there is no exact match - before they just gave a 404 response 2008-05-21 Gabriel Burt * src/Extensions/Banshee.Lastfm/Makefile.am: Reorder. * src/Extensions/Banshee.Podcasting/Resources/GlobalUI.xml: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs: Add Download All action to podcast context menu. * src/Libraries/Migo/Migo/Migo.Syndication/FeedEnclosure.cs: Avoid queueing the download if we're already download. 2008-05-20 Gabriel Burt With the amazing help of Scott Peterson, we have knocked out two subtle, but annoying Last.fm bugs. * src/Extensions/Banshee.NotificationArea/Resources/NotificationAreaMenu.xml: Add placeholder. * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs: Implement IBasicPlaybackController, so that if we are selected as the new playback source and asked to play First or Next, we will as soon as we've loaded some songs (and we're still the playback source). * src/Extensions/Banshee.Lastfm/Makefile.am: * src/Extensions/Banshee.Lastfm/Resources/LastfmTrackActions.xml: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs: Load some TrackActions when we're the playback source (specifically, put Love/Hate in the notification menu). * src/Core/Banshee.Services/Banshee.Services.mdp: * src/Core/Banshee.Services/Makefile.am: * src/Core/Banshee.Services/Banshee.Collection/IHasTrackSelection.cs: Removed. * src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs: TODO note. 2008-05-20 Gabriel Burt * src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs: Disable writing metadata to file for video files for now, since TagLib# seems to run at 100% and consume lots of memory when we try. 2008-05-20 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs: Tell the renderer what opacities we like * src/Libraries/Hyena.Gui/Hyena.Gui/RatingRenderer.cs: Take the color opacities from the argument stack instead of hard coding * src/Libraries/Hyena.Gui/Hyena.Widgets/RatingEntry.cs: Set desired opacities and added an AlwaysShowEmptyStars property; moved the motion event handler to an internal HandleMotionNotify method * src/Libraries/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs: Proxy the menu's motion notify event to the entry so we get the sweet preview; do not activate the menu when we set the rating so the menu stays visible and we can see the rating actually changed 2008-05-20 Gabriel Burt This commit fixes a major (though one-line) bug with threading that should fix "xcb" related crashes. It improves podcast support, including automatically switching to Now Playing for videos and supporting Media RSS feeds. * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs: Also switch to Now Playing if the trackinfo is updated and it is a video. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastService.cs: Delay refreshing the feeds, and don't try to download artwork if feed not fetched. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastActions.cs: Implement deleting a podcast feed, feed context menu. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSource.cs: Show a message if the user creates a playlist under the Podcast source. Should be allowed, but doesn't work properly yet, so we don't allow it. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackInfo.cs: Set the LicenseUri and MediaAttributes. * src/Extensions/Banshee.Podcasting/Resources/GlobalUI.xml: Add a context menu just for the All Podcasts item. * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellFileSize.cs: Right align and always show one decimal point. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastImageFetchJob.cs: * src/Core/Banshee.Services/Banshee.Metadata/IMetadataLookupJob.cs: * src/Core/Banshee.Services/Banshee.Metadata/MetadataService.cs: * src/Core/Banshee.Services/Banshee.Metadata/MetadataSettings.cs: * src/Core/Banshee.Services/Banshee.Metadata/IMetadataProvider.cs: * src/Core/Banshee.Services/Banshee.Metadata/BaseMetadataProvider.cs: * src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs: * src/Core/Banshee.Services/Makefile.am: * src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzMetadataProvider.cs: * src/Core/Banshee.Services/Banshee.Metadata.MusicBrainz/MusicBrainzQueryJob.cs: * src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyMetadataProvider.cs: * src/Core/Banshee.Services/Banshee.Metadata.Rhapsody/RhapsodyQueryJob.cs: * src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedMetadataProvider.cs: * src/Core/Banshee.Services/Banshee.Metadata.Embedded/EmbeddedQueryJob.cs: * src/Core/Banshee.Services/Banshee.Services.mdp: Get rid of MetadataSettings and use NetworkDetect. Don't lookup if podcast MediaAttribute set. Fix bug with calling GTK+ things from the metadata update thread; probably the cause of the xcb crashes. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: Trim artist and album names when set. * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs: Don't ignore media engine tags if the current track is not a local file. This lets GStreamer tell us the streaming file is a video so Now Playing can switch to itself. * src/Core/Banshee.Core/Banshee.Collection/IBasicTrackInfo.cs: Add ArtworkId and MediaAttributes properties. * src/Core/Banshee.Core/Banshee.Collection/LicenseInfo.cs: New file, not in build. Idea is to parse and represent Creative Commons license info. * src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs: Handle the VideoCodec tag, setting the VideoStream attribute. * src/Libraries/Hyena/Hyena/StringUtil.cs: * src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs: Allow specifying that one decimal point should always been shown. By default, we hide the decimal point and tenths place if the number is within 0.05 of an int. * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs: Make Delete methods virtual, add LIMIT 1 to FetchFirstMatching, and use DeleteCommand property instead of field. * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs: Add a protected Pango.Alignment property. * src/Libraries/Migo/Makefile.am: * src/Libraries/Migo/Migo.mdp: * src/Libraries/Migo/Migo/Migo.Syndication/XmlUtils.cs: Removed, code moved into RssParser. * src/Libraries/Migo/Migo/Migo.Syndication/FeedItem.cs: Add LicenseUri property, and fix loading of the enclosure. * src/Libraries/Migo/Migo/Migo.Syndication/FeedEnclosure.cs: Tweaks. * src/Libraries/Migo/Migo/Migo.Syndication/RssParser.cs: Merge the code from XmlUtils into here, add more namespaces so can pull out Creative Commons LicenseUri and can pull the highest bitrate if there is no tag - eg for The Onion News Network. Should probably allow setting global or per-podcast preference for preferred quality if there are ever options. * src/Libraries/Migo/Migo/Migo.Syndication/MigoModelProvider.cs: Make Delete methods override; as 'new' they weren't working. * src/Libraries/Migo/Migo/Migo.Syndication/Feed.cs: Get rid of TTL and Interval properties, replace with UpdatePeriodMinutes property. Fix Delete method. * configure.ac: Enable the podcast extension by default. 2008-05-19 Aaron Bockover * build/build.rules.mk: Set ENABLE_TESTS as a define variable; this will allow unit tests to be compiled in only if Nunit is available and we are not building a release * Tons of files: Surgery to move unit tests into the proper assemblies instead of one big test assembly hack job thing; some stuff is still broken and incomplete 2008-05-19 Aaron Bockover * tests/Hyena/RangeCollectionTests.cs: Use a SortedInsert method instead of Add*N + Sort for the reference collection so it's a little faster; reduce the iterations to 75k to appease Gabe 2008-05-19 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkRenderer.cs: Added native handle NULL checks when checking for null against a Gdk.Pixbuf; for some reason we sometimes get a managed GdkPixbuf object that wraps a NULL native GdkPixbuf pointer - possibly a bug in Gdk# - though it only seems to happen when image data comes from the Net, so it could just be a case of bad things happening with bad image data 2008-05-18 Gabriel Burt * tests/Makefile.am: Patch from Bertrand Lorentz that forces tests to be run in Italian with timezone = Chicago, apparently fixing failures for him. 2008-05-17 Gabriel Burt 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 column-id. * 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. 2008-05-17 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/TrackEditor.cs: Added Genre list population back to the track editor (BGO #533530) 2008-05-17 Aaron Bockover * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: Bind to a private rating field and call Save in the property setter * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs: Add the rating column with the new hot rating cell 2008-05-17 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Data.Gui/Column.cs: FIxed improper ctor chain; set Min/MaxWidth if a cell is ISizeRequestCell when packing by calling GetSize on the cell * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs: Allow setting BoundObject on a cell, added a BoundObjectParent that can be used to track which data item (instead of which data property on an item) is being bound * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs: Implemented a check box interactive cell renderer that binds to boolean properties * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs: Implemented a rating cell renderer based on the new rating renderer * src/Libraries/Hyena.Gui/Hyena.Data.Gui/IInteractiveCell.cs: Interface for cells that would like to have keyboard/mouse events proxied to them * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs: Interface for cells that actually care about their size and refuse to adapt to what the view can provide * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs: Implemented first pass at cell level interaction - namely through ProxyEventToCell which currently supports transforming and proxying Gdk.EventButton and Gdk.EventMotion events from the view to a cell; also fix a bunch of potential NRE when the model selection is null * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs: * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs: Fix a bunch of potential NRE when the model selection is null * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs: Started a test module for stressing functionality of the ListView * src/Libraries/Hyena.Gui/Hyena.Gui/RatingRenderer.cs: A new renderer to do all drawing/logic for things that want to embed a rating * src/Libraries/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs: Moved to Hyena.Widgets * src/Libraries/Hyena.Gui/Hyena.Widgets/RatingEntry.cs: Moved to Hyena.Widgets and largely rewritten to use the new RatingRenderer * src/Libraries/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs: Moved to Hyena.Widgets and do not call into the EventBox rendering hack since the RatingEntry no longer derives from EventBox * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/TrackEditor.cs: * src/Core/Banshee.ThickClient/Banshee.Query.Gui/RatingQueryValueEntry.cs: * src/Core/Banshee.Widgets/Banshee.Widgets/CustomActionProxy.cs: * src/Core/Banshee.Widgets/Banshee.Widgets/RatingActionProxy.cs: * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs: Updated to reflect the move of Rating stuff to Hyena.Gui 2008-05-17 Aaron Bockover * src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs: Made the indexer code more sexy so it doesn't look like I wrote it at 4:30 in the morning, ensure that negative indexes throw IOORE * tests/Hyena/RangeCollectionTests.cs: Added an indexer stress test and some extra specific tests for ensuring IndexOutOfRange is thrown when it should be 2008-05-17 Aaron Bockover * src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs: Fixed the horribly broken indexer that looked like a late night copy and paste of the IndexOf logic but never worked - we don't use it, so it's never been a problem, but the unit test had always complained - yay tests * tests/Hyena/RangeCollectionTests.cs: Improved test for the indexer 2008-05-17 Aaron Bockover Patch from Bertrand Lorentz (BGO #533099) * src/Libraries/Hyena/Hyena.Collections/RangeCollection.cs: Fix a dyslexia bug in the NET_1_1 version of the array resize code * build/build.rules.mk: Define NET_2_0 on the build so we end up using the better version of RangeCollection - whoops * tests/Hyena/RangeCollectionTests.cs: Added test to check for the NET_1_1 array resize bug fixed above 2008-05-14 Aaron Bockover * src/Core/Banshee.Core/Banshee.Base/FileNamePattern.cs: Added %year% from stable 2008-05-14 Aaron Bockover * src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs: Defined a column controller for video sources * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPlaybackIndicator.cs: Added the proper ctor * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs: Made the default column properties instance properties since they can now be modified and should not be global * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs: If a source has an XML column controller definition but not a column controller object, load the object from the XML and persist/use it * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs: A new column controller that extends the default controller and allows new columns to be fully defined, existing ones to be modified or removed * src/Libraries/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs: Allow SortKey to be set * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs: Use a common cell layout data handler delegate 2008-05-13 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/DefaultColumnController.cs: Implemented a proper default column controller with the columns as static properties so derived implementations don't have to redefine common columns * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs: Use the new DefaultColumnController; check the active source (walking up to the root parent) for a column controller to use instead of the default; if none found, use the default * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmColumnController.cs: Implement a custom column controller for Last.fm derived * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs: Set LastfmColumnController on the source * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs: Make SetModel virtual * data/audio-profiles/wavpack.xml.in: Small fix to the pipeline * src/Core/Banshee.Core/Resources/contributors.xml: Added the Andy 2008-05-12 Gabriel Burt * src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs: Patch from Nicholas Parker working around bug in TagLib# where setting the genre to string [] {null} would crash. * tests/Banshee.Core/TaglibReadWriteTests.cs: Unit test for above fix. 2008-05-09 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs: Set ParentWidget on the renderer to self * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs: Fixed small selection rendering regression and fix the state calculation for when the widget is a combo box and is prelit but not showing the menu 2008-05-09 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceComboBox.cs: Moved from MiniMode; use the new SourceModel and use the SourceRowRenderer * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceModel.cs: Pulled out model specific code from SourceView into a new TreeModel subclass that SourceView and SourceComboBox can use * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs: Implemented proper CellRendererState -> StateType mapping so the renderer works properly inside other widgets (i.e. GtkComboBox); add some default sizing for non TreeView widgets * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView_DragAndDrop.cs: Fixed up to use the new SourceModel * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs: Fixed up to use the new SourceComboBox 2008-05-09 Gabriel Burt This commit greatly improves performance when editing/saving track information and on each track transition by avoiding many unnecessary source reloads. * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs: Improve auto-rip label. * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs: Avoid changing to 'Idle' when transitioning between songs, and avoid jumpiness by not setting the duration until the first Iteration event. Makes things much smoother. * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/TrackEditor.cs: Fix the horrible save performance by avoiding reloading until after having saved all the tracks, instead of after each one. Fix whitespace. * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Change OnTracksChanged to take an array of QueryFields that were modified. Add protected InvalidateCaches method used to clear the managed cache for the track/artist/album model, but not reload it (eg the display data has changed, but sort order/contents have not). * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Change TracksChanged to QueryField array. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs: Remove ClearCache method, and add InvalidateCache method. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: Specify which fields are updated in the IncrementPlay/SkipCount methods to allow sources to optimize whether they need to reload b/c of the change. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs: Add InvalidateCache method, and expose the currently parsed QueryNode, if any. * src/Core/Banshee.Services/Banshee.Collection.Database/IDatabaseTrackModelCache.cs: * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs: Add ClearManagedCache method. * src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs: * src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs: * src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs: In TrackChanged handler, only Reload if we are actually affected by the change - so if the change was play count, and we're not sorted by it, querying on it, or if we're a smart playlist, defined by it, then just InvalidateCaches. * src/Libraries/Hyena/Hyena.Query/QueryOrder.cs: * src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs: Associate a QueryField with QueryOrders. * src/Core/Banshee.Widgets/Banshee.Widgets/StreamPositionLabel.cs: Avoid updating twice as often as needed. Use String.Format instead of +. * src/Libraries/Hyena/Hyena.Query/QueryNode.cs: Add GetTerms and GetFields convenience methods. 2008-05-08 Gabriel Burt * src/Libraries/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs: Increase both accel and decel, and fix bug where things would bounce back and forth, overshooting the target. 2008-05-08 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs: Fix issue with parent source not getting expanded when it should. MTP and iPod sources should autoexpand properly now. 2008-05-08 Gabriel Burt * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Fix bug with updating/removing the album when removing a track. 2008-05-08 Gabriel Burt * src/Libraries/Mtp/Mtp/MtpDevice.cs: Add mimetype for .m4a files. 2008-05-08 Sebastian Dröge * src/Libraries/Hyena.Gui/Makefile.am: Dist and install Hyena.Gui.dll.config. 2008-05-07 Gabriel Burt * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs: Add AutoRip and EjectAfterRipped schemas and preferences. Fix the mnemonic for the profile chooser. * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs: If AutoRip is true, start ripping when the CD is loaded (assuming it's not already in the library). When a CD is done importing, eject if EjectAfterRipped is true. * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs: Add a Finished event. * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs: * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs: * src/Core/Banshee.Services/Banshee.Preferences/Root.cs: Add a optional MnemonicWidget property. If not set, returns the DisplayWidget, otherwise can be used to override the mnemonic widget. * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs: Always SetDescription, so even if a user doesn't yet have a preference, the description shows the currently selected option. * build/m4/banshee/dap-mtp.m4: * build/m4/banshee/dap-ipod.m4: * configure.ac: Make iPod and MTP support the default, such that if you don't have ipod-sharp or libmtp, you will get a configure error unless you pass --disable-ipod/mtp. Should help clarify what we view a default Banshee install to include. 2008-05-06 Aaron Bockover Banshee 1.0 Beta 1 (0.99.1) Released 2008-05-06 Aaron Bockover * configure.ac: * src/Dap/Banshee.Dap.Ipod/Makefile.am: * src/Extensions/Banshee.BooScript/Makefile.am: * src/Extensions/Banshee.MiniMode/Makefile.am: Fixed last build issues 2008-05-06 Gabriel Burt * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: Fix bug with play queue getting recreated each time. Ugh. 2008-05-06 Aaron Bockover * src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastCore.cs: Build fixes 2008-05-06 Gabriel Burt * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs: * src/Extensions/Banshee.NotificationArea/Resources/NotificationAreaMenu.xml: * src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml: Put the Next action above the Previous action. 2008-05-06 Aaron Bockover * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Make the progress notification for iPod syncing much better 2008-05-06 Gabriel Burt * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Parse the .is_audio_player file, except not setting the output formats yet. Install some dap properties. * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Add DapProperties property that the Dap dialog shows. * src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDialog.cs: Show the DapProperties. * src/Backends/Banshee.Hal/Banshee.HalBackend/Device.cs: Cache the uuid. * src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs: Catch property exception for volume that was suddenly removed. 2008-05-06 Gabriel Burt * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Fix a bug where we attempted to transcode video files. We don't support that yet. 2008-05-06 Gabriel Burt * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Fix bug just introduced with mass storage support via .is_a_p files. * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Get rid of silly non-DAP fallbacks for generic name and icons. 2008-05-06 Gabriel Burt * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Ignore iPods unless they have a .is_audio_player file. * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Remove unnecessary override and OnTracksAdded call. 2008-05-06 Aaron Bockover * src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs: Revert CanPlay to not be smart with playback errors; it's probably best if the engine just be allowed to try whenever a track is requested to play * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs: Consolidated Open and OpenPlay logic into a single method to eliminate duplication * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Implemented track remove support 2008-05-06 Gabriel Burt * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Style. * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Fix bug that caused mass storage DAPs to be ignored. 2008-05-06 Gabriel Burt * src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs: Catch exceptions while trying to identify a HAL device as a volume. Should fix BGO #528481. 2008-05-06 Gabriel Burt * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs: * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Make SetStatus and HideStatus methods public. * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Move loading of tracks into LoadFromDevice method. * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Override SetStatus and HideStatus methods to set it on the parent source and all of our children. 2008-05-06 Gabriel Burt * src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs: Don't delay add and delete user jobs, since removable devices are slow and we might as well show the progress bars asap. * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Make sure the device mapping doesn't happen on the main thread. Aaron will love this. MTP's DeviceInitialize method can be very slow (10+ seconds) and we definitely shouldn't block the ui for it. * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Make sure adding files to a primary source happens not on the main thread. Add protected properties for deciding whether to delay the add/delete jobs. 2008-05-06 Gabriel Burt * src/Libraries/Mtp/Mtp/Album.cs: Be more careful with native code. * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Avoid NRE. 2008-05-05 Gabriel Burt * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/AlbumSet.cs: * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpDap.cs: Removed old files. * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Add and remove album art as needed when adding/removing files. * src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs: * src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs: Move DeleteSelectedTracks handler to Abstract class so is inherited by SmartPlaylistSource too. * src/Libraries/Mtp/Mtp/Album.cs: Add public GetById method. * src/Libraries/Mtp/Mtp/MtpDevice.cs: Add FileType to mimetype method. 2008-05-05 Aaron Bockover * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Implement the new iPod syncing model - it's mostly done, but still some glitches that need to be addressed * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs: Implemented full two way copy of database tracks to iPod tracks and back again - track media attributes are preserved in both directions, so this allows for video syncing - yes, I said video syncing. You can now use Banshee to manage videos on your iPod. Epic. Stop using iPods though, they suck. Buy an MTP device, save a seal, vote Obama. * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView_DragAndDrop.cs: Removed the thread stuff which needs to be moved to DapSource (not done, so don't tell Gabe) 2008-05-05 Gabriel Burt * src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs: Move favorites before unwatched. * src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs: Moved Unhear to defaults, and Unrated to predefined. Added Recently Added. * NEWS: Some updates for the upcoming release. 2008-05-05 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPlaybackIndicator.cs: Be more defensive with checking for null/cast errors. 2008-05-05 Gabriel Burt * src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs: Heh, whoops, unwatched should be plays=0 not plays=4. 2008-05-05 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Query.Gui/PlaylistQueryValueEntry.cs: * src/Core/Banshee.ThickClient/Banshee.Query.Gui/SmartPlaylistQueryValueEntry.cs: Better handle there not being any playlists or smart playlists. * src/Core/Banshee.ThickClient/Banshee.SmartPlaylist.Gui/Editor.cs: Fix loading a predefined playlist into the editor. * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: If the user has no smart playlists and we've never done this before, create the default smart playlists for a primary source. * src/Core/Banshee.Services/Banshee.Library/VideoLibrarySource.cs: Define some default smart playlists. * src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs: Tweak a default smart playlist. * src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs: Fix bug with not setting the value of the editor entry to the value of the saved smart playlist. * src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs: When setting the QueryNode condition tree, clear out any old conditions that may be in the editor already. 2008-05-05 Aaron Bockover * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Moved the smart playlist purging to a separate method * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Load the DbId when it is first requested 2008-05-05 Gabriel Burt * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: 2008-05-05 Gabriel Burt * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs: Fix up disposing. * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Get rid of IDisposable in DatabaseSource, reflect changes in subclasses. * src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs: When the SourceManager is being disposed, recursively dispose any extension sources. Also dispose them when their extension goes away. Do not dispose other sources; leave that to whoever created them. * src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs: Remove WriteLines. * src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs: Add public static LogAll property that can be enabled/disabled at run time to turn on logging/timing for every single SQL command. * tests/ConsoleUi.cs: Modified to not use a separate test AppDomain, allowing us to fully load Banshee from within a unit test. * tests/Banshee.ThickClient/GuiTests.cs: Still commented out, some tweaks though. * tests/Makefile.am: Put the assemblies into DIR_BIN, and run from there; simplifies the MONO_PATH and mono.addins business when running tests. * tests/Banshee.Core/TaglibReadWriteTests.cs: Update paths. * tests/BansheeTests.cs: Tweaks to the StartBanshee stuff, not used yet. 2008-05-05 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs: Added a ShowReflection property to enable/disable the reflection 2008-05-05 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs: Minor fixes 2008-05-04 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs: Added a spin entry to change the height for testing; queue a resize when the bar height changes 2008-05-04 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTile.cs: Only update the progress if it hasn't changed and if we're already pulsing and at 0 * src/Core/Banshee.Services/Banshee.Collection/ImportManager.cs: Show the number of files walked while building the total count so it doesn't look like we might have frozen while walking a huge directory tree * src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs: Added some Rgb uint->cairo color utility functions, make ColorShade preserve alpha * src/Libraries/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs: Started working on a hot disk usage bar for DAP; very incomplete - run 'make hg' to see 2008-05-04 Aaron Bockover * src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs: Added error handling so that no more than 20 attempts will be made to play from the active source if those attempts result in an error * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: Bind to the PlaybackError property to the LastStreamError column so any errors (missing codec, resource not found, etc.) are persisted in the database * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Added a migration for adding the new LastStreamError column on CoreTracks * src/Core/Banshee.Services/Banshee.MediaEngine/NullPlayerEngine.cs: Updated to reflect API changes in the base class * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEvent.cs: Added the loading state * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs: Make Play/Pause abstract instead of virtual; do not set any event or state in Open and make the underlying engine responsible for these * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs: Changed the definition of IsPlaying to mean the engine is in one of playing, paused, or loaded states * src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs: made CanPlay return the set value and whether or not there is a playback error set * src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs: Set the engine states based on state transitions from GStreamer proper instead of synthesizing so many based on API * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPlaybackIndicator.cs: Indicate an error if one is set on the track * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs: Updated to act on proper engine state * libbanshee/banshee-player.c: * libbanshee/banshee-player-pipeline.c: * libbanshee/banshee-player-missing-elements.c: Add some playbin checks to prevent warning messages from being spewed when playbin is torn down in some cases, particularly when there is a pipeline error 2008-05-02 Gabriel Burt * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Save the cached count after every reload. 2008-05-02 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs: Set the sensitive property on the cell context * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs: Render insensitive rows by changing the normal text color's alpha * src/Libraries/Hyena.Gui/Hyena.Data.Gui/CellContext.cs: Added a Sensitive property since Gtk.StateType sucks and we care to preserve the selection state for insensitive rows 2008-05-02 Gabriel Burt * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs: Set Love/Hate as Important so text shows up; accidentally removed. * src/Core/Banshee.ThickClient/Banshee.SmartPlaylist.Gui/Editor.cs: Get the list of predefined smart playlists from the PrimarySource. Show the SmartPlaylistDescription to make a prettier, more informative TreeView of predefined options. * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Add Default/NonDefault/PredefinedSmartPlaylist properties. * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Remove unnecessary ConfigurationClient.Initialize (). * src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs: Override the SmartPlaylist properties. * src/Core/Banshee.Services/Makefile.am: * src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistDefinition.cs: New struct that holds the definition of a smart playlist (and a description), and that has a method for producing a SmartPlaylistSource from itself. * src/Core/Banshee.Core/Banshee.Configuration/ConfigurationClient.cs: Do not require Initialization call, instead do it implicitly/lazily. * src/Core/Banshee.Core/Banshee.Base/Paths.cs: Use GetExecutingAsembly intead of GetEntryAssembly in attempt to get Nereid-within-unit-test working. * src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs: Allow programatically setting a command line option's value. * build/build.environment.mk: Add LINK/DEPS vars for Nereid so unit tests can link against it. * tests/Hyena/RangeCollectionTests.cs: * tests/Hyena/DbBoundType.cs: * tests/Hyena/SqliteModelProviderTests.cs: * tests/Hyena/CryptoUtilTests.cs: * tests/Hyena/SqliteCommandTests.cs: * tests/Hyena/StringUtilTests.cs: * tests/Banshee.Services/PlaylistFormatTests.cs: * tests/Banshee.Core/FileNamePatternTests.cs: * tests/Banshee.Core/KernelTests.cs: * tests/Hyena/SelectionTests.cs: Add copyright information. * tests/Hyena/QueryTests.cs: Subclass from BansheeTests, and move the AssertForEach to it. * tests/Hyena/BansheeTests.cs: New abstract class that provides AssertForEach method, and some new methods for progamatically starting Banshee (currently unused, not working). * tests/Banshee.ThickClient/GuiTests.cs: New class for testing starting banshee from unit test. Currently commented out. * tests/Banshee.Services/SmartPlaylistTests.cs: New tests to ensure all predefined smart playlists can be created successfully. Currently commented out. * tests/Makefile.am: Add new test classes. * tests/Banshee.Core/TaglibReadWriteTests.cs: Subclass from BansheeTests and move some static initialization there. 2008-05-02 Gabriel Burt * src/Libraries/Hyena/Hyena.Query/QueryField.cs: Fix bug with queries on fields that have a custom 'column' (eg maybe they search two different columns at once, like MimeTypeField does) not having necessary parenthesis around them. 2008-05-02 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs: Explicitly destroy gradient patterns and tweak the selection gradient a bit 2008-05-02 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs: Use ColumnCellPositiveInt to show the year so 0 will show as empty 2008-05-02 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs: Do all layout rendering directly to Cairo, not through GTK 2008-05-02 Gabriel Burt * tests/Hyena/SqliteCommandTests.cs: Update to not use ApplyValues; fix the build. 2008-05-02 Gabriel Burt * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs: Set SourceManager.Dispose property to true so that the SourceManager knows to Dispose us, even though we're an extension source. * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs: Listen to the PlaybackController.SourceChanged event, and disable shuffle/repeat when switching to a StationSource, and restore when switching away and Disposing (so that the original state is not overwritten in gconf). Fixes BGO #526033. * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: Fix silly bug that caused the playback source to switch to the Music Library erroneously. * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Load the tracks in the LoadFromDevice method, and turn threading off on the importer since LoadFromDevice is already called from a thread. * src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs: Comment out ImportPlaylist stuff that's not done. * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackShuffleActions.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs: Add Sensitive override that triggers the Changed event. * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs: * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/NextButton.cs: Set the sensitivity of the button to the ActionGroup's sensitivity. * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Fix bug where we had a SqliteModelProvider created for every DatabaseSource instead of sharing one. * src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs: Dispose extension sources that have the property SourceManager.Dispose == true. * tests/Hyena/QueryTests.cs: * src/Libraries/Hyena/Hyena.Query/FileSizeQueryValue.cs: * src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs: * src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs: * src/Libraries/Hyena/Hyena/StringUtil.cs: Renamed FormatDouble to DoubleToTenthsPrecision. Also changed it to use Math.Round and fixed bug where 14.96 would show up as 15.0 instead of 15. Also changed it to use the N string formatter, which causes separators to be shown, eg 1,000 * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Remove superflous assignment. * src/Core/Banshee.Services/Banshee.Collection/ImportManager.cs: Add a Threaded bool property, and if false don't use the ThreadPool. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: * src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs: * src/Core/Banshee.Services/Banshee.Configuration/DatabaseConfigurationClient.cs: * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs: Do not explicitly call ApplyValues, but pass the values in the Query or Execute method calls. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs: Comment out use of transactions for now; were causing deadlock; * src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs: Comment out unfinished playlist import code. * tests/Hyena/StringUtilTests.cs: Add tests for DoubleToTenthsPrecision and DoubleToPluralInt methods. * src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs: Make ApplyValues an internal method, accessibly implicitly by passing params to the Query or Execute methods. * src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs: Lock the command before calling ApplyValues. Comment out the transaction methods, since they can cause deadlock. * src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs: Better logging. * src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs: Rename member, add protected Arrow and ToggleButton properties so that their sensitivity can be changed, etc. 2008-05-02 Aaron Bockover * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs: New event system for raising handlers based on a desired event mask; handler masks can be modified, handlers can be removed, and handlers can be prepended or appended to the event handler list * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEvent.cs: New player event definitions and argument classes * src/Core/Banshee.Services/Banshee.MediaEngine/IPlayerEngineService.cs: * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs: * src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs: * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/GtkNotificationAreaBox.cs: * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs: * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/INotificationAreaBox.cs: * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationAreaBox.cs: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/AudioscrobblerService.cs: * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VideoDisplay.cs: * src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks/BookmarksService.cs: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs: * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: * src/Clients/Nereid/Nereid/PlayerInterface.cs: * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs: * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellPlaybackIndicator.cs: * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs: * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs: * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs: * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs: * src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs: Updated to use the new player events API 2008-05-01 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtistListView.cs: * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs: * src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs: * src/Clients/Nereid/Nereid/PlayerInterface.cs: Use NextSource instead of Source. * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue.mdp: Updated. * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: Change to the play queue on the next transition after adding items to it. Fixes BGO #524637. * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs: Clean up method. * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Override ToString = Name * src/Core/Banshee.Services/Banshee.PlaybackController/PlaybackControllerService.cs: Add NextSource property, which you can set to change the source on the next transition. * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs: Add IsPlaying () convenience method. 2008-05-01 Gabriel Burt * src/Libraries/Migo/*: Move some files up into their namespace folder. 2008-05-01 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellDuration.cs: Fancy rounding commented out since it's not consistent with what is done in libbanshee. Fixes BGO #520648. 2008-05-01 Gabriel Burt * build/m4/banshee/dap-mtp.m4: * configure.ac: Enable MTP support by default (if libmtp is available). 2008-05-01 Gabriel Burt * build/build.environment.mk: * configure.ac: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode.addin.xml: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode.mdp: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeService.cs: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeWindow.cs: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceComboBox.cs: * src/Extensions/Banshee.MiniMode/Banshee.MiniMode/SourceModel.cs: * src/Extensions/Banshee.MiniMode/Makefile.am: * src/Extensions/Banshee.MiniMode/Resources/minimode.glade: * src/Extensions/Extensions.mds: * src/Extensions/Makefile.am: Patch from Bertrand Lorentz porting mini mode from stable, fixes BGO #527412. The extension is built by default, but must be enabled in the Preferences dialog. 2008-04-30 Aaron Bockover * build/m4/banshee/boo.m4: Require Boo 0.8.1 * src/Extensions/Banshee.BooScript/Makefile.am: Do not try to build if we don't actually have the Boo requirement met * src/Extensions/Banshee.BooScript/Resources/duration-status-formats.boo: Fixed header 2008-04-30 Aaron Bockover * build/build.environment.mk: * build/m4/banshee/boo.m4: * configure.ac: Build stuff for the BooScript extension * src/Core/Banshee.Core/Banshee.Base/Paths.cs: Added GetTempFileName * src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs: Use the new Paths.GetTempFileName * src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs: Created a new collection that holds formatter handlers and add our default formatters; this allows scripts and extensions can add their own * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Move the default duration formatters into DurationStatusFormatters and create a static instance of that collection to use for sources * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs: * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Small progress on syncing, not much * src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs: Require arguments taking value to have the --arg=value form on the command line and treat all non -- starting arguments as 'files' * src/Extensions/Banshee.BooScript/Banshee.BooScript.addin.xml: * src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs: Ported the Boo scripting support from old Banshee * src/Extensions/Banshee.BooScript/Resources/duration-status-formats.boo: * src/Extensions/Banshee.BooScript/Resources/filename-transform.boo: The first two Boo scripts that work on the new Banshee 2008-04-30 Gabriel Burt * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Reload the music and video child sources after creating them, since Reloads don't happen automatically any more. 2008-04-30 Gabriel Burt * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Don't begin/commit a transaction or run InnerMigrate if the version is current. Use Hyena.Log instead of WriteLines. * src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs: Got rid of unnecessary if. * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Add better logging for when a required service fails to start. * src/Core/Banshee.Services/Banshee.SmartPlaylist/Migrator.cs: * src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs: Dispose all non-extension sources and their children, but don't dispose extension sources. * src/Extensions/Banshee.PlayQueue/Makefile.am: * src/Extensions/Banshee.PlayQueue/Resources/Banshee.PlayQueue.addin.xml: Move addin.xml file up from Resources * src/Libraries/Hyena/Hyena/Log.cs: Make showUser default to false everywhere. * src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs: * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: * src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ArtworkManager.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs: * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs: Explicitly set showUser = true. 2008-04-30 Gabriel Burt * src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs: Add a ClientStarted event, which is raised for clients that are already started and for new ones. * src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs: Add a IsStarted property, and change the Started event to use a Action<> handler. * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Use new Application.ClientStarted event, and handle in method, not anonymous delegate. 2008-04-29 Gabriel Burt * src/Backends/Banshee.Unix/Banshee.IO.Unix/Directory.cs: Comment style. * src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs: * src/Clients/Nereid/Nereid/Client.cs: Use Log.InformationFormat instead of Log.Information (String.Format * src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs: Add a log statement. * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Get rid of unnecessary thread, and move reload all from anonymous delegate to private method. * src/Core/Banshee.Services/Banshee.Sources/Source.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs: * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Make OnUserNotifyUpdated protected and add public NotifyUser method. 2008-04-29 Gabriel Burt Prior to this commit, all sources (playlists, etc) were reloaded on startup, meaning startup got slower and slower the more playlists you had. This is no longer the case, playlists are reloaded the first time you activate (select) them. * src/Clients/Nereid/Nereid/Client.cs: Add information line at start of Main, useful to get more accurate startup timing. * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Add columns for SavedCount to CorePrimarySources etc. Trigger all the sources to reload when the client is started up, just one more time, to bootstrap the SavedCount. * src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs: Log when the client has fully started up. * src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs: Save is now an override, and got rid of NotifyUpdated since not needed now that Source.OnUserNotifyUpdated is public. * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: * src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs: * src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs: Load and save SavedCount. * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Add a SavedCount protected property, used to be able to show a count in the source list on startup without having to query every soure. Implement IDisposable, and Save the source when disposed. Also, implement default Activate method that checks if the source has been reloaded this session, and reloads it if not. * src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs: Make sure all sources are Disposed (if : IDisposable) when removed, including child sources. * src/Core/Banshee.Services/Banshee.Sources/Source.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs: Make OnUserNotifyUpdated method public, and use it in SourceActions. * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Call OnUserNotifyUpdated on new DapSources so they pulse in the source list. * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: Chain Dispose calls. 2008-04-29 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs: Do not chain SizeAllocated if the allocation doesn't actuall change - not sure why GtkImage raises this when the image changes even if the dimensions are the same. Lame. 2008-04-29 Gabriel Burt * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Get media capabilities from the volume's parent (the block device). 2008-04-29 Gabriel Burt * src/Core/Banshee.Services/Banshee.ServiceStack/Application.cs: Add ClientAdded event. * src/Core/Banshee.Services/Makefile.am: * src/Core/Banshee.Services/Banshee.ServiceStack/IDelayedInitializeService.cs: New interface for services that shouldn't be started until there is at least one Client that has started. In practice, means DapService doesn't scan and load DAPs until after the GTK client is fully loaded. * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: When at least one client is started, call DelayedInitialize on IDelayedInitializeServices. * src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs: * src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs: Add Started event and call it when appropriate. * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Implement IDelayedInitializeService. * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedMessageBar.cs: Remove bandaid fix for AnimatedImage since abock has committed the real fix. * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Remove self from SourceManager within Dispose, so MTP source actually disappears when ejected. 2008-04-29 Aaron Bockover * src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs: When hidden, preserve the active state and pause the stage to prevent iterations and restore the active state/resume the stage (if active); the more correct fix for the cause of BGO #523646. * src/Libraries/Hyena.Gui/Hyena.Widgets/MessageBar.cs: Explicitly show/hide the animated image when the bar show/hides 2008-04-29 Gabriel Burt * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Be more careful with unregistering handlers to status message events. * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedMessageBar.cs: Fix memory leak/cpu usage seen after selecting a Last.fm source, caused by AnimatedImage's stage continuing to play after the status message should have been hidden/removed. Its still strange that while the AnimatedImage is shown/animating it triggers so many ExposeEvents on the ListView, but at least they stop once the status message goes away. Fixes BGO #523646. * src/Libraries/Lastfm/Lastfm/AudioscrobblerConnection.cs: Explicitly mark private members as private. 2008-04-29 Gabriel Burt * tests/Hyena/DbBoundType.cs: Fix build. 2008-04-28 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Gui/InterfaceActionService.cs: Add RemoveActionGroup convenience override. * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs: Make sure to dispose actions when the extension is disposed, fixing crasher when you tried to disable/reenable the extension. 2008-04-28 Gabriel Burt * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs: * src/Extensions/Banshee.Lastfm/Resources/lastfm.glade: Remove name entry from Last.fm dialog. 2008-04-28 Gabriel Burt * src/Core/Banshee.Services/Banshee.Query/BansheeQuery.cs: * src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs: * src/Libraries/Hyena/Hyena.Query/QueryOrder.cs: Implement smart playlists limited by file size and duration. Fixes BGO #522889. 2008-04-28 Gabriel Burt * src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs: Fix bug with incrementing skip count instead of play count when a song ended and the next one began (behavior was correct if the song hadn't ended and the user manually pressed next.) Fixes BGO #527879. 2008-04-28 Gabriel Burt WARNING: This commit is a first pass at reworking some of the Podcast/Migo internals to use Hyena and be more consistent with Banshee's style. It severely breaks the podcast extension for the time being, so unless you are working with Mike and me to fix it, you should not build or run it. * build/build.environment.mk: Link Migo against Hyena. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumInfo.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistInfo.cs: * src/Core/Banshee.Services/Banshee.Database/BansheeDbFormatMigrator.cs: Update to new Load method (w/o superflous int arg). * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs: Fix DatabaseColumn attributes to be on properties, not private members. * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs: Use new IDatabaseTrackModel[Provider|Cache] interfaces to allow this class to handle DatabaseTrackInfo subclasses (eg to handle PodcastInfo objects). * src/Core/Banshee.Services/Banshee.Playlist/AbstractPlaylistSource.cs: Override AfterInitialized method, moving quite a bit of track model property setting there. * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: * src/Core/Banshee.Services/Banshee.Playlist/PlaylistSource.cs: * src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs: Change static LoadAll method to take a primary source id, so that as primary sources are loaded, they fetch/load only their playlists. * src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs: Add virtual HasArtistAlbum property so sources can avoid instantiating the Artist/Album models at all if they don't use them. * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Check the artist/album models aren't null before using them. * src/Core/Banshee.Services/Makefile.am: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackModelCache.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackModelProvider.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/IDatabaseTrackModelCache.cs: * src/Core/Banshee.Services/Banshee.Collection.Database/IDatabaseTrackModelProvider.cs: New interfaces/classes to enable DatabaseTrackInfo subclasses to be used/loaded by DatabaseTrackListModel and therefore any DatabaseSource subclass. * src/Extensions/Banshee.PlayQueue/Banshee.PlayQueue/PlayQueueSource.cs: Override HasArtistAlbum to false. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastItem.cs: Migo's FeedItem class is backed by a database table (PodcastItems), so the idea is intead of having another table for Banshee specific podcast item information, push as much as possible into Migo, and have PodcastItem actually subclass from DatabaseTrackInfo, and pull in information from the Migo tables as necessary (using VirtualDatabaseColumn attributes). * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastFeed.cs: Deleted, since we just use the Migo table/Feed class now. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastFeedPropertiesDialog.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastPropertiesDialog.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/PodcastSubscribeDialog.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Dialog/SyncPreferenceComboBox.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/ColumnCells/FeedActivityColumnCell.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Models/PodcastFeedModel.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSourceContents.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Views/PodcastFeedView.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Views/PodcastItemView.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastCore.cs: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting/PodcastCore_Interface.cs: Many HACKING fixes, quite a lot of work to do still. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/Models/PodcastItemModel.cs: Remove the custom model since we use a DatabaseTrackListModel now. * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/PodcastManager/Source/PodcastSource.cs: Change to subclass from PrimarySource. * src/Libraries/Hyena/Hyena.Data.Sqlite/DatabaseColumn.cs: Fix bug in exception logging. * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs: Use Action instead of custom delegate type for AggregatesUpdated event. * src/Core/Banshee.Services/Banshee.Database/BansheeModelProvider.cs: * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelProvider.cs: Make not abstract, taking default properties and empty virtual methods from BansheeModelProvider. Remove unused int arg in Load method. Add FetchAllMatching, FetchFirstMatching, FetchSingle (id), and Delete methods. * src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs: * src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteUtils.cs: Handle bools. * src/Libraries/Migo/Makefile.am: * src/Libraries/Migo/Migo.mdp: Several files removed, a few added. * src/Libraries/Migo/Migo/Migo.Syndication/EventArgs/FeedDownloadCompletedEventArgs.cs: * src/Libraries/Migo/Migo/Migo.Syndication/EventArgs/FeedDownloadCountChangedEventArgs.cs: * src/Libraries/Migo/Migo/Migo.Syndication/EventArgs/FeedEventArgs.cs: * src/Libraries/Migo/Migo/Migo.Syndication/EventArgs/FeedItemCountChangedEventArgs.cs: * src/Libraries/Migo/Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs: Renamed to follow HACKING. * src/Libraries/Migo/Migo/Migo.Syndication/Feed.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedEnclosure.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedItem.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedUpdateTask.cs: * src/Libraries/Migo/Migo/Migo.Syndication/FeedsManager.cs: Many updates, including HACKING fixes, trying to get rid of unnecessary dictionaries etc. There are some commented out pieces of code in this commit that have broken podcasts temporarily until they are 'ported'. For the database-backed classes (Feed, FeedItem, and FeedEnclosure) use Hyena.Data.Sqlite [DatabaseColumn] attributes to flag db-backed properties. * src/Libraries/Migo/Migo/Migo.Syndication/IFeed.cs: * src/Libraries/Migo/Migo/Migo.Syndication/IFeedEnclosure.cs: * src/Libraries/Migo/Migo/Migo.Syndication/IFeedItem.cs: * src/Libraries/Migo/Migo/Migo.Syndication/IFeedsManager.cs: Deleted. * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/EnclosuresTableManager.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/FeedsTableManager.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/ItemsTableManager.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/DataUtility.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/DatabaseManager.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/DbDefines.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/QueuedDbCommand.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/SQLiteUtility.cs: Deleted; Migo uses Hyena.Data.Sqlite now for db related functionality. * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/DataWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/FeedDataWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/FeedEnclosureDataWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/FeedItemDataWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/IFeedEnclosureWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/IFeedItemWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/IFeedWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Rss/RssFeedEnclosureWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Rss/RssFeedItemWrapper.cs: * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Rss/RssFeedWrapper.cs: Deleted; Wrapper concept had a lot of redundancy in property definitions etc. The Db wrappers are unnecessary since Hyena.Data.Sqlite uses reflection to instantiate objects/set properties. * src/Libraries/Migo/Migo/Migo.Syndication/Migo.Syndication.Data/RssParser.cs: New class largley taken from the Rss*Wrapper classes. * tests/Hyena/SqliteCommandTests.cs: Test SQLification of bools. 2008-04-28 Aaron Bockover * src/Core/Banshee.Services/Banshee.SmartPlaylist/SmartPlaylistSource.cs: Make ConditionSql virtual and add a protected setter; make CanUnmap virtual * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Add Music and Video group sources; delete all smart playlists and entires associated with the primary source when starting and disposing * src/Dap/Banshee.Dap/Banshee.Dap/MediaGroupSource.cs: Base source for media groups, extends SmartPlaylistSource * src/Dap/Banshee.Dap/Banshee.Dap/MusicGroupSource.cs: * src/Dap/Banshee.Dap/Banshee.Dap/VideoGroupSource.cs: A source to show all music on the device and one for all video * src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs: Do not implement IDiskUsageReporter - MediaGroupSource does this now * src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs: Attribute for flagging UI test modules * src/Libraries/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs: Show a list of UI test modules and run them when activated * src/Libraries/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs: A UI test module for playing with the query parser 2008-04-26 Aaron Bockover * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Do not try to read the name from the iTunesDB until after we have finished loading that database 2008-04-26 Aaron Bockover * src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs: Support runtime loading/unloading of hardware provider extensions * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs: * src/Core/Banshee.Services/Banshee.Hardware/ICustomDeviceProvider.cs: Implement IDisposable * src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs: Support runtime loading/unloading of extension sources * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod.addin.xml: Order the hardware provider for podsleuth first in the extension list just in case 2008-04-25 Aaron Bockover * src/Core/Banshee.Services/Banshee.ServiceStack/IExtensionService.cs: * src/Backends/Banshee.GStreamer/Banshee.GStreamer/Service.cs: Require all extension services to implement IDisposable * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Listen to the addin manager for when service extensions are enabled or disabled and enable/disable accordingly; this allows all service extensions to now be enabled or disabled at runtime * src/Core/Banshee.ThickClient/Banshee.Gui/BansheeActionGroup.cs: Added an override for removing an action by name * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs: Moved the UI actions from the source to the service since all of the UI here is global; fixes issue where there were UI conflicts with multiple CDs and also helps with the runtime enable/disable of the service * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs: Reflect said changes above * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/NotificationAreaService.cs: * src/Extensions/Banshee.NotificationArea/Banshee.NotificationArea/X11NotificationAreaBox.cs: Many fixes for runtime enable/disable 2008-04-25 Aaron Bockover This commit hopefully addresses remaining hardware and threading issues with DAP support and fixes the Mono.Addins dependency issue that people have been complaining about for the last couple of days * src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs: Cache the uuid of the volume once it's been resolved so the device doesn't have to be queried for it again, which is problematic if the device is removed forcefully * src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs: Listen directly on the inner manager for device added/removed and raise those events from within the service scope, performing the cast to custom device in the device added event * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Defer the loading of the database to the LoadFromDevice threaded call so startup is faster; implement eject * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs: Allow the provider to adapt the PodSleuthDevice to either the top level iPod storage device or the actual iPod data volume so iPod support works when an iPod is plugged in while Banshee was already running * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Reworked the DapSource instantiation to deal with older Mono.Addins; fully dispose and unmap any devices bound to a DAP provider extension if that extension is removed at runtime; fully tear down the top level DAP service if it is disposed, so DAP support can be fully disabled at runtime as well * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Replaced the IDevice ctor with a virtual DeviceInitialized method to cope with older Mono.Addins - this should fix the problem people have been complaining about for 2 days; store the addin ID on the source as well for unmapping in the service * src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs: Removed bad threading decisions, race issues, and excessive dispose calls; it is up to the device implementation to call dispose as needed inside eject * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Updated to reflect minor DapSource API changes due to Mono.Addins * src/Libraries/Hyena/Hyena/Log.cs: Walk the exception chain to generate a full stack trace printout 2008-04-24 Aaron Bockover * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Added a PurgeTracks method that will nuke all entries in CoreTracks with a matching primary source ID * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Read the track database from the iPod * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs: Map the iPod tracks to Banshee database tracks * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Call LoadDeviceContents after creating a DapSource * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Added LoadDeviceContents and a virtual LoadFromDevice method; LoadFromDevice should be implemented by DapSources and will run async - currently only used by IpodSource 2008-04-24 Aaron Bockover * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Some more cleanup, organizing, and implemeneted icon name support * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Whitespace 2008-04-24 Aaron Bockover * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Updated to the new DapSource API * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: Uses the new enforced IDevice ctor that DapSources must have to create the device, if InvalidDeviceException is thrown, the source is discarded * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Lots of refactoring and cleaning; get rid of Resovle and Initialize (IDevice) and rolled all that into the ctor; better error messages, more result checking, easier to read code * src/Dap/Banshee.Dap/Banshee.Dap/InvalidDeviceException.cs: New exception that DapSource implementors must throw in the ctor if they can't support the device being passed to them * src/Libraries/Hyena/Hyena/Log.cs: Log exceptions through Log.Warning and added an override to provide a message with the exception 2008-04-24 Gabriel Burt * src/Dap/Banshee.Dap.Ipod/Makefile.am: Disable ipod build unless ENABLE_IPOD set. 2008-04-24 Gabriel Burt * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs: Fix bug with seek and jump-to-playing not being sensitive when they should be. Fixes BGO #528198. 2008-04-24 Aaron Bockover * build/build.environment.mk: * build/build.rules.mk: * build/m4/banshee/dap-ipod.m4: * configure.ac: Build foo for iPod support * src/Backends/Banshee.Hal/Banshee.HalBackend/BlockDevice.cs: Do not check if info.category is storage since the capability query for block will validate the device, and info.category may not be storage for all storage devices (it could be portable_audio_player) * src/Core/Banshee.Services/Banshee.Hardware/IDevice.cs: * src/Backends/Banshee.Hal/Banshee.HalBackend/Device.cs: Added HAL method wrappers for properties that should only be used with extreme care; probably need to enforce how these are used. They're really just for proxying custom properties from custom IDevices; I'm not totally happy with this * src/Dap/Banshee.Dap/Banshee.Dap/DapService.cs: * src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs: * src/Backends/Banshee.Hal/Banshee.HalBackend/HardwareManager.cs: Some cleanups, notes * src/Core/Banshee.Services/Banshee.Services.addin.xml: * src/Core/Banshee.Services/Banshee.Hardware/HardwareManager.cs: Implemented the ICustomDeviceProvider extension, pass all IDevice queries through the custom device providers to allow them to transform/replace a device with some custom device * src/Core/Banshee.Services/Banshee.Hardware/ICustomDeviceProvider.cs: The new interface for custom device providers * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod.addin.xml: iPod extension def * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: The beginning of the iPod DAP support; doesn't do anything yet * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDevice.cs: A device that translates PodSleuth properties to the iPod device from ipod-sharp * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs: Custom device provider for taking an iPod storage device and transforming its iPod volume into a PodSleuthDevice 2008-04-23 Gabriel Burt * src/Libraries/Lastfm.Gui/Lastfm.Gui/AccountLoginDialog.cs: Fix bug with not saving the account info when the user clicked (vs pressing space or enter) the save button. 2008-04-23 Scott Peterson * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/UserJobTileHost.cs: Use new StartPadding. * src/Libraries/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs: Added StartPadding and EndPadding properties. 2008-04-23 Gabriel Burt * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Be more careful when Disposing. 2008-04-23 Gabriel Burt * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Handle the situation of the user not having any encoders and trying to transfer an unsupported file type. 2008-04-23 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinDetailsDialog.cs: * src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinTile.cs: * src/Core/Banshee.ThickClient/Banshee.Addins.Gui/AddinView.cs: Moved these widgets into their own proper namespace * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs: Changed to reflect said move 2008-04-23 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/BansheeDialog.cs: Allow setting the parent/transient for window * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/AddinDetailsDialog.cs: Added a simple details dialog for an addin * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/AddinView.cs: * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/AddinTile.cs: Better tile UI and added enable/disable and details buttons to the tile; actually enable/disable addins when the button is pressed - BE WARNED this has not been tested too much yet * src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs: Added a Wrap property that will allow text to be ellipsized to one line if unset * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs: * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs: * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs: Updated to use the new WrapLabel * src/Libraries/Hyena.Gui/Hyena.Widgets/TextViewLabel.cs: Removed now that we have a proper WrapLabel * src/Backends/Banshee.GStreamer/Banshee.GStreamer.addin.xml: * src/Backends/Banshee.Gnome/Banshee.Gnome.addin.xml: * src/Backends/Banshee.Hal/Banshee.Hal.addin.xml: * src/Backends/Banshee.Unix/Banshee.Unix.addin.xml: * src/Core/Banshee.Core/Banshee.Core.addin.xml: * src/Core/Banshee.Services/Banshee.Services.addin.xml: * src/Core/Banshee.ThickClient/Banshee.ThickClient.addin.xml: * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.addin.xml: * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp.addin.xml: * src/Dap/Banshee.Dap/Banshee.Dap.addin.xml: * src/Extensions/Banshee.AudioCd/Banshee.AudioCd.addin.xml: * src/Extensions/Banshee.Bookmarks/Banshee.Bookmarks.addin.xml: * src/Extensions/Banshee.Lastfm/Banshee.Lastfm.addin.xml: * src/Extensions/Banshee.MultimediaKeys/Resources/Banshee.MultimediaKeys.addin.xml: * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml: * src/Extensions/Banshee.PlayQueue/Resources/Banshee.PlayQueue.addin.xml: * src/Extensions/Banshee.Podcasting/Banshee.Podcasting.addin.xml: Updated addin metadata 2008-04-23 Gabriel Burt * src/Libraries/Migo/*: Rename a few more enums. 2008-04-23 Gabriel Burt * src/Extensions/Banshee.Podcasting/*: * src/Libraries/Migo/*: Rename FEEDS_DOWNLOAD_STATUS enum to FeedDownloadStatus. (Props to MD for making this dead easy). 2008-04-23 Gabriel Burt * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Fix typo in delete tracks user job message. * src/Extensions/Banshee.Podcasting/*: * src/Libraries/Migo/*: Fix assembly references in .mdp, and rename one enum and its values to FDG standards. 2008-04-23 Aaron Bockover This commit adds the initial work for the extension manager to allow you to enable and disable extensions; it does not yet work and there are still many interaction and rendering issues; no complaining * src/Core/Banshee.Services/Banshee.Preferences/Page.cs: Add the new extensions page to the preference set * src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs: * src/Core/Banshee.Services/Banshee.Preferences/Root.cs: Moved DisplayWidget to Root * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs: Adapt the new AddinView for our extensions to the extensions page * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs: Support pages with their own DisplayWidgets * src/Libraries/Hyena.Gui/Hyena.Widgets/WrapLabel.cs: Added a new label that doesn't suck for proper wrapping; this label uses a width allocation from its parent to compute the layout and forces a height request to fit the wrapped layout; it is awesome; someone tell me if the standard GtkLabel can do this - I have in many years never been able to do this * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/AddinTile.cs: Hot new tile widget that displays information about an addin/extension and will allow you to enable/disable it; not completely done * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/AddinView.cs: A view that lays out the AddinTiles 2008-04-22 Gabriel Burt This commit adds transcoding support to DAPs. Transcoded files are stored in ~/.config/banshee-1/transcoder/, and that folder is deleted every Banshee session. One improvement over stable's transcoding is file transfers can happen at the same time as transcoding. * src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs: Make IsReadOnly public. * src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs: Enable property dialogs for DapSources. Also, override AddTrack methods to first transcode if necessary. * src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs: Reflect updates in two parent classes. * src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs: Lock use of the mtp device so only one operation happens at a time. Make adding track work with new transcoding support. Add fine-grained progress when adding tracks. * src/Dap/Banshee.Dap/Makefile.am: * src/Dap/Banshee.Dap/Banshee.Dap.Gui: * src/Dap/Banshee.Dap/Banshee.Dap.Gui/DapPropertiesDialog.cs: Ported from stable. Advanced properties and owner entry commented out. * src/Core/Banshee.ThickClient/Banshee.Gui/SourceActions.cs: If the Source has a property named 'SourceProperties.GuiHandler' that is a OpenPropertiesDelegate, invoke it OnSourcePropertiesAction. * src/Core/Banshee.ThickClient/ThemeIcons/22x22/actions: * src/Core/Banshee.ThickClient/ThemeIcons/22x22/actions/encode.png: Copy icon from stable. * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs: * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs: * src/Core/Banshee.Services/Banshee.MediaProfiles/MediaProfileManager.cs: * src/Core/Banshee.Services/Banshee.MediaProfiles/PipelineVariable.cs: * src/Core/Banshee.Services/Banshee.MediaProfiles/Profile.cs: * src/Core/Banshee.Services/Banshee.MediaProfiles/Pipeline.cs: * src/Core/Banshee.Services/Banshee.MediaProfiles/ProfileConfiguration.cs: Renamed *ID properties to *Id. Also, use the ProfileConfiguration in several places we used to return just the Profile, since multiple ProfileConfigurations can share a Profile, we need to make sure this configurations variables are loaded when we use it. * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Define OpenPropertiesDelegate. * src/Core/Banshee.Services/Banshee.Sources/PrimarySource.cs: Handle AddTracks not being synchronous (since there may be transcoding). * src/Core/Banshee.Services/Banshee.ServiceStack/BatchUserJob.cs: Add DetailedProgress that is the percent complete of the current sub-job. * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Load the TranscoderService. * src/Core/Banshee.Services/Banshee.Services.addin.xml: Define /Banshee/MediaEngine/Transcoder extension node. * src/Core/Banshee.Services/Makefile.am: * src/Core/Banshee.Services/Banshee.Services.mdp: * src/Core/Banshee.Services/Banshee.MediaEngine/ITranscoder.cs: * src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs: New files that give us transcoding. Largely ported code from stable. * src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GConfConfigurationClient.cs: Remove / characters from key names. * src/Backends/Banshee.GStreamer/Makefile.am: * src/Backends/Banshee.GStreamer/Banshee.GStreamer.addin.xml: * src/Backends/Banshee.GStreamer/Banshee.GStreamer/Transcoder.cs: Add GStreamer implementation of MediaEngine.ITranscoder, mostly ported from stable. * src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs: Tweak way Profiles are loaded to ensure they're configured. * src/Libraries/Mtp/Mtp/Track.cs: Remove WriteLine. * libbanshee/banshee-transcoder.c: Fix broken progress updates, and Gtk criticals. * build/build.environment.mk: Require Banshee.ThickClient in Banshee.Dap now b/c of properties dialog. * data/audio-profiles/*.xml.in: Add taglib/* mimetypes. * data/banshee-1.desktop.in.in: * data/mimetypes.txt: Update list of mimetypes with some ones from TagLib# we didn't have. 2008-04-22 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/PreferencesDialog.cs: * src/Core/Banshee.ThickClient/Resources/banshee-dialogs.glade: Nuke the old crappy hardcoded preferences dialog 2008-04-22 Aaron Bockover * src/Core/Banshee.Services/Banshee.Preferences/Page.cs: Cleaned up the default preferences * src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs: Added an InstallWidgetAdapters event and a RequestWidgetAdapters method * src/Core/Banshee.Services/Banshee.Preferences/VoidPreference.cs: A wrapper to use for fake preferences that will basically be containers for advanced widgets bound to other preferences * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs: A little cleanup and use VoidPreference * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PreferenceDialog.cs: Call RequestWidgetAdapters to notify listeners that they need to create and bind their widget adapters to preferences they own * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs: Set the MnemonicWidget if the preference gets a label * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs: Last of the preference migration - adds the import profile combo 2008-04-22 Aaron Bockover * src/Core/Banshee.Services/Banshee.MediaEngine/IAudioCdRipper.cs: * src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs: Added a enableErrorCorrection argument to the Begin method * src/Core/Banshee.Core/Banshee.Configuration.Schema/ImportSchema.cs: Removed the error correction schema * src/Core/Banshee.Services/Banshee.Preferences/Collection.cs: Added remove * src/Core/Banshee.Services/Banshee.Preferences/Preference.cs: * src/Core/Banshee.Services/Banshee.Preferences/Root.cs: * src/Core/Banshee.Services/Banshee.Preferences/SchemaPreference.cs: Added Description property and ctor overrides * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/PreferencesDialog.cs: Removed crap * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs: Set tooltips * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs: Pass the schema value ot Begin * src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs: Add the first preference for audio CD support * src/Libraries/Hyena.Gui/Hyena.Gui/TooltipSetter.cs: A new awesome tooltip wrapper that will either use the old Gtk.Tooltips API or the new Gtk.Widget.TooltipText property, depending on what is available 2008-04-22 Aaron Bockover * src/Core/Banshee.Services/Banshee.Preferences/Page.cs: Set up default preferences for some more things * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs: Added widget adapters for the file/folder pattern preferences * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs: Layout preference widgets properly using a table so everything lines up and looks pretty * src/Core/Banshee.Services/Banshee.Preferences/Collection.cs: Added FindOrAdd method * src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs: Added a ShowLabel property * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs: Remove a console.writeline * src/Libraries/Hyena.Gui/Hyena.Widgets/TextViewLabel.cs: Moved from somewhere in Banshee proper * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileComboBoxConfigurable.cs: * src/Core/Banshee.ThickClient/Banshee.MediaProfiles.Gui/ProfileConfigurationDialog.cs: Reflect the moving of TextViewLabel to Hyena.Widgets 2008-04-22 Aaron Bockover This commit adds very initial and incomplete support for better preference management that makes it easy for extensions to add new preferences * src/Core/Banshee.Services/Banshee.Preferences/Root.cs: A root object for all things preferency * src/Core/Banshee.Services/Banshee.Preferences/Collection.cs: A base preference object that represents a collection of preference things * src/Core/Banshee.Services/Banshee.Preferences/Page.cs: Non gui collection representing pages for the preference dialog * src/Core/Banshee.Services/Banshee.Preferences/Section.cs: A section is a group of preferences in a page * src/Core/Banshee.Services/Banshee.Preferences/Preference.cs: Generic preference object that maps to as single preference item * src/Core/Banshee.Services/Banshee.Preferences/PreferenceBase.cs: Base single item preference object (non-generic) * src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs: The core preference service * src/Core/Banshee.Services/Banshee.Preferences/SchemaPreference.cs: A preference item object that binds to our lovely SchemaEntry configuration objects that makes exposing configuration as preferences really easy * src/Core/Banshee.Services/Banshee.Library/LibraryLocationPreference.cs: Preference object for setting the library location * src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs: Load the preference service * src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/BansheeDialog.cs: A new base dialog object that makes writing new dialogs very nice * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PreferenceDialog.cs: The new preference dialog * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs: A GUI wrapper for the preference Page object * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/SectionBox.cs: A GUI wrapper for the preference Section object * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/WidgetFactory.cs: A static class that builds and binds widgets to non-GUI preferences * src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/DefaultPreferenceWidgets.cs: A set of default preference widget adaptors that represent more complex UI for interacting with preferences * src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs: Open the new preferences dialog 2008-04-19 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs: Added a classic ctor override * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs: Allow the button to have only the icon * src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs: Added a classic mode that just pops up the slider above the widget, which is best for fullscreen * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs: Ensure the controls don't go away if the volume button is active * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Some fixes; increase the timeout to 5s * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs: Make the background slightly transparent if compositing is supported * src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs: Utilities for dealing with awesome stuff in composited environments that doesn't require the latest bleeding GTK; ported from F-Spot, thank you Larry * src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs: Fix the frame rendering 2008-04-19 Aaron Bockover * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs: Add the default accel group and make it as wide as the screen (probably lame but gabaug was complaining) * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Add the default accel group and some custom keybindings for seeking and showing/hiding the control bar * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs: Make gabaug happy and move the bar to the bottom of the screen 2008-04-19 Aaron Bockover * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedSeekSlider.cs: Added new horizontal layout mode that is nice for fullscreen * src/Core/Banshee.Widgets/Banshee.Widgets/StreamPositionLabel.cs: Rebuild the layouts when the format string changes * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs: Allow the seek slider to fill any remaining space in the window and make sure the window takes 85% of the screen width * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Fixed the popup auto-hide when the mouse was over the controls * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs: Added better sizing to allow the window to adapt to the screen size * src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs: Implemented two empty method overrides to avoid GtkContainer's bitching 2008-04-19 Aaron Bockover * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs: First pass at adding fullscreen controls - it's by no means complete, and yes I know there are some bugs and missing items * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Show/hide the controls overlay window when necessary * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs: Started porting the overlay controls window from F-Spot * src/Core/Banshee.ThickClient/Banshee.Gui/ViewActions.cs: Use F instead of F11 as the fullscreen accel * src/Libraries/Hyena.Gui/Hyena.Widgets/MenuButton.cs: Moved the widget construction to a protected function and added a default ctor * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/NextButton.cs: Added a small wrapper for creating the next action button * src/Clients/Nereid/Nereid/PlayerInterface.cs: Use the new NextButton 2008-04-19 Aaron Bockover * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Lots of window manager and parent window interaction stuff so that fullscreen behaves properly when a user does strange window management like alt-tab when in fullscreen * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs: Ensure that if for some reason the source is changed underneath the fullscreen, it's merged back into the source UI * src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs: Use the proper drawing call for non-standard border renders 2008-04-18 Aaron Bockover * libbanshee/banshee-player-video.c: (bp_video_find_xoverlay): Do not let the video sink handle X events 2008-04-18 Aaron Bockover * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Hide the cursor if it hasn't moved in 2.5 seconds, allow 150px of movement before showing it again if it was hidden already 2008-04-18 Aaron Bockover This commit adds video rendering to the fullscreen window and fixes all of the GTK CRITICAL messages that could be seen when switching from the now playing source to something else * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs: Implemented a sweet widget reparenting hack to work around the windowing issues with GstXOverlay; when the video wiget is not to be displayed, it is reparented to the fullscreen window, which will be hidden; this also implements the rest of fullscreen support as far as video rendering is concerned (there are no fullscreen controls yet, but you can press escape to close the window) * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Hide and unfullscreen self instead of destroying * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VideoDisplay.cs: Abstracted non GstXOverlay specific pieces of the video widget to make the code easier to maintain * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/XOverlayVideoDisplay.cs: Fixes with the internal windowing to better work with the reparenting hack outlined above 2008-04-18 Scott Peterson * src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs: We were instantiating a List on every render. Now we just use one list per instance and clear it on each render. 2008-04-17 Aaron Bockover * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs: * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs: Moved the fullscreen UI logic from the source to the interface * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs: Use Destroy explicitly 2008-04-17 Scott Peterson