コード例 #1
0
        public void Migrate()
        {
            int succeeded = 0;
            int failed = 0;
            using (BansheeDatabase banshee = new BansheeDatabase(bansheeDb, (playCountUpdateMode == PlaycountUpdateMode.Overwrite)))
            using (Table tbl = new Table(databaseFiles))
            {
                Logger.LogMessage(1, "Winamp DB successfully opened");
                Logger.LogMessage(1, "Setting DryRun to {0}", dryRun);
                Logger.LogMessage(1, "Setting PlayCountUpdateMode to: {0}", playCountUpdateMode);
                Logger.LogMessage(1, "Setting RatingUpdateMode to: {0}", ratingUpdateMode);
                Logger.LogMessage(1, "Backing up Banshee DB: {0}", dryRun ? "Not Needed" : doBackup ? "Yes" : "No");

                Console.Error.WriteLine("Press RETURN to migrate data or CTRL+C to abort now");
                Console.ReadLine();
                Console.Error.WriteLine("Starting migration {0}", dryRun ? "SIMULATION" : "FOR REAL");
                banshee.DryRun = dryRun;
                if (doBackup && !dryRun)
                {
                    string copy = banshee.CreateBackup();
                    Logger.LogMessage(1, "Backup of db created as {0}", copy);
                }
                foreach (Record row in tbl.Records)
                {
                    Track winampTrack = new Track(row);
                    BansheeTrack bansheeTrack;

                    if (winampTrack.Title == null || winampTrack.Artist == null)
                    {
                        Logger.LogMessage(0, "Ignoring track since it doesn't contain neccessary information {0}", winampTrack);
                        failed++;
                        continue;
                    }

                    if (winampTrack.Album == null)
                    {
                        if (allowNoAlbum)
                            Logger.LogMessage(1, "{0} - {1} has no album info, but proceeding anyway", winampTrack.Album, winampTrack.Title);
                        else
                        {
                            Logger.LogMessage(0, "{0} - {1} lacks album info. Use --allow-no-album to migrate this track anyway", winampTrack.Artist, winampTrack.Title);
                            failed++;
                            continue;
                        }
                    }

                    if (winampTrack.Album != null)
                        bansheeTrack = banshee.GetTrack(winampTrack.Title, winampTrack.Artist, winampTrack.Album);
                    else
                        bansheeTrack = banshee.GetTrack(winampTrack.Title, winampTrack.Artist);
                    if (bansheeTrack == null)
                    {
                        Logger.LogMessage(0, "Failed to find banshee track for winamp track {0}", winampTrack);
                        failed++;
                        continue;
                    }
                    bool updateRating = false;
                    bool updatePlaycount = false;

                    if (playCountUpdateMode != PlaycountUpdateMode.Ignore)
                        updatePlaycount = true;
                    switch(ratingUpdateMode)
                    {
                        case RatingUpdateMode.OnlyEmpty:
                            updateRating = !bansheeTrack.HasRating && winampTrack.Rating != null;
                            break;
                        case RatingUpdateMode.Overwrite:
                            updateRating = winampTrack.Rating != null;
                            break;
                        case RatingUpdateMode.OverwriteAndClear:
                            updateRating = true;
                            break;
                        default:
                            updateRating = false;
                            break;
                    }
                    bool success = true;
                    if (updatePlaycount && updateRating)
                        success = banshee.UpdateTrack(bansheeTrack.Id, winampTrack.Rating.Value, winampTrack.PlayCount);
                    else if (updatePlaycount)
                        success = banshee.UpdateTrackPlaycount(bansheeTrack.Id, winampTrack.PlayCount);
                    else if (updateRating)
                        success = banshee.UpdateTrackRating(bansheeTrack.Id, winampTrack.Rating.Value);
                    else
                    {
                        Logger.LogMessage(1, "Nothing to do for track {0}", winampTrack);
                        success = false;
                    }

                    if (success)
                    {
                        Logger.LogMessage(1, "SUCCEEDED: Updating {0}-{1}", winampTrack.Artist, winampTrack.Title);
                        succeeded++;
                    }
                    else
                    {
                        Logger.LogMessage(0, "FAILED: Updating {0}-{1}", winampTrack.Artist, winampTrack.Title);
                    }
                }
                Logger.LogMessage(0, "All Done {0} tracks ({1:p}) successfully migrated ({2} ({3:p}) failed)", succeeded, succeeded / (double)tbl.NumFiles, failed, failed / (double)tbl.NumFiles);
            }
        }
コード例 #2
0
        public void DumpWinampData()
        {
            using (BansheeDatabase banshee = new BansheeDatabase(bansheeDb, (playCountUpdateMode == PlaycountUpdateMode.Overwrite)))
            using (Table tbl = new Table(databaseFiles))
            {
                foreach (Record row in tbl.Records)
                {
                    StringField title  = row.GetFieldByType(MetadataField.Title) as StringField;
                    StringField artist = row.GetFieldByType(MetadataField.Artist) as StringField;
                    StringField album  = row.GetFieldByType(MetadataField.Album) as StringField;
                    StringField file   = row.GetFieldByType(MetadataField.Filename) as StringField;
                    IntegerField rating = row.GetFieldByType(MetadataField.Rating) as IntegerField;
                    IntegerField playcount = row.GetFieldByType(MetadataField.PlayCount) as IntegerField;
                    Console.WriteLine("BEGIN TRACK");
                    Console.WriteLine("File: {0}", file != null ? file.Value : "");
                    Console.WriteLine("Title: {0}", title != null ? title.Value : "");
                    Console.WriteLine("Artist: {0}", artist != null ? artist.Value : "");
                    Console.WriteLine("Album: {0}", album != null ? album.Value : "");
                    Console.WriteLine("Rating: {0}", rating != null ? rating.Value : -1);
                    Console.WriteLine("Playcount: {0}", playcount != null ? playcount.Value : 0);

                }
            }
        }