public FileInfo GetCover(TrackInfo info)
        {
            string hash = GetMd5Hash(info.Artist + ":" + info.Title);
            string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                "NowPlayingKiosk", "Cache", hash.Substring(0, 2));
            Directory.CreateDirectory(path);

            string filename = Path.Combine(path, hash + ".png");
            FileInfo file = new FileInfo(filename);
            if (file.Exists)
            {
                // Get from cache
                return file;
            }
            else
            {
                Response resp = MakeRequest(info);
                if (resp != null)
                {
                    Item item = ProcessResponse(resp);
                    if (item != null)
                    {
                        DownloadImage(item, file);
                        return file;
                    }
                }
            }

            return GetDefaultCover();
        }
        public TrackInfo WhatIsNowPlaying()
        {
            // Get the process
            Process[] processList = Process.GetProcessesByName("spotify");

            string wantedPrefix = "Spotify - ";
            foreach (Process process in processList)
            {
                if (!String.IsNullOrEmpty(process.MainWindowTitle) && process.MainWindowTitle.Equals("Spotify"))
                {
                    // Nothing playing right now
                    lastPlayed = null;
                    return null;
                }
                else if (!String.IsNullOrEmpty(process.MainWindowTitle) && process.MainWindowTitle.StartsWith(wantedPrefix))
                {
                    // Spotify is playing something
                    string windowTitle = process.MainWindowTitle.Substring(wantedPrefix.Length);
                    TrackInfo nowPlaying = null;
                    if (windowTitle != null)
                    {
                        // For example "Foo Fighters – Monkey Wrench"
                        int idx = windowTitle.IndexOf('–');
                        if (idx != -1)
                        {
                            string artist = windowTitle.Substring(0, idx).Trim();
                            string title = windowTitle.Substring(idx + 1).Trim();
                            nowPlaying = new TrackInfo(artist, title);
                        }
                    }

                    lastPlayed = nowPlaying;
                    return nowPlaying;
                }
                else if (String.IsNullOrEmpty(process.MainWindowTitle))
                {
                    return lastPlayed;
                }
            }

            return null;
        }
 private Response MakeRequest(TrackInfo info)
 {
     try
     {
         string query = "q=artist:" + WebUtility.UrlEncode(info.Artist) + "+track:" + WebUtility.UrlEncode(info.Title);
         string market = CultureInfo.InstalledUICulture.TwoLetterISOLanguageName;
         string url = "https://api.spotify.com/v1/search?" + query + "&type=track&market=" + market;
         HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
         using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
         {
             if (response.StatusCode != HttpStatusCode.OK)
                 throw new Exception(String.Format(
                 "Server error (HTTP {0}: {1}).",
                 response.StatusCode,
                 response.StatusDescription));
             DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Response));
             object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
             Response jsonResponse
             = objResponse as Response;
             return jsonResponse;
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         return null;
     }
 }