Daap.Track.FromPlaylistNode C# (CSharp) 메소드

FromPlaylistNode() 정적인 개인적인 메소드

static private FromPlaylistNode ( Daap.Database db, ContentNode node, Track &track, int &containerId ) : void
db Daap.Database
node ContentNode
track Track
containerId int
리턴 void
        internal static void FromPlaylistNode(Database db, ContentNode node, out Track track, out int containerId)
        {
            track = null;
            containerId = 0;

            foreach (ContentNode field in (ContentNode[]) node.Value) {
                switch (field.Name) {
                case "dmap.itemid":
                    track = db.LookupTrackById ((int) field.Value);
                    break;
                case "dmap.containeritemid":
                    containerId = (int) field.Value;
                    break;
                default:
                    break;
                }
            }
        }

Usage Example

예제 #1
0
        private void RefreshPlaylists(string revquery)
        {
            byte[] playlistsData;

            try {
                playlistsData = client.Fetcher.Fetch(String.Format("/databases/{0}/containers", id), revquery);
            } catch (WebException) {
                return;
            }

            ContentNode playlistsNode = ContentParser.Parse(client.Bag, playlistsData);

            if (IsUpdateResponse(playlistsNode))
            {
                return;
            }

            // handle playlist additions/changes
            List <int> plids = new List <int> ();

            foreach (ContentNode playlistNode in (ContentNode[])playlistsNode.GetChild("dmap.listing").Value)
            {
                Playlist pl = Playlist.FromNode(playlistNode);

                if (pl != null)
                {
                    plids.Add(pl.Id);
                    Playlist existing = LookupPlaylistById(pl.Id);

                    if (existing == null)
                    {
                        AddPlaylist(pl);
                    }
                    else
                    {
                        existing.Update(pl);
                    }
                }
            }

            // delete playlists that no longer exist
            foreach (Playlist pl in new List <Playlist> (playlists))
            {
                if (!plids.Contains(pl.Id))
                {
                    RemovePlaylist(pl);
                }
            }

            plids = null;

            // add/remove tracks in the playlists
            foreach (Playlist pl in playlists)
            {
                byte [] playlistTracksData = client.Fetcher.Fetch(String.Format(
                                                                      "/databases/{0}/containers/{1}/items", id, pl.Id), String.Format("meta=dmap.itemid,dmap.containeritemid&{0}", revquery)
                                                                  );
                ContentNode playlistTracksNode = ContentParser.Parse(client.Bag, playlistTracksData);

                if (IsUpdateResponse(playlistTracksNode))
                {
                    return;
                }

                if ((byte)playlistTracksNode.GetChild("dmap.updatetype").Value == 1)
                {
                    // handle playlist track deletions
                    ContentNode deleteList = playlistTracksNode.GetChild("dmap.deletedidlisting");

                    if (deleteList != null)
                    {
                        foreach (ContentNode deleted in (ContentNode[])deleteList.Value)
                        {
                            int index = pl.LookupIndexByContainerId((int)deleted.Value);

                            if (index < 0)
                            {
                                continue;
                            }

                            pl.RemoveAt(index);
                        }
                    }
                }

                // add new tracks, or reorder existing ones

                int plindex = 0;
                foreach (ContentNode plTrackNode in (ContentNode[])playlistTracksNode.GetChild("dmap.listing").Value)
                {
                    Track pltrack     = null;
                    int   containerId = 0;
                    Track.FromPlaylistNode(this, plTrackNode, out pltrack, out containerId);

                    if (pl[plindex] != null && pl.GetContainerId(plindex) != containerId)
                    {
                        pl.RemoveAt(plindex);
                        pl.InsertTrack(plindex, pltrack, containerId);
                    }
                    else if (pl[plindex] == null)
                    {
                        pl.InsertTrack(plindex, pltrack, containerId);
                    }

                    plindex++;
                }
            }
        }