public DatabaseRebuilder(IpodSource source)
        {
            this.source = source;

            user_job = new UserJob(Catalog.GetString("Rebuilding Database"));
            user_job.PriorityHints = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
            user_job.SetResources(Resource.Disk, Resource.Cpu);
            user_job.Title     = Catalog.GetString("Rebuilding Database");
            user_job.Status    = Catalog.GetString("Scanning iPod...");
            user_job.IconNames = source._GetIconNames();
            user_job.CanCancel = true;
            user_job.Register();

            ThreadPool.QueueUserWorkItem(RebuildDatabase);
        }
Example #2
0
        private void CreateUserJob()
        {
            lock (user_job_mutex) {
                if (user_job != null)
                {
                    return;
                }

                user_job = new UserJob(UserJobTitle, UserJobTitle, Catalog.GetString("Importing Songs"));
                user_job.SetResources(Resource.Cpu, Resource.Disk, Resource.Database);
                user_job.PriorityHints = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
                user_job.IconNames     = IconNames;
                user_job.CancelMessage = CancelMessage;
                user_job.CanCancel     = CanCancel;
                user_job.Register();
            }
        }
Example #3
0
        protected void CreateUserJob()
        {
            lock (sync) {
                if (user_job != null)
                {
                    return;
                }

                user_job = new UserJob(Title, AddinManager.CurrentLocalizer.GetString("Initializing"));
                user_job.SetResources(Resource.Cpu, Resource.Disk);
                user_job.PriorityHints    = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
                user_job.IconNames        = new string [] { Gtk.Stock.Network };
                user_job.CancelMessage    = CancelMessage;
                user_job.CanCancel        = true;
                user_job.CancelRequested += OnCancelRequested;
                user_job.Register();
            }
        }
Example #4
0
        public void Start()
        {
            ResetState();

            foreach (AudioCdTrackInfo track in source.Model)
            {
                if (track.RipEnabled)
                {
                    total_duration += track.Duration;
                    queue.Enqueue(track);
                }
            }

            if (queue.Count == 0)
            {
                return;
            }

            source.LockAllTracks();

            user_job = new UserJob(Catalog.GetString("Importing Audio CD"),
                                   Catalog.GetString("Initializing Drive"), "media-import-audio-cd");
            user_job.CancelMessage = String.Format(Catalog.GetString(
                                                       "<i>{0}</i> is still being imported into the music library. Would you like to stop it?"
                                                       ), GLib.Markup.EscapeText(source.Model.Title));
            user_job.SetResources(Resource.Cpu);
            user_job.PriorityHints    = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
            user_job.CanCancel        = true;
            user_job.CancelRequested += OnCancelRequested;
            user_job.Finished        += OnFinished;
            user_job.Register();

            if (source != null && source.Model != null)
            {
                if (!source.Model.LockDoor())
                {
                    Hyena.Log.Warning("Could not lock CD-ROM door", false);
                }
            }

            ripper.Begin(source.Model.Volume.DeviceNode, AudioCdService.ErrorCorrection.Get());

            RipNextTrack();
        }
        private void CreateUserJob()
        {
            lock (user_job_mutex) {
                if (user_job != null || KeepUserJobHidden)
                {
                    return;
                }

                timer_id = Log.DebugTimerStart();

                user_job = new UserJob(Title, Catalog.GetString("Scanning for media"));
                user_job.SetResources(Resource.Cpu, Resource.Disk, Resource.Database);
                user_job.PriorityHints    = PriorityHints.SpeedSensitive | PriorityHints.DataLossIfStopped;
                user_job.IconNames        = new string [] { "system-search", "gtk-find" };
                user_job.CancelMessage    = CancelMessage;
                user_job.CanCancel        = true;
                user_job.CancelRequested += OnCancelRequested;

                if (!KeepUserJobHidden)
                {
                    user_job.Register();
                }
            }
        }
Example #6
0
        private void OnGetTagFromFingerprint(object sender, EventArgs args)
        {
            active = true;
            Source source = ServiceManager.SourceManager.ActiveSource;

            UserJob job = new UserJob(AddinManager.CurrentLocalizer.GetString("Getting sound fingerprint"));

            job.SetResources(Resource.Cpu, Resource.Disk, Resource.Database);
            job.PriorityHints    = PriorityHints.SpeedSensitive;
            job.Status           = AddinManager.CurrentLocalizer.GetString("Scanning...");
            job.IconNames        = new string [] { "system-search", "gtk-find" };
            job.CanCancel        = true;
            job.CancelRequested += HandleJobCancelRequested;
            job.Register();

            if (account == null)
            {
                account = new LastfmAccount();
                LoginDialog dialog = new LoginDialog(account, true);
                dialog.Run();
                dialog.Destroy();
            }

            //comment the timeout system for TOS because still have issue and not seems to be linked...
            //System.DateTime start = System.DateTime.MinValue;
            ThreadPool.QueueUserWorkItem(delegate {
                try {
                    var selection = ((ITrackModelSource)source).TrackModel.Selection;
                    int total     = selection.Count;
                    int count     = 0;

                    foreach (TrackInfo track in ((ITrackModelSource)source).TrackModel.SelectedItems)
                    {
                        if (!active)
                        {
                            break;
                        }
                        if (String.IsNullOrEmpty(track.Uri.AbsolutePath))
                        {
                            continue;
                        }
                        ad = new AudioDecoder((int)track.Duration.TotalSeconds);
                        //respect last fm term of service :
                        //You will not make more than 5 requests per originating IP address per second, averaged over a 5 minute period
                        // 2 requests are done on each loop ==> time allowed by loop : 400ms

                        /*if (start != System.DateTime.MinValue) {
                         *  TimeSpan span = System.DateTime.Now - start;
                         *  if (lastFmTOSMinTimeout > span)
                         *      Thread.Sleep (lastFmTOSMinTimeout - span);
                         * }
                         * start = DateTime.Now;
                         */
                        byte[] fingerprint         = ad.Decode(track.Uri.AbsolutePath);
                        FingerprintRequest request = new FingerprintRequest();
                        request.Send(track, fingerprint, account);

                        int fpid = request.GetFpId();
                        //force GC to dispose
                        ad = null;

                        Log.DebugFormat("Last.fm fingerprint id for {0} is {1}", track.TrackTitle, fpid);

                        if (fpid > 0)
                        {
                            FetchMetadata(track, fpid);
                        }
                        else
                        {
                            Log.WarningFormat("Could not find fingerprint id for the track {0} !", track.TrackTitle);
                        }

                        job.Progress = (double)++count / (double)total;
                    }
                } catch (Exception e) {
                    account = null;
                    Log.Exception(e);
                } finally {
                    job.Finish();
                }
            });
        }
        private void RefreshMetadataThread(object state)
        {
            int total = ServiceManager.DbConnection.Query <int> ("SELECT count(*) FROM CoreTracks");

            if (total <= 0)
            {
                return;
            }

            UserJob job = new UserJob(Catalog.GetString("Refreshing Metadata"));

            job.SetResources(Resource.Cpu, Resource.Disk, Resource.Database);
            job.PriorityHints = PriorityHints.SpeedSensitive;
            job.Status        = Catalog.GetString("Scanning...");
            job.IconNames     = new string [] { "system-search", "gtk-find" };
            job.Register();

            HyenaSqliteCommand select_command = new HyenaSqliteCommand(
                String.Format(
                    "SELECT {0} FROM {1} WHERE {2}",
                    DatabaseTrackInfo.Provider.Select,
                    DatabaseTrackInfo.Provider.From,
                    DatabaseTrackInfo.Provider.Where
                    )
                );

            int count = 0;

            using (System.Data.IDataReader reader = ServiceManager.DbConnection.Query(select_command)) {
                while (reader.Read())
                {
                    DatabaseTrackInfo track = null;
                    try {
                        track = DatabaseTrackInfo.Provider.Load(reader);

                        if (track != null && track.Uri != null && track.Uri.IsFile)
                        {
                            try {
                                TagLib.File file = StreamTagger.ProcessUri(track.Uri);
                                StreamTagger.TrackInfoMerge(track, file, true);
                            } catch (Exception e) {
                                Log.Warning(String.Format("Failed to update metadata for {0}", track),
                                            e.GetType().ToString(), false);
                            }

                            track.Save(false);
                            track.Artist.Save();
                            track.Album.Save();

                            job.Status = String.Format("{0} - {1}", track.DisplayArtistName, track.DisplayTrackTitle);
                        }
                    } catch (Exception e) {
                        Log.Warning(String.Format("Failed to update metadata for {0}", track), e.ToString(), false);
                    }

                    job.Progress = (double)++count / (double)total;
                }
            }

            if (ServiceManager.DbConnection.Query <int> ("SELECT count(*) FROM CoreConfiguration WHERE Key = 'MetadataVersion'") == 0)
            {
                Execute(String.Format("INSERT INTO CoreConfiguration (EntryID, Key, Value) VALUES (null, 'MetadataVersion', {0})", CURRENT_METADATA_VERSION));
            }
            else
            {
                Execute(String.Format("UPDATE CoreConfiguration SET Value = {0} WHERE Key = 'MetadataVersion'", CURRENT_METADATA_VERSION));
            }

            job.Finish();
            ServiceManager.SourceManager.MusicLibrary.NotifyTracksChanged();
        }