Beispiel #1
0
        /// <summary>
        /// Downloads the scrobbles of the given <see cref="Username"/>
        /// and saves them in the csv file in the given <see cref="FilePath"/>.
        /// </summary>
        /// <returns>Task.</returns>
        public async Task Download()
        {
            try
            {
                EnableControls = false;
                var userResponse = await _userAPI.GetInfoAsync(Username);

                if (userResponse.Success && userResponse.Status == LastResponseStatus.Successful)
                {
                    int    pages = (int)Math.Ceiling(userResponse.Content.Playcount / (double)TRACKSPERPAGE);
                    string error = null;
                    IReadOnlyList <LastTrack>[] scrobbles = new IReadOnlyList <LastTrack> [pages];
                    for (int i = 1; i <= pages; i++)
                    {
                        OnStatusUpdated($"Fetching page {i} / {pages}");
                        var pageResponse = await _userAPI.GetRecentScrobbles(Username, null, i, TRACKSPERPAGE);

                        if (pageResponse.Success && pageResponse.Status == LastResponseStatus.Successful)
                        {
                            scrobbles[i - 1] = pageResponse.Content.Where(s => !s.IsNowPlaying.HasValue || !s.IsNowPlaying.Value).ToArray();
                        }
                        else
                        {
                            error = pageResponse.Status.ToString();
                            break;
                        }
                    }

                    if (!string.IsNullOrEmpty(error))
                    {
                        OnStatusUpdated($"Error while fetching scrobble data: {error}");
                    }
                    else
                    {
                        try
                        {
                            OnStatusUpdated("Creating .csv file...");
                            StringBuilder csv = new StringBuilder();
                            foreach (var page in scrobbles)
                            {
                                foreach (var scrobble in page)
                                {
                                    string artist    = EncloseComma(scrobble.ArtistName);
                                    string album     = EncloseComma(scrobble.AlbumName);
                                    string track     = EncloseComma(scrobble.Name);
                                    string duration  = EncloseComma(scrobble.Duration.ToString());
                                    var    timeStamp = scrobble.TimePlayed;

                                    string newLine = $"{artist},{album},{track},{timeStamp},{""},{duration}";
                                    csv.AppendLine(newLine);
                                }
                            }

                            _fileOperator.WriteAllText(FilePath, csv.ToString());
                            OnStatusUpdated("Successfully wrote .csv file.");
                        }
                        catch (Exception ex)
                        {
                            OnStatusUpdated($"Error writing .csv file: {ex.Message}");
                        }
                    }
                }
                else
                {
                    OnStatusUpdated($"Error while fetching user info: {userResponse.Status}");
                }
            }
            finally
            {
                EnableControls = true;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Downloads the scrobbles of the given <see cref="Username"/>
        /// and saves them in the csv file in the given <see cref="FilePath"/>.
        /// </summary>
        /// <returns>Task.</returns>
        public async Task Download()
        {
            EnableControls = false;

            try
            {
                var userResponse = await _userAPI.GetInfoAsync(Username);

                if (userResponse.Success)
                {
                    int  pages = (int)Math.Ceiling(userResponse.Content.Playcount / (double)TRACKSPERPAGE);
                    bool error = false;
                    IReadOnlyList <LastTrack>[] scrobbles = new IReadOnlyList <LastTrack> [pages];
                    for (int i = 1; i <= pages; i++)
                    {
                        OnStatusUpdated("Fetching page " + i + " / " + pages);
                        var pageResponse = await _userAPI.GetRecentScrobbles(Username, null, i, TRACKSPERPAGE);

                        if (pageResponse.Success)
                        {
                            scrobbles[i - 1] = pageResponse.Content.Where(s => !s.IsNowPlaying.HasValue || !s.IsNowPlaying.Value).ToArray();
                        }
                        else
                        {
                            error = true;
                            break;
                        }
                    }

                    if (error)
                    {
                        OnStatusUpdated("Error while fetching scrobble data.");
                    }
                    else
                    {
                        OnStatusUpdated("Creating .csv file...");

                        try
                        {
                            StringBuilder csv = new StringBuilder();
                            foreach (var page in scrobbles)
                            {
                                foreach (var scrobble in page)
                                {
                                    string artist    = EncloseComma(scrobble.ArtistName);
                                    string album     = EncloseComma(scrobble.AlbumName);
                                    string track     = EncloseComma(scrobble.Name);
                                    string duration  = EncloseComma(scrobble.Duration.ToString());
                                    var    timeStamp = scrobble.TimePlayed;

                                    string newLine = string.Format("{0},{1},{2},{3},{4},{5}", artist, album, track, timeStamp, "", duration);
                                    csv.AppendLine(newLine);
                                }
                            }

                            _fileOperator.WriteAllText(FilePath, csv.ToString());
                            OnStatusUpdated("Successfully wrote .csv file.");
                        }
                        catch (Exception ex)
                        {
                            OnStatusUpdated("Error writing .csv file: " + ex.Message);
                        }
                    }
                }
                else
                {
                    OnStatusUpdated("Error while fetching user info.");
                }
            }
            finally
            {
                EnableControls = true;
            }
        }