示例#1
0
 protected bool Equals(Link other)
 {
     return ToString().Equals(other.ToString());
 }
示例#2
0
 private void SetUserData(IntPtr userPtr)
 {
     CanonicalName = libspotify.sp_user_canonical_name(userPtr).PtrToString();
     DisplayName = libspotify.sp_user_display_name(userPtr).PtrToString();
     Link = new Link(UserPtr, LinkType.User);
 }
示例#3
0
        public static Link Create(string linkString)
        {
            var link = new Link(linkString);
            if (link.LinkPtr != IntPtr.Zero)
            {
                return link;
            }

            return null;
        }
示例#4
0
        private void SetTrackMetaData()
        {
            Name = libspotify.sp_track_name(TrackPtr).PtrToString();
            Length = (int)(libspotify.sp_track_duration(TrackPtr) / 1000M);

            AlbumPtr = libspotify.sp_track_album(TrackPtr);

            Artists = new List<string>();
            var artistCount = libspotify.sp_track_num_artists(TrackPtr);
            for (var i = 0; i < artistCount; i++)
            {
                var artistPtr = libspotify.sp_track_artist(TrackPtr, i);
                if (artistPtr != IntPtr.Zero)
                {
                    Artists.Add(libspotify.sp_artist_name(artistPtr).PtrToString());
                }
            }

            Link = new Link(TrackPtr, LinkType.Track);
        }
示例#5
0
 private void SetPlaylistInfo(IntPtr playlistPtr)
 {
     PlaylistType = libspotify.sp_playlist_type.SP_PLAYLIST_TYPE_PLAYLIST;
     Name = libspotify.sp_playlist_name(playlistPtr).PtrToString();
     TrackCount = libspotify.sp_playlist_num_tracks(playlistPtr);
     Description = libspotify.sp_playlist_get_description(PlaylistPtr).PtrToString();
     SubscriberCount = (int) libspotify.sp_playlist_num_subscribers(PlaylistPtr);
     IsInRam = libspotify.sp_playlist_is_in_ram(session.SessionPtr, PlaylistPtr);
     OfflineStatus = libspotify.sp_playlist_get_offline_status(session.SessionPtr, PlaylistPtr);
     Link = new Link(PlaylistPtr, LinkType.Playlist);
 }
示例#6
0
        public bool AddTrack(Link trackLink)
        {
            LoadTracks();

            var trackPtr = libspotify.sp_link_as_track(trackLink.LinkPtr);
            if (trackPtr == IntPtr.Zero)
            {
                return false;
            }
            var track = new Track(trackPtr, session);
            _logger.InfoFormat("Adding track: {0} to playlist: {1}", track.Name, Name);
            var tracksPtr = IntPtr.Zero;

            var array = new int[1];
            array[0] = (int)track.TrackPtr;

            var size = Marshal.SizeOf(tracksPtr) * array.Length;
            tracksPtr = Marshal.AllocHGlobal(size);
            Marshal.Copy(array, 0, tracksPtr, array.Length);
            libspotify.sp_playlist_add_tracks(PlaylistPtr, tracksPtr, 1, TrackCount, session.SessionPtr);
            return true;
        }
示例#7
0
 public Playlist GetPlaylist(Link playlistLink)
 {
     return playlistContainer.Playlists.FirstOrDefault(playlistInfo => playlistInfo.Link.Equals(playlistLink));
 }
示例#8
0
        public bool SetCurrentPlaylist(Link playlistLink)
        {
            var playlist = GetPlaylist(playlistLink);

            if (playlist == null)
            {
                libspotify.sp_playlistcontainer_add_playlist(playlistContainer.PlaylistContainerPtr, playlistLink.LinkPtr);
                Wait.For(() =>
                {
                    playlist = GetPlaylist(playlistLink);
                    return playlist != null;
                });
            }

            if (playlist == null)
            {
                return false;
            }

            if (currentPlaylist != null)
            {
                currentPlaylist.playlistChanged = null;
            }

            currentPlaylist = playlist;
            _logger.InfoFormat("Current playlist set to: {0}", currentPlaylist.Name);
            currentPlaylist.playlistChanged = PlaylistChanged;
            PlaylistChanged(currentPlaylist);
            return true;
        }