コード例 #1
0
        public static async Task <SavingError> SaveSpotifyTrackLevel2(SimpleTrack track, FullAlbum album)
        {
            var result = await SaveSpotifyTrackLevel3(track, album);

            ShowResults(result, track.Name);
            return(result);
        }
コード例 #2
0
ファイル: ActionDataConverter.cs プロジェクト: Clemon-R/Area
        private object ListPlaylistTracksToListTracks(object data, IServiceProvider serviceProvider, Models.Account user)
        {
            List <PlaylistTrack> playlistTracks = data as List <PlaylistTrack>;
            List <SimpleTrack>   tracks         = new List <SimpleTrack>();
            SpotifyService       service        = (SpotifyService)serviceProvider.GetService(typeof(SpotifyService));
            SpotifyWebAPI        api            = service.GetSpotifyWebApi(service.GetSpotifyToken(user));

            Console.WriteLine("Adding tracks from playlist");
            for (int i = 0; i < playlistTracks.Count; i++)
            {
                Console.WriteLine("Adding track " + playlistTracks[i].Track.Name);
                SimpleTrack track = new SimpleTrack();

                track.Artists          = playlistTracks[i].Track.Artists;
                track.AvailableMarkets = playlistTracks[i].Track.AvailableMarkets;
                track.DiscNumber       = playlistTracks[i].Track.DiscNumber;
                track.DurationMs       = playlistTracks[i].Track.DurationMs;
                track.Error            = playlistTracks[i].Track.Error;
                track.Explicit         = playlistTracks[i].Track.Explicit;
                track.ExternUrls       = playlistTracks[i].Track.ExternUrls;
                track.Href             = playlistTracks[i].Track.Href;
                track.Id           = playlistTracks[i].Track.Id;
                track.Name         = playlistTracks[i].Track.Name;
                track.PreviewUrl   = playlistTracks[i].Track.PreviewUrl;
                track.Restrictions = playlistTracks[i].Track.Restrictions;
                track.TrackNumber  = playlistTracks[i].Track.TrackNumber;
                track.Type         = playlistTracks[i].Track.Type;
                track.Uri          = playlistTracks[i].Track.Uri;

                tracks.Add(track);
            }
            return(tracks as object);
        }
コード例 #3
0
        public void downloadPreview(SimpleTrack track)
        {
            filename = AppContext.BaseDirectory + "spotify\\" + track.Name + ".mp3";

            preview = track;

            if (File.Exists(filename))
            {
                return;
            }

            try
            {
                using (var client = new WebClient())
                {
                    client.DownloadFile(track.PreviewUrl + ".mp3", filename);
                }
            }
            catch (System.Net.WebException e)
            {
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    MessageBox.Show("Spotify messed up");
                }
            }
        }
コード例 #4
0
 public SpotifyTrackInfo(SimpleTrack simpleTrack)
 {
     this.Artists          = simpleTrack.Artists;
     this.AvailableMarkets = simpleTrack.AvailableMarkets;
     this.DiscNumber       = simpleTrack.DiscNumber;
     this.Duration         = TimeSpan.FromMilliseconds(simpleTrack.DurationMs);
     this.Explicit         = simpleTrack.Explicit;
     this.ExternUrls       = new Dictionary <string, Uri>(
         simpleTrack.ExternUrls
         .Select(pair => new KeyValuePair <string, Uri>(pair.Key, new Uri(pair.Value))));    // Convert value to URI
     this.Id          = simpleTrack.Id;
     this.Name        = simpleTrack.Name;
     this.PreviewUrl  = simpleTrack.PreviewUrl;
     this.TrackNumber = simpleTrack.TrackNumber;
     this.Type        = simpleTrack.Type;
     try
     {
         this.Uri = this.ExternUrls["spotify"];
     }
     catch (KeyNotFoundException) // Should never fail
     {
         // Convert Spotify URI to a track link (wont link track to playlist or album if it was linked)
         this.Uri = new Uri($"https://open.spotify.com/track/{this.Id}");
     }
 }
コード例 #5
0
        public string GetArtistName(SimpleTrack track)
        {
            string result = string.Empty;

            foreach (var artist in track.Artists)
            {
                result += artist.Name + ", ";
            }
            return(result);
        }
コード例 #6
0
ファイル: VideoMetadata.cs プロジェクト: rednir/wow2
        public VideoMetadata(SimpleTrack spotifyTrack)
        {
            string artist = spotifyTrack.Artists.FirstOrDefault()?.Name;

            LookupTitleOnYoutube = true;
            Title      = string.IsNullOrWhiteSpace(artist) ? spotifyTrack.Name : $"{artist} - {spotifyTrack.Name}";
            Uploader   = "Spotify";
            WebpageUrl = "https://open.spotify.com/track/" + spotifyTrack.Id;
            Extractor  = "spotify";
            Duration   = spotifyTrack.DurationMs / 1000;
        }
コード例 #7
0
        public static Song ToSong(this SimpleTrack track)
        {
            var song = new Song
            {
                ProviderId  = "spotify." + track.Id,
                Name        = track.Name.Trim().Replace("  ", " "),
                TrackNumber = track.TrackNumber
            };

            return(song);
        }
コード例 #8
0
        public static TrackViewModel FromSimpleTrack(SimpleTrack track, DateTime?playedAt = null)
        {
            var authorNames = track.Artists.Select(a => a.Name);

            return(new TrackViewModel
            {
                Id = track.Id,
                Name = track.Name,
                Author = string.Join(", ", authorNames),
                Album = track.Type, /// а где альбом
                PlayedAt = playedAt,
            });
        }
コード例 #9
0
        private static async Task <SaveResults> SaveSpotifyTrackLevel4(SimpleTrack track, FullAlbum album)
        {
            try
            {
                if (track == null)
                {
                    return new SaveResults()
                           {
                               Error = SavingError.Unknown
                           }
                }
                ;
                var preparedSong = track.ToSong();
                if (App.Locator.CollectionService.SongAlreadyExists(track.Name, album.Name, album.Artist != null ? album.Artist.Name : track.Artist.Name))
                {
                    return new SaveResults()
                           {
                               Error = SavingError.AlreadyExists
                           }
                }
                ;

                var fullTrack = track as FullTrack ?? await App.Locator.Spotify.GetTrack(track.Id);

                var artist = fullTrack != null ? fullTrack.Artist : ((track.Artist != null) ? track.Artist : new SimpleArtist {
                    Name = "Unknown Artist"
                });
                preparedSong.ArtistName          = fullTrack != null ? fullTrack.Artist.Name : artist.Name;
                preparedSong.Album               = album.ToAlbum();
                preparedSong.Artist              = fullTrack != null ? (new Data.Collection.Model.Artist {
                    Name = preparedSong.ArtistName.Trim().Replace("  ", ""), ProviderId = "spotify." + album.Artist.Id
                }) : album.Artist.ToArtist();
                preparedSong.Album.PrimaryArtist = preparedSong.Artist;
                await App.Locator.CollectionService.AddSongAsync(preparedSong).ConfigureAwait(false);

                CollectionHelper.MatchSong(preparedSong);
                return(new SaveResults()
                {
                    Error = SavingError.None, Song = preparedSong
                });
            }
            catch
            {
                return(new SaveResults()
                {
                    Error = SavingError.Unknown
                });
            }
        }
コード例 #10
0
        private WebSong CreateSong(SimpleTrack track)
        {
            var song = new WebSong(GetType())
            {
                Title       = track.Name,
                Token       = track.Id,
                IsPartial   = true,
                TrackNumber = (uint)track.TrackNumber,
                DiskNumber  = (uint)track.DiscNumber
            };

            var full = track as FullTrack;

            if (full != null)
            {
                song.IsPartial = false;

                if (full.Artists != null)
                {
                    song.Artists = full.Artists.Select(CreateArtist).ToList();
                }
                else
                {
                    song.IsPartial = true;
                }

                if (full.Album != null)
                {
                    song.Album = CreateAlbum(full.Album);
                }
                else
                {
                    song.IsPartial = true;
                }
            }
            else
            {
                if (track.Artist != null)
                {
                    song.Artists = new List <WebArtist> {
                        CreateArtist(track.Artist)
                    }
                }
                ;
            }

            return(song);
        }
コード例 #11
0
ファイル: TrackModel.cs プロジェクト: Web-Env/Shufl.API
        private static async Task <List <TrackArtist> > MapTrackArtistsAsync(
            SimpleTrack track,
            HashSet <string> albumArtistsSpotifyIds,
            IEnumerable <Artist> albumArtists,
            IRepositoryManager repositoryManager,
            IMapper mapper,
            SpotifyAPICredentials spotifyAPICredentials)
        {
            List <TrackArtist> trackArtists            = new List <TrackArtist>();
            List <string>      trackArtistsToBeCreated = new List <string>();
            var trackArtistSpotifyIds = track.Artists.Select(a => a.Id).ToHashSet();

            foreach (var trackArtist in track.Artists)
            {
                if (albumArtistsSpotifyIds.Contains(trackArtist.Id))
                {
                    var albumArtist = albumArtists.Where(a => a.SpotifyId == trackArtist.Id).FirstOrDefault();

                    trackArtists.Add(new TrackArtist
                    {
                        ArtistId      = albumArtist.Id,
                        CreatedOn     = DateTime.Now,
                        LastUpdatedOn = DateTime.Now
                    });
                }
                else
                {
                    trackArtistsToBeCreated.Add(trackArtist.Id);
                }
            }

            if (trackArtistsToBeCreated.Count > 0)
            {
                var newArtists = await ArtistModel.FetchArtistsAsync(trackArtistsToBeCreated, spotifyAPICredentials);

                var artists = await ArtistModel.CreateOrFetchArtistAsync(newArtists, repositoryManager, mapper);

                trackArtists.AddRange(MapArtistsToTrackArtists(artists.Select(a => a.Id).ToList()));
            }

            return(trackArtists);
        }
コード例 #12
0
ファイル: WebSongConverter.cs プロジェクト: yakuz-a/Airstem
        public static WebSong CreateSong(SimpleTrack track)
        {
            var song = new WebSong()
            {
                Name = track.Name,
                Id   = track.Id,
            };


            if (track.Artist != null)
            {
                song.Artist = !string.IsNullOrEmpty(track.Artist.Name) ? track.Artist.Name : "Unknown Artist";
            }
            else
            {
                song.Artist = "Unknown Artist";
            }

            return(song);
        }
コード例 #13
0
    public void getAlbumInfo(Action <string> callback)
    {
        var currentAlbum = _spotify.GetAlbumTracks(lastLoadedID);

        if (currentAlbum.HasError())
        {
            callback("Something went wrong GetAlbumTracks");
            return;
        }
        FullTrack track = getCurrentSong();
        string    ret   = "Playing Album:";

        int count = currentAlbum.Items.Count;

        for (int i = 0; i < count; i++)
        {
            SimpleTrack item = currentAlbum.Items[i];

            ret += "\n";

            if (track.Id == item.Id)
            {
                ret += "* ";
            }

            ret += getArtistsString(item.Artists) + " - " + item.Name;

            if (count < maxItemsList && i + 1 == count)
            {
                callback(ret);
            }
            else if (i != 0 && i % maxItemsList == 0)
            {
                callback(ret);
                ret = "";
            }
        }
    }
コード例 #14
0
ファイル: SongSavingHelper.cs プロジェクト: yakuz-a/Airstem
        public static async Task SaveSpotifyTrackLevel2(SimpleTrack track, FullAlbum album)
        {
            if (!App.Locator.Setting.IsLoggedIn)
            {
                if (_warningCount > 0)
                {
                    ToastManager.ShowError("Login required.");
                    return;
                }
                await MessageHelpers.LoginRequired();

                _warningCount += 1;
            }
            var fTrack = track;

            App.Locator.PBar.IsEnable = true;
            try
            {
                track.Name        = track.Name.GetSongNameFromMain();
                track.Artist.Name = track.Artist.Name.GetArtistName();

                if (track.Name == "Unknown Track")
                {
                    track.Name = fTrack.Name;
                }
                if (track.Artist.Name == "Unknown Artist" && fTrack.Artist.Name != "Unknown Artist")
                {
                    track.Artist.Name = fTrack.Artist.Name;
                }

                await SpotifySavingHelper.SaveSpotifyTrackLevel2(track, album);
            }
            catch
            {
                await SpotifySavingHelper.SaveSpotifyTrackLevel2(track, album);
            }
            App.Locator.PBar.IsEnable = false;
        }
コード例 #15
0
        /// <summary>
        /// Displays the last song played from Spotify
        /// </summary>
        /// <param name="chatter">User that sent the message</param>
        public static async Task <string> SpotifyLastPlayedSongAsync(TwitchChatter chatter, SpotifyWebClient spotify)
        {
            SimpleTrack simpleTrack = await spotify.GetLastPlayedSongAsync();

            if (simpleTrack != null)
            {
                string artistName = "";

                foreach (SimpleArtist simpleArtist in simpleTrack.Artists)
                {
                    artistName += $"{simpleArtist.Name}, ";
                }

                artistName = artistName.ReplaceLastOccurrence(", ", "");

                return($"@{chatter.DisplayName} <-- Last played from Spotify: \"{simpleTrack.Name}\" by {artistName} "
                       + "https://open.spotify.com/track/" + simpleTrack.Id + " WARNING: This is currently a feature in BETA --> "
                       + "https://developer.spotify.com/documentation/web-api/reference/player/get-recently-played/");
            }
            else
            {
                return($"Nothing was played recently @{chatter.DisplayName}");
            }
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: sbloom82/SpotifyAPI-NET
        public static void ProcessDirectory(SpotifyWebAPI api, DirectoryInfo dir, int depth)
        {
            if (depth != 0)
            {
                depth--;
                foreach (DirectoryInfo di in dir.GetDirectories())
                {
                    ProcessDirectory(api, di, depth);
                }
                return;
            }

            string path = dir.FullName;

            string[] paths = path.Split(new char[] { Path.DirectorySeparatorChar });

            string artistName = paths[paths.Length - 2];
            string albumName  = paths[paths.Length - 1];

            Console.WriteLine($"Searching for {artistName} - {albumName}");

            List <KeyValuePair <FullAlbum, FullArtist> > albums = new List <KeyValuePair <FullAlbum, FullArtist> >();

            var search = GetArtistSearch(api, artistName);

            bool hasExactMatch      = false;
            bool hasQualifyingMatch = false;

            foreach (FullArtist a in search.Artists.Items)
            {
                List <SimpleAlbum> searchAlbums = GetArtistAlbums(api, a.Id);
                if (searchAlbums == null)
                {
                    continue;
                }

                foreach (SimpleAlbum album in searchAlbums)
                {
                    if (a.Name.Equals(artistName, StringComparison.InvariantCultureIgnoreCase) &&
                        album.Name.Equals(albumName, StringComparison.InvariantCultureIgnoreCase))
                    {
                        hasExactMatch = true;
                        break;
                    }
                    else if (
                        (artistName.StartsWith(a.Name, StringComparison.InvariantCultureIgnoreCase) || a.Name.StartsWith(artistName, StringComparison.InvariantCultureIgnoreCase)) &&
                        (albumName.StartsWith(album.Name, StringComparison.InvariantCultureIgnoreCase) || album.Name.StartsWith(albumName, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        hasQualifyingMatch = true;
                    }
                }

                foreach (SimpleAlbum album in searchAlbums)
                {
                    bool exactMatch =
                        a.Name.Equals(artistName, StringComparison.InvariantCultureIgnoreCase) &&
                        album.Name.Equals(albumName, StringComparison.InvariantCultureIgnoreCase);

                    bool qualifyingMatch =
                        (artistName.StartsWith(a.Name, StringComparison.InvariantCultureIgnoreCase) || a.Name.StartsWith(artistName, StringComparison.InvariantCultureIgnoreCase)) &&
                        (albumName.StartsWith(album.Name, StringComparison.InvariantCultureIgnoreCase) || album.Name.StartsWith(albumName, StringComparison.InvariantCultureIgnoreCase));

                    if (hasExactMatch)
                    {
                        if (!exactMatch)
                        {
                            continue;
                        }
                        Console.WriteLine("Exact Match");
                    }
                    else if (hasQualifyingMatch)
                    {
                        if (!qualifyingMatch)
                        {
                            continue;
                        }
                        Console.WriteLine("Qualifying Match");
                    }

                    Console.WriteLine($"#{albums.Count + 1} - {a.Name} - \"{album.Name}\" - {album.ReleaseDate} - {album.Type}");

                    FullAlbum fullAlbum = GetFullAlbum(api, album.Id);
                    albums.Add(new KeyValuePair <FullAlbum, FullArtist>(fullAlbum, a));
                    foreach (SimpleTrack track in fullAlbum.Tracks.Items)
                    {
                        Console.WriteLine($"      D:{track.DiscNumber} T:{track.TrackNumber} - {track.Name}, MS:{track.DurationMs}");
                    }
                }
            }

            FullAlbum  selectedAlbum  = null;
            FullArtist selectedArtist = null;

            if (albums.Count > 0)
            {
                Console.WriteLine("Type album number to accept album info");
                if (int.TryParse(Console.ReadLine(), out int id) && id > 0 && id <= albums.Count)
                {
                    selectedAlbum  = albums[id - 1].Key;
                    selectedArtist = albums[id - 1].Value;
                }
            }

            if (selectedAlbum != null)
            {
                string pictureFile = null;
                if (selectedAlbum.Images.Count > 0)
                {
                    Console.WriteLine("Downloading album images");
                    List <string> sizes = new List <string>()
                    {
                        "Small",
                        "Large"
                    };

                    foreach (string size in sizes)
                    {
                        Image i = selectedAlbum.Images.OrderBy(im => im.Height).FirstOrDefault(
                            im => size == "Small" ? im.Height <= 300 && im.Height > 64 : im.Height > 300);
                        if (i != null)
                        {
                            try
                            {
                                using (WebClient webClient = new WebClient())
                                {
                                    string name = "AlbumArt_" + size + ".jpg";
                                    if (File.Exists(Path.Combine(path, name)))
                                    {
                                        File.Delete(Path.Combine(path, name));
                                    }
                                    webClient.DownloadFile(i.Url, Path.Combine(path, name));
                                    if (pictureFile == null)
                                    {
                                        pictureFile = Path.Combine(path, name);
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("Error saving thumbnail: " + e.Message);
                            }
                        }
                    }
                }

                int index = -1;
                foreach (string file in Directory.EnumerateFiles(path, "*.mp3").OrderBy(f => f).ToList())
                {
                    if (selectedAlbum.Tracks.Items.Count > ++index)
                    {
                        SimpleTrack track = selectedAlbum.Tracks.Items[index];

                        string safeName = track.Name + ".mp3";
                        foreach (char c in Path.GetInvalidFileNameChars())
                        {
                            safeName = safeName.Replace(c, '_');
                        }
                        string moveTo = Path.Combine(Path.GetDirectoryName(file), $"{track.TrackNumber:00} {safeName}");
                        Console.WriteLine($"Updating {Path.GetFileName(file)} to {Path.GetFileName(moveTo)}");
                        try
                        {
                            File.Move(file, moveTo);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine($"Error: {e.Message}");
                        }

                        TagLib.File tagFile = TagLib.File.Create(moveTo);
                        tagFile.Tag.Title        = track.Name;
                        tagFile.Tag.Performers   = track.Artists.Select(a => a.Name).ToArray();
                        tagFile.Tag.AlbumArtists = new string[] { artistName };
                        tagFile.Tag.Album        = selectedAlbum.Name;
                        tagFile.Tag.Track        = (uint)track.TrackNumber;
                        tagFile.Tag.Disc         = (uint)track.DiscNumber;
                        if (DateTime.TryParse(selectedAlbum.ReleaseDate, out DateTime release))
                        {
                            tagFile.Tag.Year = (uint)release.Year;
                        }
                        tagFile.Tag.Genres    = selectedAlbum.Genres.ToArray();
                        tagFile.Tag.Copyright = string.Join(", ", selectedAlbum.Copyrights.Select(c => $"{c.Type} - {c.Text}"));
                        if (pictureFile != null)
                        {
                            tagFile.Tag.Pictures = new TagLib.IPicture[] { new TagLib.Picture(pictureFile) };
                        }
                        tagFile.Save();
                    }
                    else
                    {
                        Console.WriteLine($"{Path.GetFileName(file)} not in track listing");
                    }
                }

                Console.WriteLine($"{artistName} - {albumName} Complete");
                Console.WriteLine("-------------------------------------");
                Console.WriteLine();
                //Console.Clear();
            }
        }
コード例 #17
0
        private static async Task <SavingError> SaveSpotifyTrackLevel3(SimpleTrack track, FullAlbum album, bool onFinishDownloadArtwork = true)
        {
            //album = Cleanup(album);
            // track = Cleanup(track);

            if (track == null || album == null)
            {
                return(SavingError.Unknown);
            }
            var alreadySaving = SpotifySavingTracks.FirstOrDefault(p => p == track.Id) != null;

            if (alreadySaving)
            {
                return(SavingError.AlreadySaving);
            }


            //adding id(alway unique) of track to list to avoid duplicate things.
            SpotifySavingTracks.Add(track.Id);

            while (!App.Locator.CollectionService.IsLibraryLoaded)
            {
            }
            var startTransaction = !App.Locator.SqlService.DbConnection.IsInTransaction;

            if (startTransaction)
            {
                App.Locator.SqlService.BeginTransaction();
            }

            var result = await SaveSpotifyTrackLevel4(track, album);

            if (startTransaction)
            {
                App.Locator.SqlService.Commit();
            }

            // ShowResults(result.Error, track.Name);
            SpotifySavingTracks.Remove(track.Id);

            if (!onFinishDownloadArtwork)
            {
                return(result.Error);
            }

            if (result.Song != null)
            {
                if (!result.Song.Album.HasArtwork && !result.Song.Album.NoArtworkFound)
                {
                    await DownloadArtworks.SaveAlbumImageAsync(result.Song.Album, album.Images[0].Url);
                }

                if (App.Locator.Setting.SpotifyArtworkSync)
                {
                    await DownloadArtworks.DownloadArtistsArtworkAsyncFromSpotify(false, result.Song.Artist.Name);
                }
                else
                {
                    await DownloadArtworks.DownloadArtistsArtworkAsync(false, result.Song.Artist.Name);
                }
            }

            return(result.Error);
        }
コード例 #18
0
 public static SpotifyTrack Convert(SimpleTrack spotifyTrack) => new()
コード例 #19
0
ファイル: Spoti15.cs プロジェクト: eezstreet/Spoti15
        private void CheckInput(object source, EventArgs e)
        {
            seeking = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono2);

            inControlMenu = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono3);
            if (inControlMenu && !seeking)
            {
                bool btn2InCtlNow = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono2);
                if (btn2InCtlNow && !btn2Before)
                {
                    var error = api.PausePlayback();
                    if (error.HasError())
                    {
                        showingError            = true;
                        errorString             = error.Error.Message;
                        hideErrorTimer          = new Timer();
                        hideErrorTimer.Enabled  = true;
                        hideErrorTimer.Interval = 3000;
                        hideErrorTimer.Tick    += OnErrorHidden;
                    }
                }
                btn2Before = btn2InCtlNow;

                bool btn1InCtlNow = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono1);
                if (btn1InCtlNow && !btn1Before)
                {
                    var error = api.SkipPlaybackToNext();
                    if (error.HasError())
                    {
                        showingError            = true;
                        errorString             = error.Error.Message;
                        hideErrorTimer          = new Timer();
                        hideErrorTimer.Enabled  = true;
                        hideErrorTimer.Interval = 3000;
                        hideErrorTimer.Tick    += OnErrorHidden;
                    }
                }
                btn1Before = btn1InCtlNow;

                bool btn0InCtlNow = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono0);
                if (btn0InCtlNow && !btn0Before)
                {
                    var error = api.SkipPlaybackToPrevious();
                    if (error.HasError())
                    {
                        showingError            = true;
                        errorString             = error.Error.Message;
                        hideErrorTimer          = new Timer();
                        hideErrorTimer.Enabled  = true;
                        hideErrorTimer.Interval = 3000;
                        hideErrorTimer.Tick    += OnErrorHidden;
                    }
                }
                btn0Before = btn0InCtlNow;
                return;
            }

            if (seeking && !btn2Before && cachedPlayback != null && cachedPlayback.CurrentlyPlayingType != TrackType.Ad)
            {
                // set seek position to current
                currentSeekPosition = (double)cachedPlayback.ProgressMs / cachedPlayback.Item.DurationMs;
            }

            btn2Before = seeking;

            if (seeking)
            {
                bool btn0InSeekNow = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono0);
                if (btn0InSeekNow && !btn0Before)
                {
                    int toMs  = (int)(currentSeekPosition * cachedPlayback.Item.DurationMs);
                    var error = api.SeekPlayback(toMs);
                    if (error.HasError())
                    {
                        showingError            = true;
                        errorString             = error.Error.Message;
                        hideErrorTimer          = new Timer();
                        hideErrorTimer.Enabled  = true;
                        hideErrorTimer.Interval = 3000;
                        hideErrorTimer.Tick    += OnErrorHidden;
                    }
                    seeking    = false;
                    btn0Before = true;
                    return;
                }
                btn0Before = btn0InSeekNow;

                if (lcd.IsButtonPressed(LogiLcd.LcdButton.Mono1))
                {
                    currentSeekPosition -= seekSpeed;
                }
                if (lcd.IsButtonPressed(LogiLcd.LcdButton.Mono3))
                {
                    currentSeekPosition += seekSpeed;
                }

                if (currentSeekPosition > 1.0)
                {
                    currentSeekPosition = 1.0;
                }
                else if (currentSeekPosition < 0.0)
                {
                    currentSeekPosition = 0.0;
                }

                return;
            }

            bool btn0Now = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono0);

            if (btn0Now && !btn0Before)
            {
                var thisItem = cachedPlayback;
                if (thisItem == null || thisItem.Item == null)
                {
                    return;
                }

                if (likedSongNotification || unlikedSongNotification)
                {
                    likedSongNotification = unlikedSongNotification = false;
                    btn0Before            = btn0Now;
                    disableLikedSongNotificationTimer.Enabled = false;
                    return;
                }

                var ListedItem = new List <string>(1);

                likedOrUnlikedSong = thisItem.Item;
                ListedItem.Add(likedOrUnlikedSong.Id);
                if (cachedLikedTrack)
                {
                    api.RemoveSavedTracks(ListedItem);
                    likedSongNotification   = false;
                    unlikedSongNotification = true;
                }
                else
                {
                    api.SaveTrack(likedOrUnlikedSong.Id);
                    likedSongNotification   = true;
                    unlikedSongNotification = false;
                }

                disableLikedSongNotificationTimer          = new Timer();
                disableLikedSongNotificationTimer.Enabled  = true;
                disableLikedSongNotificationTimer.Interval = 5000;
                disableLikedSongNotificationTimer.Tick    += OnLikedSongNotificationFinished;
            }

            btn0Before = btn0Now;

            bool btn1Now = lcd.IsButtonPressed(LogiLcd.LcdButton.Mono1);

            if (btn1Now)
            {
                var playback = cachedPlayback;
                if (playback == null)
                {
                    return;
                }

                if (playback.CurrentlyPlayingType == TrackType.Ad)
                {   // doing calls later down here is bad
                    return;
                }

                if (playback.Context == null)
                {
                }
                else if (playback.Context.Type == "playlist")
                {
                    var playlist = cachedPlaylist;
                    if (playlist == null)
                    {
                        return;
                    }

                    upNextPlaylistTrack = null;
                    for (int i = 0; i < playlist.Tracks.Items.Count; i++)
                    {
                        if (playlist.Tracks.Items[i].Track.Uri == playback.Item.Uri)
                        {
                            // next track is it
                            if (i == playlist.Tracks.Items.Count - 1)
                            {
                                upNextPlaylistTrack = playlist.Tracks.Items[0];
                            }
                            else
                            {
                                upNextPlaylistTrack = playlist.Tracks.Items[i + 1];
                            }
                            break;
                        }
                    }
                    if (upNextPlaylistTrack == null)
                    {
                        return;
                    }
                }
                else if (playback.Context.Type == "album")
                {
                    upNextPlaylistTrack = null;

                    var newAlbum = cachedAlbum;
                    if (newAlbum == null)
                    {
                        return;
                    }

                    for (int i = 0; i < newAlbum.Tracks.Items.Count; i++)
                    {
                        if (playback.Item.Uri == newAlbum.Tracks.Items[i].Uri)
                        {
                            if (i == newAlbum.Tracks.Items.Count - 1)
                            {
                                upNextAlbumTrack = null;
                            }
                            else
                            {
                                upNextAlbumTrack = newAlbum.Tracks.Items[i + 1];
                            }
                        }
                    }
                }
            }

            showUpNext = btn1Now;
        }
コード例 #20
0
 private string GetTrackPreviewButtonString(SimpleTrack track)
 {
     return(string.IsNullOrEmpty(track.PreviewUrl)
         ? "🔇"
         : $"[▶]({track.PreviewUrl})");
 }
コード例 #21
0
 public SpotifyPreview(MediaPlayer mediaPlayer, SimpleTrack track)
 {
     player = mediaPlayer;
     downloadPreview(track);
     playPreview();
 }
コード例 #22
0
ファイル: UrlHelper.cs プロジェクト: k-boyle/LittleBigBot
 public static string GetTrackUrl(this SimpleTrack track)
 {
     return($"{SpotifyBaseUrl}/track/{track.Id}");
 }
コード例 #23
0
ファイル: SpotifyHelper.cs プロジェクト: dbeattie71/Audiotica
        public static async Task <SaveResults> SaveTrackAsync(SimpleTrack track, FullAlbum album)
        {
            try
            {
                if (track == null || album == null)
                {
                    return(new SaveResults()
                    {
                        Error = SavingError.Unknown
                    });
                }

                var preparedSong = track.ToSong();

                var exists = App.Locator.CollectionService.SongAlreadyExists(
                    preparedSong.ProviderId,
                    track.Name,
                    album.Name,
                    album.Artist != null ? album.Artist.Name : track.Artist.Name);

                if (exists != null)
                {
                    return(new SaveResults {
                        Error = SavingError.AlreadyExists, Entry = exists
                    });
                }

                var fullTrack = track as FullTrack ?? await App.Locator.Spotify.GetTrack(track.Id);

                var artist = fullTrack != null ? fullTrack.Artist : track.Artist;

                preparedSong.ArtistName = fullTrack != null
                                              ? string.Join(", ", fullTrack.Artists.Select(p => p.Name))
                                              : artist.Name;

                preparedSong.Album  = album.ToAlbum();
                preparedSong.Artist = album.Artist.ToArtist();
                preparedSong.Album.PrimaryArtist = preparedSong.Artist;
                await App.Locator.CollectionService.AddSongAsync(preparedSong).ConfigureAwait(false);

                CollectionHelper.MatchSong(preparedSong);
                return(new SaveResults()
                {
                    Error = SavingError.None, Entry = preparedSong
                });
            }
            catch (NetworkException)
            {
                return(new SaveResults()
                {
                    Error = SavingError.Network
                });
            }
            catch
            {
                return(new SaveResults()
                {
                    Error = SavingError.Unknown
                });
            }
        }