예제 #1
0
        public UserConfigStorage()
        {
            AppManager.Instance.UserManager.AfterGetData = AfterGetData;

            AppManager.Instance.UserManager.AfterSaved = user =>
            {
                var oldUser = usersList.FirstOrDefault(u => u.Id == user.Id);
                if (oldUser != null)
                {
                    usersList.Remove(oldUser);
                }
                usersList.Add((T)user);
                usersList.Save();
            };

            usersList.OnMerge += usersList_OnMerge;
        }
예제 #2
0
        protected virtual void DeleteTrackList (CachedList<DatabaseTrackInfo> list)
        {
            is_deleting = true;
            DeleteTrackJob.Total += (int) list.Count;
            List<DatabaseTrackInfo> skip_deletion = null;

            // Remove from file system
            foreach (DatabaseTrackInfo track in list) {
                if (track == null) {
                    DeleteTrackJob.Completed++;
                    continue;
                }

                try {
                    DeleteTrackJob.Status = String.Format ("{0} - {1}", track.ArtistName, track.TrackTitle);
                    if (!DeleteTrack (track)) {
                        if (skip_deletion == null) {
                            skip_deletion = new List<DatabaseTrackInfo> ();
                        }
                        skip_deletion.Add (track);
                    }
                } catch (Exception e) {
                    Log.Exception (e);
                    ErrorSource.AddMessage (e.Message, track.Uri.ToString ());
                }

                DeleteTrackJob.Completed++;
                if (DeleteTrackJob.Completed % 10 == 0 && !DeleteTrackJob.IsFinished) {
                    OnTracksDeleted ();
                }
            }

            is_deleting = false;

            if (DeleteTrackJob.Total == DeleteTrackJob.Completed) {
                delete_track_job.Finish ();
                delete_track_job = null;
            }

            if (skip_deletion != null) {
                list.Remove (skip_deletion);
                skip_deletion.Clear ();
                skip_deletion = null;
            }

            // Remove from database
            if (list.Count > 0) {
                ServiceManager.DbConnection.Execute (remove_list_command, DateTime.Now, list.CacheId, list.CacheId);
            }

            ThreadAssist.ProxyToMain (delegate {
                OnTracksDeleted ();
                OnUserNotifyUpdated ();
                OnUpdated ();
            });
        }
예제 #3
0
        protected virtual void DeleteTrackList(CachedList <DatabaseTrackInfo> list)
        {
            is_deleting           = true;
            DeleteTrackJob.Total += (int)list.Count;
            List <DatabaseTrackInfo> skip_deletion = null;

            // Remove from file system
            foreach (DatabaseTrackInfo track in list)
            {
                if (track == null)
                {
                    DeleteTrackJob.Completed++;
                    continue;
                }

                try {
                    DeleteTrackJob.Status = String.Format("{0} - {1}", track.ArtistName, track.TrackTitle);
                    if (!DeleteTrack(track))
                    {
                        if (skip_deletion == null)
                        {
                            skip_deletion = new List <DatabaseTrackInfo> ();
                        }
                        skip_deletion.Add(track);
                    }
                } catch (Exception e) {
                    Log.Exception(e);
                    ErrorSource.AddMessage(e.Message, track.Uri.ToString());
                }

                DeleteTrackJob.Completed++;
                if (DeleteTrackJob.Completed % 10 == 0 && !DeleteTrackJob.IsFinished)
                {
                    OnTracksDeleted();
                }
            }

            is_deleting = false;

            if (DeleteTrackJob.Total == DeleteTrackJob.Completed)
            {
                delete_track_job.Finish();
                delete_track_job = null;
            }

            if (skip_deletion != null)
            {
                list.Remove(skip_deletion);
                skip_deletion.Clear();
                skip_deletion = null;
            }

            // Remove from database
            if (list.Count > 0)
            {
                ServiceManager.DbConnection.Execute(remove_list_command, DateTime.Now, list.CacheId, list.CacheId);
            }

            ThreadAssist.ProxyToMain(delegate {
                OnTracksDeleted();
                OnUserNotifyUpdated();
                OnUpdated();
            });
        }