Spotify.NET/SpotifyLocalAPIExample/Form1.cs

154 lines
5.6 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Diagnostics;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SpotifyAPI.SpotifyLocalAPI;
using System.Threading;
using SpotifyEventHandler = SpotifyAPI.SpotifyLocalAPI.SpotifyEventHandler;
namespace SpotifyAPI_Example
{
public partial class Form1 : Form
{
SpotifyLocalAPIClass spotify;
SpotifyMusicHandler mh;
SpotifyEventHandler eh;
public Form1()
{
InitializeComponent();
spotify = new SpotifyLocalAPIClass();
if (!SpotifyLocalAPIClass.IsSpotifyRunning())
{
spotify.RunSpotify();
Thread.Sleep(5000);
}
if (!SpotifyLocalAPIClass.IsSpotifyWebHelperRunning())
{
spotify.RunSpotifyWebHelper();
Thread.Sleep(4000);
}
if(!spotify.Connect())
{
Boolean retry = true;
while(retry)
{
if (MessageBox.Show("SpotifyLocalAPIClass could'nt load!", "Error", MessageBoxButtons.RetryCancel) == System.Windows.Forms.DialogResult.Retry)
{
if(spotify.Connect())
retry = false;
else
retry = true;
}
else
{
this.Close();
return;
}
}
}
mh = spotify.GetMusicHandler();
eh = spotify.GetEventHandler();
}
private async void Form1_Load(object sender, EventArgs e)
{
spotify.Update();
progressBar1.Maximum = (int)mh.GetCurrentTrack().GetLength() * 100;
pictureBox1.Image = await spotify.GetMusicHandler().GetCurrentTrack().GetAlbumArtAsync(AlbumArtSize.SIZE_160);
pictureBox2.Image = await spotify.GetMusicHandler().GetCurrentTrack().GetAlbumArtAsync(AlbumArtSize.SIZE_640);
linkLabel1.Text = mh.GetCurrentTrack().GetTrackName();
linkLabel1.LinkClicked += (senderTwo, args) => Process.Start(mh.GetCurrentTrack().GetTrackURI());
linkLabel2.Text = mh.GetCurrentTrack().GetArtistName();
linkLabel2.LinkClicked += (senderTwo, args) => Process.Start(mh.GetCurrentTrack().GetArtistURI());
linkLabel3.Text = mh.GetCurrentTrack().GetAlbumName();
linkLabel3.LinkClicked += (senderTwo, args) => Process.Start(mh.GetCurrentTrack().GetAlbumURI());
label9.Text = mh.IsPlaying().ToString();
label11.Text = ((int)(mh.GetVolume() * 100)).ToString();
label7.Text = mh.IsAdRunning().ToString();
eh.OnTrackChange += new SpotifyEventHandler.TrackChangeEventHandler(trackchange);
eh.OnTrackTimeChange += new SpotifyEventHandler.TrackTimeChangeEventHandler(timechange);
eh.OnPlayStateChange += new SpotifyEventHandler.PlayStateEventHandler(playstatechange);
eh.OnVolumeChange += new SpotifyEventHandler.VolumeChangeEventHandler(volumechange);
eh.SetSynchronizingObject(this);
eh.ListenForEvents(true);
}
private void volumechange(VolumeChangeEventArgs e)
{
label11.Text = ((int)(mh.GetVolume() * 100)).ToString();
}
private void playstatechange(PlayStateEventArgs e)
{
label9.Text = e.playing.ToString();
}
private async void trackchange(TrackChangeEventArgs e)
{
progressBar1.Maximum = (int)mh.GetCurrentTrack().GetLength()*100;
linkLabel1.Text = e.new_track.GetTrackName();
linkLabel2.Text = e.new_track.GetArtistName();
linkLabel3.Text = e.new_track.GetAlbumName();
pictureBox1.Image = await e.new_track.GetAlbumArtAsync(AlbumArtSize.SIZE_160);
pictureBox2.Image = await e.new_track.GetAlbumArtAsync(AlbumArtSize.SIZE_640);
label7.Text = mh.IsAdRunning().ToString();
}
private void timechange(TrackTimeChangeEventArgs e)
{
label4.Text = formatTime(e.track_time) + "/" + formatTime(mh.GetCurrentTrack().GetLength());
progressBar1.Value = (int)e.track_time*100;
}
private String formatTime(double sec)
{
TimeSpan span = TimeSpan.FromSeconds(sec);
String secs = span.Seconds.ToString(), mins = span.Minutes.ToString();
if (secs.Length < 2)
secs = "0" + secs;
return mins + ":" + secs;
}
private void button1_Click(object sender, EventArgs e)
{
mh.Play();
}
private void button2_Click(object sender, EventArgs e)
{
mh.Pause();
}
private void button3_Click(object sender, EventArgs e)
{
mh.Previous();
}
private void button4_Click(object sender, EventArgs e)
{
mh.Skip();
}
private void button5_Click(object sender, EventArgs e)
{
//Not working yet
//if (SpotifyAPI.IsValidSpotifyURI(textBox1.Text))
mh.PlayURL(textBox1.Text, tbContext.Text);
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
mh.Mute();
else
mh.UnMute();
}
}
}