示例#1
0
        /// <summary>
        /// Löscht doppelte Einträge sowhol aus der Datenbank, wie auch vom Filesystem.
        /// Eine Sicherheitskopie der Dateien wird angelegt, wenn das backupDirectory angegeben wurde.
        /// Die Auswahl der Duplikate erfolgt über eine Sortierung. 
        /// Nach der Ermittlung der doppelten Einträge, bleibt der 1. Eintrag erhalten und alle anderen werden gelöscht.
        /// </summary>
        /// <param name="priority">
        /// Eine zusätzlliche Prioritätensteuerung zur uche nach doppelten Einträgen
        /// </param>
        /// <param name="backupDirectory">
        /// Der Pfad zum Backup-Directory für die gelöschten Dateien
        /// </param>
        /// <returns>
        /// Eine Liste der gelöschten Dateien
        /// </returns>
        public IEnumerable<WDuplicateEntry> DeleteEnries(EDuplicateCheckPriority priority, string backupDirectory)
        {
            IEnumerable<WDuplicateEntry> duplicateEntries = ReadMultiEntries(priority);
            WDuplicateEntry savedEntry = null;
            List<WDuplicateEntry> deletedFiles = new List<WDuplicateEntry>();
            foreach (WDuplicateEntry curEntry in duplicateEntries)
            {
                if (savedEntry != null && savedEntry.Interpret == curEntry.Interpret && savedEntry.Album == curEntry.Album
                    && savedEntry.Name == curEntry.Name)
                {
                    deletedFiles.Add(curEntry);
                    DeleteEntry(curEntry.TitleId);
                    FileMgr.Instance.CopyFile(curEntry.Path, curEntry.Filename, backupDirectory);
                    FileMgr.Instance.DeleteFile(curEntry.Path, curEntry.Filename);
                }
                else
                {
                    savedEntry = curEntry;
                }

            }

            return deletedFiles;
        }
示例#2
0
        /// <summary>
        /// Liefert die Datenbankeinträge, welche doppelte Einträge  sind
        /// </summary>
        /// <returns></returns>
        protected IEnumerable<WDuplicateEntry> ReadMultiEntries(EDuplicateCheckPriority priority)
        {

            string query = "SELECT i.Name, a.Name, title1.Name, title1.Path, title1.Filename, title1.bitrate, title1.Length, title1.bytes, title1.ID from Title title1 "
                + "JOIN Title title2 on title1.ID != title2.ID "
                + "JOIN Interpret i on i.ID = title1.Interpret_ID "
                + "LEFT JOIN Album a on a.ID = title1.Album_ID "
                + "WHERE title1.Interpret_ID = title2.Interpret_ID "
                + "AND (title1.Album_ID = title2.Album_ID OR title1.Album_ID is null) "
                + "AND title1.Name = title2.Name "
                + "ORDER BY title1.Interpret_ID, title1.Album_ID, title1.Name ";
            if (priority == EDuplicateCheckPriority.CREATIONDATE)
            {
                query += ", title1.Editdate ";
            }
            query += ", title1.bitrate, title1.Duration, title1.bytes";

            SqlCeConnection connection = new SqlCeConnection(global::MP3ManagerBase.Properties.Settings.Default.MP3ManagerConnection);
            connection.Open();

            List<WDuplicateEntry> returnValue = new List<WDuplicateEntry>();
            try
            {
                using (SqlCeCommand cmd = new SqlCeCommand(query, connection))
                {

                    SqlCeDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {

                        WDuplicateEntry newEntry = new WDuplicateEntry();

                        newEntry.Interpret = !reader.IsDBNull(0) ? reader.GetSqlString(0).Value : "";
                        newEntry.Album = !reader.IsDBNull(1) ? reader.GetSqlString(1).Value : "";
                        newEntry.Name = !reader.IsDBNull(2) ? reader.GetSqlString(2).Value : "";
                        newEntry.Path = !reader.IsDBNull(3) ? reader.GetSqlString(3).Value : "";
                        newEntry.Filename = !reader.IsDBNull(4) ? reader.GetSqlString(4).Value : "";
                        newEntry.Bitrate = !reader.IsDBNull(5) ? reader.GetSqlInt32(5).Value : 0;
                        newEntry.Length = !reader.IsDBNull(6) ? reader.GetSqlString(6).Value : "";
                        newEntry.Bytes = !reader.IsDBNull(7) ? reader.GetSqlInt64(7).Value : 0;
                        newEntry.TitleId = !reader.IsDBNull(8) ? reader.GetSqlInt32(8).Value : 0;
                        returnValue.Add(newEntry);
                        log.DebugFormat("DuplicatEntry: {0}", newEntry.ToString());
                    }
                    reader.Close();
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                connection.Close();
            }
            return returnValue;
        }