/// <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; } }
/// <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; } }