private void LoadFromDevice(bool refresh) { // bool previous_database_supported = database_supported; if (refresh) { ipod_device.TrackDatabase.Reload(); } tracks_map.Clear(); if (database_supported || (ipod_device.HasTrackDatabase && ipod_device.ModelInfo.DeviceClass == "shuffle")) { foreach (Track ipod_track in ipod_device.TrackDatabase.Tracks) { try { IpodTrackInfo track = new IpodTrackInfo(ipod_track); track.PrimarySource = this; track.Save(false); tracks_map.Add(track.TrackId, track); } catch (Exception e) { Log.Exception(e); } } Hyena.Data.Sqlite.HyenaSqliteCommand insert_cmd = new Hyena.Data.Sqlite.HyenaSqliteCommand( @"INSERT INTO CorePlaylistEntries (PlaylistID, TrackID) SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND ExternalID = ?"); foreach (IPod.Playlist playlist in ipod_device.TrackDatabase.Playlists) { if (playlist.IsOnTheGo) // || playlist.IsPodcast) { { continue; } PlaylistSource pl_src = new PlaylistSource(playlist.Name, this); pl_src.Save(); // We use the IPod.Track.Id here b/c we just shoved it into ExternalID above when we loaded // the tracks, however when we sync, the Track.Id values may/will change. foreach (IPod.Track track in playlist.Tracks) { ServiceManager.DbConnection.Execute(insert_cmd, pl_src.DbId, this.DbId, track.Id); } pl_src.UpdateCounts(); AddChildSource(pl_src); } } /*else { * BuildDatabaseUnsupportedWidget (); * }*/ /*if(previous_database_supported != database_supported) { * OnPropertiesChanged(); * }*/ }
protected override void AddTrackToDevice(DatabaseTrackInfo track, SafeUri fromUri) { lock (sync_mutex) { if (track.PrimarySourceId == DbId) { return; } IpodTrackInfo ipod_track = new IpodTrackInfo(track); ipod_track.Uri = fromUri; ipod_track.PrimarySource = this; ipod_track.Save(false); tracks_to_add.Enqueue(ipod_track); } }
protected override void AddTrackToDevice (DatabaseTrackInfo track, SafeUri fromUri) { lock (sync_mutex) { if (track.PrimarySourceId == DbId) { return; } if (track.Duration.Equals (TimeSpan.Zero)) { throw new Exception (Catalog.GetString ("Track duration is zero")); } IpodTrackInfo ipod_track = new IpodTrackInfo (track); ipod_track.Uri = fromUri; ipod_track.PrimarySource = this; ipod_track.Save (false); tracks_to_add.Enqueue (ipod_track); } }
private void LoadFromDevice (bool refresh) { // bool previous_database_supported = database_supported; if (refresh) { ipod_device.TrackDatabase.Reload (); } tracks_map.Clear (); if (database_supported || (ipod_device.HasTrackDatabase && ipod_device.ModelInfo.DeviceClass == "shuffle")) { foreach (Track ipod_track in ipod_device.TrackDatabase.Tracks) { try { IpodTrackInfo track = new IpodTrackInfo (ipod_track); track.PrimarySource = this; track.Save (false); tracks_map.Add (track.TrackId, track); } catch (Exception e) { Log.Exception (e); } } Hyena.Data.Sqlite.HyenaSqliteCommand insert_cmd = new Hyena.Data.Sqlite.HyenaSqliteCommand ( @"INSERT INTO CorePlaylistEntries (PlaylistID, TrackID) SELECT ?, TrackID FROM CoreTracks WHERE PrimarySourceID = ? AND ExternalID = ?"); foreach (IPod.Playlist playlist in ipod_device.TrackDatabase.Playlists) { if (playlist.IsOnTheGo) { // || playlist.IsPodcast) { continue; } PlaylistSource pl_src = new PlaylistSource (playlist.Name, this); pl_src.Save (); // We use the IPod.Track.Id here b/c we just shoved it into ExternalID above when we loaded // the tracks, however when we sync, the Track.Id values may/will change. foreach (IPod.Track track in playlist.Tracks) { ServiceManager.DbConnection.Execute (insert_cmd, pl_src.DbId, this.DbId, track.Id); } pl_src.UpdateCounts (); AddChildSource (pl_src); } } /*else { BuildDatabaseUnsupportedWidget (); }*/ /*if(previous_database_supported != database_supported) { OnPropertiesChanged(); }*/ }