banshee r4859 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Collection.Database src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp src/Dap/Banshee.Dap/Banshee.Dap src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data
- From: gburt svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r4859 - in trunk/banshee: . src/Core/Banshee.Services/Banshee.Collection.Database src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp src/Dap/Banshee.Dap/Banshee.Dap src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data
- Date: Fri, 19 Dec 2008 17:51:52 +0000 (UTC)
Author: gburt
Date: Fri Dec 19 17:51:52 2008
New Revision: 4859
URL: http://svn.gnome.org/viewvc/banshee?rev=4859&view=rev
Log:
2008-12-19 Gabriel Burt <gabriel burt gmail com>
* src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs:
* src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs:
* src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs:
* src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs:
* src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs:
Fix crash that happened toward the end of syncing a DAP device, caused by
not including in the FROM clause all the tables needed for the WHERE
conditions of podcast-related playlists (BGO #558662)
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackListModel.cs Fri Dec 19 17:51:52 2008
@@ -64,7 +64,7 @@
private bool forced_sort_query;
private string reload_fragment;
- private string join_table, join_fragment, join_primary_key, join_column, condition;
+ private string join_table, join_fragment, join_primary_key, join_column, condition, condition_from;
private string query_fragment;
private string user_query;
@@ -188,8 +188,8 @@
public string UnfilteredQuery {
get {
return unfiltered_query ?? (unfiltered_query = String.Format (
- "FROM {0}{1} WHERE {2} {3}",
- From, JoinFragment,
+ "FROM {0} WHERE {1} {2}",
+ FromFragment,
String.IsNullOrEmpty (provider.Where) ? "1=1" : provider.Where,
ConditionFragment
));
@@ -200,7 +200,12 @@
protected string From {
get { return from ?? provider.From; }
set { from = value; }
- }
+ }
+
+ private string from_fragment;
+ public string FromFragment {
+ get { return from_fragment ?? (from_fragment = String.Format ("{0}{1}", From, JoinFragment)); }
+ }
public virtual void UpdateUnfilteredAggregates ()
{
@@ -426,11 +431,20 @@
get { return join_column; }
set { join_column = value; }
}
-
+
public void AddCondition (string part)
{
+ AddCondition (null, part);
+ }
+
+ public void AddCondition (string tables, string part)
+ {
if (!String.IsNullOrEmpty (part)) {
condition = condition == null ? part : String.Format ("{0} AND {1}", condition, part);
+
+ if (!String.IsNullOrEmpty (tables)) {
+ condition_from = condition_from == null ? tables : String.Format ("{0}, {1}", condition_from, tables);
+ }
}
}
@@ -438,6 +452,25 @@
get { return condition; }
}
+ private string condition_from_fragment;
+ public string ConditionFromFragment {
+ get {
+ if (condition_from_fragment == null) {
+ if (JoinFragment == null) {
+ condition_from_fragment = condition_from;
+ } else {
+ if (condition_from == null) {
+ condition_from = "CoreTracks";
+ }
+
+ condition_from_fragment = String.Format ("{0}{1}", condition_from, JoinFragment);
+ }
+ }
+
+ return condition_from_fragment;
+ }
+ }
+
public string ConditionFragment {
get { return PrefixCondition ("AND"); }
}
Modified: trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs (original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs Fri Dec 19 17:51:52 2008
@@ -593,8 +593,8 @@
if (from != null && from.Count > 0) {
IPod.Playlist playlist = ipod_device.TrackDatabase.CreatePlaylist (from.Name);
foreach (int track_id in ServiceManager.DbConnection.QueryEnumerable<int> (String.Format (
- "SELECT CoreTracks.TrackID FROM CoreTracks{0} WHERE {1}",
- from.DatabaseTrackModel.JoinFragment, from.DatabaseTrackModel.Condition)))
+ "SELECT CoreTracks.TrackID FROM {0} WHERE {1}",
+ from.DatabaseTrackModel.ConditionFromFragment, from.DatabaseTrackModel.Condition)))
{
playlist.AddTrack (tracks_map[track_id].IpodTrack);
}
Modified: trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs (original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Mtp/Banshee.Dap.Mtp/MtpSource.cs Fri Dec 19 17:51:52 2008
@@ -228,8 +228,8 @@
if (from != null && from.Count > 0) {
MTP.Playlist playlist = new MTP.Playlist (mtp_device, from.Name);
foreach (int track_id in ServiceManager.DbConnection.QueryEnumerable<int> (String.Format (
- "SELECT CoreTracks.ExternalID FROM CoreTracks{0} WHERE {1}",
- from.DatabaseTrackModel.JoinFragment, from.DatabaseTrackModel.Condition)))
+ "SELECT CoreTracks.ExternalID FROM {0} WHERE {1}",
+ from.DatabaseTrackModel.ConditionFromFragment, from.DatabaseTrackModel.Condition)))
{
playlist.AddTrack (track_id);
}
Modified: trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs (original)
+++ trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs Fri Dec 19 17:51:52 2008
@@ -219,9 +219,9 @@
ServiceManager.DbConnection.Execute (
String.Format (
@"INSERT INTO CorePlaylistEntries (PlaylistID, TrackID)
- SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND MetadataHash IN (
- SELECT MetadataHash FROM CoreTracks{0} WHERE {1})",
- from.DatabaseTrackModel.JoinFragment, from.DatabaseTrackModel.Condition),
+ SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND MetadataHash IN
+ (SELECT MetadataHash FROM {0} WHERE {1})",
+ from.DatabaseTrackModel.ConditionFromFragment, from.DatabaseTrackModel.Condition),
to.DbId, sync.Dap.DbId
);
to.UpdateCounts ();
Modified: trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Data/PodcastTrackListModel.cs Fri Dec 19 17:51:52 2008
@@ -59,10 +59,11 @@
public PodcastTrackListModel (BansheeDbConnection conn, IDatabaseTrackModelProvider provider, DatabaseSource source) : base (conn, provider, source)
{
From = String.Format ("{0}, {1}, {2}, {3}", provider.From, Feed.Provider.TableName, FeedItem.Provider.TableName, FeedEnclosure.Provider.TableName);
- int podcast_dbid = (source as PodcastSource ?? source.Parent as PodcastSource).DbId;
- AddCondition (String.Format (
+
+ int podcast_library_dbid = (source as PodcastSource ?? source.Parent as PodcastSource).DbId;
+ AddCondition (From, String.Format (
"CoreTracks.PrimarySourceID = {3} AND {0}.FeedID = {1}.FeedID AND CoreTracks.ExternalID = {1}.ItemID AND {1}.ItemID = {2}.ItemID",
- Feed.Provider.TableName, FeedItem.Provider.TableName, FeedEnclosure.Provider.TableName, podcast_dbid
+ Feed.Provider.TableName, FeedItem.Provider.TableName, FeedEnclosure.Provider.TableName, podcast_library_dbid
));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]