public TrackViewItem(Track track) { Track = track; Text = track.User.Username; SubItems.Add(track.Title); }
public async Task<byte[]> DownloadTrack(Track track) { if (track.Streamable.GetValueOrDefault(true)) return await DownloadTrackSecondary(track); var url = string.Format("tracks/{0}/stream?client_id={1}", track.Id, _clientId); return await _client.GetByteArrayAsync(url); }
public async Task<byte[]> DownloadTrackSecondary(Track track) { await Task.Delay(2000); var postData = new FormUrlEncodedContent(new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("url", track.PermalinkUrl) }); var downloadRequest = await _client.PostAsync(Config.SecondaryDownloadProvider, postData); var downloadContent = await downloadRequest.Content.ReadAsStringAsync(); var url = Config.DownloaderRegex.Match(downloadContent).Groups[1].Value; return await _client.GetByteArrayAsync(url); }
private static string GetTrackPath(Track track, string downloadLocation, bool splitArtists) { var sanitizedArtist = track.User.Username.SanitizeForPath(); var sanitizedName = track.Title.SanitizeForFile(); var directoryPath = !splitArtists ? downloadLocation : Path.Combine(downloadLocation, sanitizedArtist); Directory.CreateDirectory(directoryPath); return Path.Combine(directoryPath, sanitizedName + ".mp3"); }
private void SetID3Tags(Track track, string path) { try { var tagger = new UltraID3(); tagger.Read(path); tagger.Title = track.Title; tagger.Artist = track.User.Username; tagger.Genre = track.Genre; tagger.Write(); } catch (Exception ex) { LogSpecial("Error tagging ", string.Empty, ".", track.Title, string.Empty); Log(ex.Message); } }
private async Task DownloadTrack(Track track) { var path = GetTrackPath(track, downloadFolderTextBox.Text, splitArtistsCheckBox.Checked); if (!overwriteCheckBox.Checked && File.Exists(path)) return; for (var i = 0; i < 2; i++) { var service = i == 0 ? "SoundCloud" : "secondary"; try { LogSpecial("Downloading ", " from ", ".", track.Title, service); var trackBytes = i == 0 ? await _provider.DownloadTrack(track) : await _provider.DownloadTrackSecondary(track); File.WriteAllBytes(path, trackBytes); if (setID3TagCheckBox.Checked) SetID3Tags(track, path); break; } catch (Exception ex) { LogSpecial("Error downloading ", " from ", ".", track.Title, service); Log(ex.Message); } } }