Exemplo n.º 1
0
 public void Reload()
 {
     model.Clear();
     ThreadAssist.SpawnFromMain(delegate {
         ThreadedFetch(0);
     });
 }
Exemplo n.º 2
0
 internal void TryClaim()
 {
     ThreadAssist.SpawnFromMain(() => {
         if (TryDeviceInitialize())
         {
             LoadDeviceContents();
         }
     });
 }
Exemplo n.º 3
0
 internal void TryInitialize ()
 {
     Log.DebugFormat ("PotentialSource: TryInitialize {0} as {1}", Device.Name, Claimant.Type);
     ThreadAssist.SpawnFromMain (() => {
         DapSource source;
         if (TryDeviceInitialize (false, out source)) {
             Service.SwapSource (this, source, false);
         }
     });
 }
Exemplo n.º 4
0
        private void OnAddToNewPlaylist(object o, EventArgs args)
        {
            // TODO generate name based on the track selection, or begin editing it
            PlaylistSource playlist = new PlaylistSource("New Playlist", ActivePrimarySource);

            playlist.Save();
            playlist.PrimarySource.AddChildSource(playlist);
            ThreadAssist.SpawnFromMain(delegate {
                playlist.AddSelectedTracks(ActiveSource);
            });
        }
        public void LoadAndPresentRecommendations()
        {
            ThreadAssist.SpawnFromMain(() => {
                recommended_artists = GetRecommendedArtists().ToList();
                ThreadAssist.ProxyToMain(PresentRecommendedArtists);

                var processor = new RecommendationProcessor(FillAdditionalInfo);
                processor.EnqueueArtists(recommended_artists);
                processor.ProcessAll();
            });
        }
Exemplo n.º 6
0
        protected override void DeleteSelectedTracks(DatabaseTrackListModel model)
        {
            if (model == null || model.Count < 1)
            {
                return;
            }

            ThreadAssist.SpawnFromMain(delegate {
                CachedList <DatabaseTrackInfo> list = CachedList <DatabaseTrackInfo> .CreateFromModelSelection(model);
                DeleteTrackList(list);
            });
        }
Exemplo n.º 7
0
        protected override void OnTracksAdded()
        {
            ThreadAssist.SpawnFromMain(delegate {
                Reload();

                TrackEventHandler handler = TracksAdded;
                if (handler != null)
                {
                    handler(this, new TrackEventArgs());
                }
            });
        }
Exemplo n.º 8
0
        private void Initialize(Client client)
        {
            Application.ClientStarted -= Initialize;

            var handler = Started;

            if (handler != null)
            {
                handler();
            }

            Application.RunTimeout(5 * 1000, delegate {
                if (BansheeMetrics.Instance == null)
                {
                    return(false);
                }

                ThreadAssist.SpawnFromMain(delegate {
                    metrics.AddDefaults();
                    AddMetrics();

                    if (ApplicationContext.CommandLine.Contains("debug-metrics"))
                    {
                        Log.InformationFormat("Anonymous usage data collected:\n{0}", metrics.ToJsonString());
                        System.IO.File.WriteAllText("usage-data.json", metrics.ToJsonString());
                    }

                    if (!ServiceManager.Get <Network> ().Connected)
                    {
                        return;
                    }

                    // Don't post to server more than every 48 hours
                    var last_post_time = DatabaseConfigurationClient.Client.Get <DateTime> (last_post_key, DateTime.MinValue);
                    var last_post_rel  = (DateTime.Now - last_post_time).TotalDays;
                    if (last_post_rel < 0 || last_post_rel > 4.0)
                    {
                        var poster  = new HttpPoster("http://metrics.banshee.fm/submit/", metrics);
                        bool posted = poster.Post();
                        Log.InformationFormat("Posted usage data? {0}", posted);

                        // Clear the old metrics, even if we failed to post them; it might be a server-side
                        // problem w/ the data we want to send (eg too big, out of space) and we don't want
                        // to keep retrying to send the same data.
                        metrics.Store.Clear();
                        DatabaseConfigurationClient.Client.Set <DateTime> (last_post_key, DateTime.Now);
                    }
                });

                return(false);
            });
        }
Exemplo n.º 9
0
 public void Sync()
 {
     if (ThreadAssist.InMainThread)
     {
         ThreadAssist.SpawnFromMain(delegate {
             sync_limiter.Execute();
         });
     }
     else
     {
         sync_limiter.Execute();
     }
 }
Exemplo n.º 10
0
        public override void DeleteTracks(DatabaseTrackListModel model, Selection selection)
        {
            if (model == null || model.Count < 1)
            {
                return;
            }

            var list = CachedList <DatabaseTrackInfo> .CreateFromModelAndSelection(model, selection);

            ThreadAssist.SpawnFromMain(delegate {
                DeleteTrackList(list);
            });
        }
Exemplo n.º 11
0
        protected override void OnTracksDeleted()
        {
            ThreadAssist.SpawnFromMain(delegate {
                PruneArtistsAlbums();
                Reload();

                TrackEventHandler handler = TracksDeleted;
                if (handler != null)
                {
                    handler(this, new TrackEventArgs());
                }

                SkipTrackIfRemoved();
            });
        }
Exemplo n.º 12
0
        private void OnRemoveTracks(object o, EventArgs args)
        {
            ITrackModelSource source = ActiveSource as ITrackModelSource;

            if (!ConfirmRemove(source, false, source.TrackModel.Selection.Count))
            {
                return;
            }

            if (source != null && source.CanRemoveTracks)
            {
                ThreadAssist.SpawnFromMain(delegate {
                    source.RemoveSelectedTracks();
                });
            }
        }
        private static void OnUpdated(object o, ExtensionNodeEventArgs args)
        {
            TypeExtensionNode node = (TypeExtensionNode)args.ExtensionNode;

            if (args.Change == ExtensionChange.Add)
            {
                provider = (BaseLocationProvider)node.CreateInstance();
                ThreadAssist.SpawnFromMain(() => {
                    RefreshGeoPosition();
                    NotifyObservers();
                });
            }
            else
            {
                provider = null;
            }
        }
        public void SaveLyrics(TrackInfo track, string lyrics, bool rewrite)
        {
            if (!IsLyricsOk(lyrics))
            {
                /*update the db always */
                LyricsManager.Instance.UpdateDB(track, lyrics);
                return;
            }

            ThreadAssist.SpawnFromMain(delegate {
                if (rewrite)
                {
                    cache.DeleteLyrics(track);
                }
                Save(track, lyrics);
                LyricsManager.Instance.UpdateDB(track, lyrics);
            });
        }
Exemplo n.º 15
0
        public void DeleteAllTracks(AbstractPlaylistSource source)
        {
            if (source.PrimarySource != this)
            {
                Log.WarningFormat("Cannot delete all tracks from {0} via primary source {1}", source, this);
                return;
            }

            if (source.Count < 1)
            {
                return;
            }

            ThreadAssist.SpawnFromMain(delegate {
                CachedList <DatabaseTrackInfo> list = CachedList <DatabaseTrackInfo> .CreateFromModel(source.DatabaseTrackModel);
                DeleteTrackList(list);
            });
        }
        /*
         * Get the lyrics for the current track
         */
        public void FetchLyrics(TrackInfo track)
        {
            string lyrics     = null;
            string error      = null;
            string suggestion = null;

            LoadStarted(null, null);

            ThreadAssist.SpawnFromMain(delegate {
                try {
                    if (cache.IsInCache(track))
                    {
                        lyrics = cache.ReadLyrics(track);
                    }
                    else
                    {
                        lyrics = DownloadLyrics(track);
                    }

                    if (IsLyricsOk(lyrics))
                    {
                        Save(track, lyrics);
                    }
                    else
                    {
                        suggestion = GetSuggestions(track);
                    }

                    if (LyricOutOfDate(track))
                    {
                        return;
                    }
                } catch (Exception e) {
                    Log.DebugException(e);
                    error = e.Message;
                }

                ThreadAssist.ProxyToMain(delegate {
                    LoadFinished(this, new LoadFinishedEventArgs(lyrics, suggestion, error));
                });
            });
        }
Exemplo n.º 17
0
        private void OnRemoveTracksFromLibrary(object o, EventArgs args)
        {
            ITrackModelSource source = ActiveSource as ITrackModelSource;

            if (source != null)
            {
                LibrarySource library = source.Parent as LibrarySource;
                if (library != null)
                {
                    if (!ConfirmRemove(library, false, Selection.Count))
                    {
                        return;
                    }

                    ThreadAssist.SpawnFromMain(delegate {
                        library.RemoveTracks(source.TrackModel as DatabaseTrackListModel, Selection);
                    });
                }
            }
        }
        /// <summary>
        /// Catch PlayerEvent and schedule new lastfm query, as long as current Artist is not the last artist queried
        /// </summary>
        /// <param name="args">
        /// A <see cref="PlayerEventArgs"/>
        /// </param>
        private static void OnPlayerEvent(PlayerEventArgs args)
        {
            DatabaseTrackInfo currentTrack = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;

            if (currentTrack == null)
            {
                return;
            }

            long currentArtistId = currentTrack.ArtistId;

            if (ServiceManager.PlayerEngine.ActiveEngine.CurrentState == PlayerState.Playing && !processedArtists.Contains(currentArtistId))
            {
                if (!weightedRandom.Contains(currentArtistId))
                {
                    // User changed Track to a not similar artist, clear list
                    Log.Debug("RandomByLastfmSimilarArtists: User changed track, clearing lists and resetting depth");
                    weightedRandom.Clear();
                    weightedRandom.Add(currentArtistId, 1d);
                }

                lock (searchActive_lock) {
                    if (searchActive)
                    {
                        Log.Debug("RandomByLastfmSimilarArtists: Another Query is already running, aborting");
                        return;
                    }
                    else
                    {
                        searchActive = true;
                    }
                }

                ThreadAssist.SpawnFromMain(delegate {
                    QueryLastfm();
                    lock (searchActive_lock) {
                        searchActive = false;
                    }
                });
            }
        }
Exemplo n.º 19
0
        protected override void OnTracksChanged(params QueryField [] fields)
        {
            ThreadAssist.SpawnFromMain(delegate {
                if (NeedsReloadWhenFieldsChanged(fields))
                {
                    Reload();
                }
                else
                {
                    InvalidateCaches();
                }

                System.Threading.Thread.Sleep(150);

                TrackEventHandler handler = TracksChanged;
                if (handler != null)
                {
                    handler(this, new TrackEventArgs(fields));
                }
            });
        }
Exemplo n.º 20
0
 public void FetchMore()
 {
     ThreadAssist.SpawnFromMain(delegate {
         ThreadedFetch(search.Page + 1);
     });
 }
Exemplo n.º 21
0
 private void OnAddToExistingPlaylist(object o, EventArgs args)
 {
     ThreadAssist.SpawnFromMain(delegate {
         ((PlaylistMenuItem)o).Playlist.AddSelectedTracks(ActiveSource);
     });
 }
 internal new void InvalidateCaches()
 {
     ThreadAssist.SpawnFromMain(delegate {
         base.InvalidateCaches();
     });
 }
        protected virtual void OnTransferStateChanged(object sender, TransferEventArgs args)
        {
            Log.DebugFormat("OnTransferStateChanged: {0}", args.State.ToString());

            switch (args.State)
            {
            case TransferState.Queued:
                total++;
                break;

            case TransferState.Ready:
                ThreadAssist.SpawnFromMain(delegate {
                    StartReady();
                });

                break;

            case TransferState.InProgress:
                bytes_expected += args.BytesExpected;
                in_progress++;
                break;

            case TransferState.Completed:
            case TransferState.Cancelled:
            case TransferState.Failed:
                T t = sender as T;
                CleanUpTransfer(t);

                bool start = true;
                if (args.State == TransferState.Completed)
                {
                    OnTransferCompleted(t, EventArgs.Empty);
                }
                else if (args.State == TransferState.Cancelled && args.BytesTransferred == 0)
                {
                    start = false;
                }
                else if ((args.State == TransferState.Cancelled || args.State == TransferState.Failed) && args.BytesTransferred > 0)
                {
                    bytes_expected    -= args.BytesExpected;
                    bytes_transferred -= args.BytesTransferred;
                }

                if (args.BytesTransferred > 0)
                {
                    in_progress--;
                }

                if (initiated.Contains(t.Key))
                {
                    initiated.Remove(t.Key);
                }

                total--;

                if (start)
                {
                    ThreadAssist.SpawnFromMain(delegate {
                        StartReady();
                    });
                }
                break;
            }

            OnUpdated();

            if (in_progress == 0 && total == 0)
            {
                bytes_expected    = 0;
                bytes_transferred = 0;
                OnCompleted(EventArgs.Empty);
            }
        }
Exemplo n.º 24
0
 private void Load()
 {
     ThreadAssist.SpawnFromMain(ThreadedLoad);
 }
Exemplo n.º 25
0
        public override void LoadPath(string path, string suggestedFilename, System.Action finishedCallback)
        {
            lock (this) {
                // One document per window
                if (loading || Document != null)
                {
                    new Client().LoadPath(path, suggestedFilename);
                    return;
                }

                loading = true;
            }

            if (!path.StartsWith("file://"))
            {
                path = System.IO.Path.GetFullPath(path);
            }

            Configuration.LastOpenFolder = System.IO.Path.GetDirectoryName(suggestedFilename ?? path);
            status_label.Text            = Catalog.GetString("Loading document...");

            ThreadAssist.SpawnFromMain(delegate {
                try {
                    Document = new Document();
                    Document.Load(path, PasswordProvider, suggestedFilename != null);
                    if (suggestedFilename != null)
                    {
                        Document.SuggestedSavePath = suggestedFilename;
                    }

                    ThreadAssist.BlockingProxyToMain(delegate {
                        IconView.SetDocument(Document);
                        BookmarkView.SetDocument(Document);
                        RecentManager.Default.AddItem(Document.Uri);

                        Document.Changed += UpdateForDocument;
                        UpdateForDocument();
                        OnDocumentLoaded();
                    });
                } catch (Exception e) {
                    Document = null;
                    ThreadAssist.BlockingProxyToMain(delegate {
                        status_label.Text = "";
                        if (e is System.IO.FileNotFoundException)
                        {
                            try {
                                RecentManager.Default.RemoveItem(new Uri(path).AbsoluteUri);
                            } catch {}
                        }
                    });

                    Hyena.Log.Exception(e);
                    Hyena.Log.Error(
                        Catalog.GetString("Error Loading Document"),
                        String.Format(Catalog.GetString("There was an error loading {0}"), GLib.Markup.EscapeText(path ?? "")), true
                        );
                } finally {
                    lock (this) {
                        loading = false;
                    }

                    if (finishedCallback != null)
                    {
                        finishedCallback();
                    }
                }
            });
        }
Exemplo n.º 26
0
 public void DelayedInitialize()
 {
     ThreadAssist.SpawnFromMain(ThreadedInitialize);
 }
Exemplo n.º 27
0
 private void HandleSelectionChanged(object sender, EventArgs args)
 {
     ThreadAssist.SpawnFromMain(ReloadBrowsingModel);
 }
Exemplo n.º 28
0
 internal void UnmapDevice(string uuid)
 {
     ThreadAssist.SpawnFromMain(() => Unmap(uuid));
 }
Exemplo n.º 29
0
 // FIXME filter
 private void OnRateSelectedTracks(object o, EventArgs args)
 {
     ThreadAssist.SpawnFromMain(delegate {
         ((DatabaseSource)ActiveSource).RateSelectedTracks(selected_tracks_rating_proxy.LastRating);
     });
 }
        public void DelayedInitialize()
        {
            download_manager       = new DownloadManager(2, tmp_download_path);
            download_manager_iface = new DownloadManagerInterface(download_manager);
            download_manager_iface.Initialize();

            feeds_manager = new FeedsManager(ServiceManager.DbConnection, download_manager, null);

            // Migrate data from 0.13.2 podcast tables, if they exist
            MigrateLegacyIfNeeded();

            // Move incomplete downloads to the new cache location
            try {
                MigrateDownloadCache();
            } catch (Exception e) {
                Hyena.Log.Exception("Couldn't migrate podcast download cache", e);
            }

            source = new PodcastSource();
            ServiceManager.SourceManager.AddSource(source);

            InitializeInterface();

            var preference = source.PreferencesPage["library-location"]["library-location"] as SchemaPreference <string>;

            preference.ValueChanged += delegate(Root obj) {
                feeds_manager.PodcastStorageDirectory = preference.Value;
            };

            ThreadAssist.SpawnFromMain(delegate {
                feeds_manager.PodcastStorageDirectory   = source.BaseDirectory;
                feeds_manager.FeedManager.ItemAdded    += OnItemAdded;
                feeds_manager.FeedManager.ItemChanged  += OnItemChanged;
                feeds_manager.FeedManager.ItemRemoved  += OnItemRemoved;
                feeds_manager.FeedManager.FeedsChanged += OnFeedsChanged;

                if (DatabaseConfigurationClient.Client.Get <int> ("Podcast", "Version", 0) < 7)
                {
                    Banshee.Library.LibrarySource music_lib = ServiceManager.SourceManager.MusicLibrary;
                    if (music_lib != null)
                    {
                        string old_path = Path.Combine(music_lib.BaseDirectory, "Podcasts");
                        string new_path = source.BaseDirectory;
                        SafeUri old_uri = new SafeUri(old_path);
                        SafeUri new_uri = new SafeUri(new_path);
                        if (old_path != null && new_path != null && old_path != new_path &&
                            Banshee.IO.Directory.Exists(old_path) && !Banshee.IO.Directory.Exists(new_path))
                        {
                            Banshee.IO.Directory.Move(new SafeUri(old_path), new SafeUri(new_path));
                            ServiceManager.DbConnection.Execute(String.Format(
                                                                    "UPDATE {0} SET LocalPath = REPLACE(LocalPath, ?, ?) WHERE LocalPath IS NOT NULL",
                                                                    FeedEnclosure.Provider.TableName), old_path, new_path);
                            ServiceManager.DbConnection.Execute(String.Format(
                                                                    "UPDATE CoreTracks SET Uri = REPLACE ({0}, ?, ?)" +
                                                                    "WHERE {0} LIKE 'file://%' AND PrimarySourceId = ?",
                                                                    Banshee.Query.BansheeQuery.UriField.Column),
                                                                old_uri.AbsoluteUri, new_uri.AbsoluteUri, source.DbId);
                            Hyena.Log.DebugFormat("Moved Podcasts from {0} to {1}", old_path, new_path);
                        }
                    }
                    DatabaseConfigurationClient.Client.Set <int> ("Podcast", "Version", 7);
                }

                ServiceManager.PlayerEngine.ConnectEvent(OnPlayerEvent, PlayerEvent.StateChange);
                ServiceManager.Get <DBusCommandService> ().ArgumentPushed += OnCommandLineArgument;

                RefreshFeeds();

                // Every 10 minutes try to refresh again
                refresh_timeout_id = Application.RunTimeout(1000 * 60 * 10, RefreshFeeds);

                ServiceManager.Get <Network> ().StateChanged += OnNetworkStateChanged;
            });

            source.UpdateFeedMessages();
        }