using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Diagnostics; using System.IO; using Sony.Core.Data; using MusicMatch.Core.Data; namespace ScheduledTask { public static class libspotifyPlaylistLib { public static List GetPublicPlaylists(IEnumerable spotifyUsers) { List playlists = new List(); var allUsers = spotifyUsers.Distinct().ToList(); // Fetch result for 10 users at a time const int groupCount = 10; for (int i = 0; i <= allUsers.Count / 10; i++) { var groupedUsers = allUsers.Skip(i*groupCount).Take(groupCount).ToList(); Console.WriteLine("libspotifyPlaylistLib with following users:" + string.Join(",", groupedUsers)); playlists.AddRange(LibSpotifyGetPublicPlaylists(string.Join(" ", groupedUsers))); } return playlists; } private static List LibSpotifyGetPublicPlaylists(string args) { List playlistLinks = new List(); try { var processInfo = new ProcessStartInfo("libspotifyPlaylistLib/libspotifyPlaylistLib.exe", args); processInfo.RedirectStandardOutput = true; processInfo.UseShellExecute = false; var process = Process.Start(processInfo); string temp = process.StandardOutput.ReadToEnd(); var rows = temp.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var row in rows) { var values = row.Split(';'); if (values.Count() < 2) continue; var playlistSpotifyUser = values[0]; string linkUri = values[1]; SpotifyLink link = new SpotifyLink(linkUri); if (!playlistSpotifyUser.Equals(link.ExtractSpotifyUserName(), StringComparison.InvariantCultureIgnoreCase)) continue; //we are only interested in playlists created by that user. playlistLinks.Add(link); } process.Close(); return playlistLinks; } catch (Exception) { } return playlistLinks; } } }