/// <summary> /// Adds one or more tracks to an existing playlist in the catalog. /// </summary> private void AddTracksToPlaylist() { PersistentID playlistPID = controller.GetPersistentID(action.PlaylistOID); if (!playlistPID.IsEmpty) { PersistentIDCollection trackPIDs = new PersistentIDCollection(); ObjectIDCollection trackOIDs = action.TrackOIDs; foreach (ObjectID trackOID in trackOIDs) { PersistentID trackPID = controller.GetPersistentID(trackOID); if (!trackPID.IsEmpty) { trackPID.TransientID = trackOID.TrackID; trackPIDs.Add(trackPID); } } if (trackPIDs.Count > 0) { catalog.AddTracksToPlaylist(trackPIDs, playlistPID); } } }
private void itunes_OnDatabaseChangedEvent(object deletedObjectIDs, object changedObjectIDs) { // NOTE: this event is both expensive and blocking, so it is not advised to // wire up a handler to OnDatabaseChanged. Debug.WriteLine("OnDatabaseChangedEvent(deletedObjectIDs, changedObjectIDs)"); if (deletedObjectIDs == null) { Debug.WriteLine("DeletedObjectIDs is null"); } else { ObjectIDCollection deleteIDs = new ObjectIDCollection(); Array deleted = deletedObjectIDs as Array; for (int i = deleted.GetLowerBound(0); i <= deleted.GetUpperBound(0); i++) { deleteIDs.Add(new ObjectID( (int)deleted.GetValue(i, 0), (int)deleted.GetValue(i, 1), (int)deleted.GetValue(i, 2), (int)deleted.GetValue(i, 3))); } if (deleteIDs.Count > 0) { DumpChanges("Deleted", deleteIDs); } } if (deletedObjectIDs == null) { Debug.WriteLine("ChangedObjectIDs is null"); } else { ObjectIDCollection changeIDs = new ObjectIDCollection(); Array changed = changedObjectIDs as Array; for (int i = changed.GetLowerBound(0); i <= changed.GetUpperBound(0); i++) { changeIDs.Add(new ObjectID( (int)changed.GetValue(i, 0), (int)changed.GetValue(i, 1), (int)changed.GetValue(i, 2), (int)changed.GetValue(i, 3))); } if (changeIDs.Count > 0) { DumpChanges("Changes", changeIDs); } } }
private void DumpChanges(string title, ObjectIDCollection things) { foreach (ObjectID oid in things) { if (oid.IsSource) { IITSource source = (IITSource)itunes.GetITObjectByID( oid.SourceID, oid.PlaylistID, oid.TrackID, oid.DatabaseID); if (source == null) { Debug.WriteLine( String.Format("Source ({0},{1},{2},{3}): UNKNOWN", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID)); } else { Debug.WriteLine( String.Format("Source ({0},{1},{2},{3}): {4}", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID, source.Name)); } } else if (oid.IsPlaylist) { IITPlaylist playlist = (IITPlaylist)itunes.GetITObjectByID( oid.SourceID, oid.PlaylistID, oid.TrackID, oid.DatabaseID); if (playlist == null) { Debug.WriteLine( String.Format("Playlist ({0},{1},{2},{3}): UNKNOWN", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID)); } else { Debug.WriteLine( String.Format("Playlist ({0},{1},{2},{3}): {4}, tracks {5}", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID, playlist.Name, playlist.Tracks.Count)); } } else if (oid.IsTrack) { IITTrack track = (IITTrack)itunes.GetITObjectByID( oid.SourceID, oid.PlaylistID, oid.TrackID, oid.DatabaseID); if (track == null) { Debug.WriteLine( String.Format("Track ({0},{1},{2},{3}): UNKNOWN", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID)); } else { Debug.WriteLine( String.Format("Track ({0},{1},{2},{3}): {4}, playedCount {5}", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID, track.Name, track.PlayedCount)); } } else { IITObject changed = itunes.GetITObjectByID( oid.SourceID, oid.PlaylistID, oid.TrackID, oid.DatabaseID); if (changed == null) { Debug.WriteLine( String.Format("Unknown ({0},{1},{2},{3})", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID)); } else { Debug.WriteLine(String.Format( "other ({0},{1},{2},{3}) -> Name [{4}]", oid.DatabaseID, oid.SourceID, oid.PlaylistID, oid.TrackID, changed.Name)); } } } }
/// <summary> /// Instantiate a new maintenance action only if the safe array describes a recognizable /// activity pattern. /// </summary> /// <param name="safeArray"></param> /// <returns></returns> public static MaintenanceAction Create(object safeArray) { Array array = safeArray as Array; ObjectIDCollection list = new ObjectIDCollection(); StringBuilder builder = new StringBuilder(); ObjectID oid; // convert the safe array to a collection and construct the pattern map int lower = array.GetLowerBound(0); int upper = array.GetUpperBound(0); for (int i = lower; i <= upper; i++) { oid = new ObjectID( (int)array.GetValue(i, 0), // source (int)array.GetValue(i, 1), // playlist (int)array.GetValue(i, 2), // trackid (int)array.GetValue(i, 3)); // databaseid list.Add(oid); if (oid.IsPlaylist) { builder.Append("P"); } else if (oid.IsSource) { builder.Append("S"); } else if (oid.IsTrack) { builder.Append("T"); } else { builder.Append("X"); } } // recognize pattern to instantiate new MaintenanceAction string map = builder.ToString(); if (Regex.IsMatch(map, AddPlaylistPattern)) { return(new MaintenanceAction(ActionType.AddPlaylist, list)); } else if (Regex.IsMatch(map, AddTracksPattern)) { return(new MaintenanceAction(ActionType.AddTracksToPlaylist, list)); } else if (Regex.IsMatch(map, RemovePlaylistPattern)) { return(new MaintenanceAction(ActionType.RemovePlaylist, list)); } else if (Regex.IsMatch(map, RemoveTracksPattern)) { return(new MaintenanceAction(ActionType.RemoveTracksFromPlaylist, list)); } // Not a recognizable pattern, return null list.Clear(); return(null); }
//======================================================================================== // Constructors //======================================================================================== /// <summary> /// Initialize a new instance of the specified type with the given object IDs. /// </summary> /// <param name="action"></param> /// <param name="oid"></param> private MaintenanceAction(ActionType action, ObjectIDCollection list) { this.action = action; this.list = list; }
/// <summary> /// Instantiate a new maintenance action only if the safe array describes a recognizable /// activity pattern. /// </summary> /// <param name="safeArray"></param> /// <returns></returns> public static MaintenanceAction Create(object safeArray) { Array array = safeArray as Array; ObjectIDCollection list = new ObjectIDCollection(); StringBuilder builder = new StringBuilder(); ObjectID oid; // convert the safe array to a collection and construct the pattern map int lower = array.GetLowerBound(0); int upper = array.GetUpperBound(0); for (int i = lower; i <= upper; i++) { oid = new ObjectID( (int)array.GetValue(i, 0), // source (int)array.GetValue(i, 1), // playlist (int)array.GetValue(i, 2), // trackid (int)array.GetValue(i, 3)); // databaseid list.Add(oid); if (oid.IsPlaylist) { builder.Append("P"); } else if (oid.IsSource) { builder.Append("S"); } else if (oid.IsTrack) { builder.Append("T"); } else { builder.Append("X"); } } // recognize pattern to instantiate new MaintenanceAction string map = builder.ToString(); if (Regex.IsMatch(map, AddPlaylistPattern)) { return new MaintenanceAction(ActionType.AddPlaylist, list); } else if (Regex.IsMatch(map, AddTracksPattern)) { return new MaintenanceAction(ActionType.AddTracksToPlaylist, list); } else if (Regex.IsMatch(map, RemovePlaylistPattern)) { return new MaintenanceAction(ActionType.RemovePlaylist, list); } else if (Regex.IsMatch(map, RemoveTracksPattern)) { return new MaintenanceAction(ActionType.RemoveTracksFromPlaylist, list); } // Not a recognizable pattern, return null list.Clear(); return null; }