Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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));
                    }
                }
            }
        }
Example #4
0
        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);
                }
            }
        }
Example #5
0
        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));
                    }
                }
            }
        }
Example #6
0
        /// <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);
        }
Example #7
0
        //========================================================================================
        // 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;
        }
Example #8
0
 //========================================================================================
 // 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;
 }
Example #9
0
        /// <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;
        }