Exemple #1
0
 private void RemovePlaylistItemsInternal(DatabasePlaylist list)
 {
     foreach (var info in list.InfoItems)
     {
         resourcesDatabase.RemoveListFromItem(list, info);
     }
 }
Exemple #2
0
 public void UpdateIndex(DatabasePlaylist list, int offset)
 {
     if (!ContainingListInstances.ContainsKey(list))
     {
         throw new ArgumentException();
     }
     ContainingListInstances[list] = offset;
 }
Exemple #3
0
 public bool TryAdd(DatabasePlaylist list, int offset)
 {
     if (ContainingListInstances.ContainsKey(list))
     {
         return(false);
     }
     ContainingListInstances.Add(list, offset);
     return(true);
 }
Exemple #4
0
 // Returns the index of the resource in the list
 // O(log d)
 private bool TryGetIndexOfInternal(DatabasePlaylist playlist, AudioResource resource, out int index)
 {
     if (resourcesDatabase.TryGet(resource, out var info) && info.TryGetIndexIn(playlist, out index))
     {
         return(true);
     }
     index = 0;
     return(false);
 }
Exemple #5
0
            // Moves and updates the moved items' index, ignores values at target
            // O(n)
            private static int MoveBackwards(DatabasePlaylist playlist, List <UniqueResourceInfo> items, int begin, int end, int targetEnd)
            {
                while (begin != end)
                {
                    var item = items[--targetEnd] = items[--end];
                    item.UpdateIndex(playlist, targetEnd);
                }

                return(targetEnd);
            }
Exemple #6
0
        private bool TryGetInternal(string id, out DatabasePlaylist value)
        {
            if (playlistCache.TryGetValue(id, out var data))
            {
                value = data;
                return(true);
            }

            value = null;
            return(false);
        }
Exemple #7
0
        public bool GetOrCreateForListItem(AudioResource resource, DatabasePlaylist list, int index, out UniqueResourceInfo info)
        {
            if (uniqueSongs.TryGetValue(resource, out info))
            {
                return(info.TryAdd(list, index));
            }

            info = new UniqueResourceInfo(resource);
            info.TryAdd(list, index);
            uniqueSongs.Add(resource, info);
            return(true);
        }
Exemple #8
0
            // Moves and updates the moved items' index, ignores values at target
            // O(n)
            private static int Move(DatabasePlaylist playlist, List <UniqueResourceInfo> items, int begin, int end, int target)
            {
                while (begin != end)
                {
                    var item = items[target] = items[begin];
                    item.UpdateIndex(playlist, target);
                    target++;
                    begin++;
                }

                return(target);
            }
Exemple #9
0
        public void RemoveListFromItem(DatabasePlaylist list, UniqueResourceInfo info)
        {
            if (!info.RemoveList(list))
            {
                Log.Warn("Failed to remove song from database");
            }

            if (!info.IsContainedInAList)
            {
                uniqueSongs.Remove(info.Resource);
            }
        }
Exemple #10
0
        public bool CreatePlaylist(string listId, Uid owner)
        {
            lock (Lock) {
                var list = new DatabasePlaylist(listId, owner);
                if (io.TryGetRealId(listId, out _))
                {
                    return(false);
                }

                playlistCache.Add(listId, list);
                io.Write(listId, list);
                return(true);
            }
        }
Exemple #11
0
        private void AddPlaylistInternal(string id, IPlaylist list)
        {
            var items = new List <UniqueResourceInfo>(list.Count);
            var plist = new DatabasePlaylist(id, list.Owner, list.AdditionalEditors, items);

            for (var index = 0; index < list.Count; index++)
            {
                var item = list[index];
                if (resourcesDatabase.GetOrCreateForListItem(item, plist, index, out var info))
                {
                    items.Add(info);
                }
                else
                {
                    Log.Info($"Song {item.ResourceTitle} in playlist {id} at index {index} is already contained in this playlist, skipping");
                }
            }

            playlistCache.Add(id, plist);
        }
Exemple #12
0
            private static void RemoveIndices(DatabasePlaylist playlist, List <UniqueResourceInfo> items, IList <int> indices, int ibegin, int iend)
            {
                if (iend == ibegin)
                {
                    return;
                }

                int count = items.Count;
                int it    = indices[ibegin];

                for (int iit = ibegin; iit < iend; iit++)
                {
                    int next      = (iit + 1 == iend ? count : indices[iit + 1]);
                    int moveBegin = indices[iit] + 1;
                    int moveEnd   = next;

                    it = Move(playlist, items, moveBegin, moveEnd, it);
                }

                items.RemoveRange(it, items.Count - it);
            }
Exemple #13
0
 private void EditPlaylistAndWriteInteral(DatabasePlaylist list, Action <PlaylistEditor> editor)
 {
     editor(new PlaylistEditor(list, this));
     AfterPlaylistChanged(list);
 }
Exemple #14
0
 public PlaylistEditor(DatabasePlaylist playlist, PlaylistDatabase database)
 {
     this.playlist = playlist;
     this.database = database;
 }
Exemple #15
0
 public bool IsContainedIn(DatabasePlaylist list)
 {
     return(ContainingListInstances.ContainsKey(list));
 }
Exemple #16
0
 public bool RemoveList(DatabasePlaylist list)
 {
     return(ContainingListInstances.Remove(list));
 }
Exemple #17
0
 private void AfterPlaylistChanged(DatabasePlaylist playlist)
 {
     io.Write(playlist.Id, playlist);
 }
Exemple #18
0
 public bool TryGetIndexIn(DatabasePlaylist list, out int index)
 {
     return(ContainingListInstances.TryGetValue(list, out index));
 }
Exemple #19
0
 protected bool Equals(DatabasePlaylist other)
 {
     return(Id == other.Id);
 }