Repository navigation
Expand file tree
/
Copy pathSpotifyEventHandler.cs
More file actions
111 lines (106 loc) · 3.88 KB
/
Copy pathSpotifyEventHandler.cs
File metadata and controls
111 lines (106 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SpotifyAPI.SpotifyLocalAPI;
namespace SpotifyAPI.SpotifyLocalAPI
{
public class SpotifyEventHandler
{
private Boolean listen = false;
private System.Timers.Timer timer;
private SpotifyLocalAPIClass api;
private SpotifyMusicHandler mh;
private StatusResponse response;
public delegate void TrackChangeEventHandler(TrackChangeEventArgs e);
public delegate void PlayStateEventHandler(PlayStateEventArgs e);
public delegate void VolumeChangeEventHandler(VolumeChangeEventArgs e);
public delegate void TrackTimeChangeEventHandler(TrackTimeChangeEventArgs e);
public event TrackChangeEventHandler OnTrackChange;
public event PlayStateEventHandler OnPlayStateChange;
public event VolumeChangeEventHandler OnVolumeChange;
public event TrackTimeChangeEventHandler OnTrackTimeChange;
public SpotifyEventHandler(SpotifyLocalAPIClass api, SpotifyMusicHandler mh)
{
timer = new System.Timers.Timer();
timer.Interval = 50;
timer.Elapsed += tick;
timer.AutoReset = false;
timer.Enabled = false;
this.api = api;
this.mh = mh;
}
/// <summary>
/// If Events should be triggered
/// </summary>
/// <param name="listen">True if you want to listen for events, false if not</param>
public void ListenForEvents(Boolean listen)
{
timer.Enabled = listen;
}
/// <summary>
/// Sets a synchronizing object, so you don't need to Invoke
/// </summary>
/// <param name="obj">The SynchronizingObject e.g a Form</param>
public void SetSynchronizingObject(System.ComponentModel.ISynchronizeInvoke obj)
{
timer.SynchronizingObject = obj;
}
internal void tick(object sender, EventArgs e)
{
api.Update();
if (response == null)
{
response = mh.GetStatusResponse();
timer.Start();
return;
}
StatusResponse new_response = mh.GetStatusResponse();
if(new_response == null)
{
timer.Start();
return;
}
if (!new_response.running && new_response.track == null)
{
timer.Start();
return;
}
if (new_response.track != null && response.track != null)
{
if (new_response.track.GetTrackName() != response.track.GetTrackName() && OnTrackChange != null)
{
OnTrackChange(new TrackChangeEventArgs()
{
old_track = response.track,
new_track = new_response.track
});
}
}
if (new_response.playing != response.playing && OnPlayStateChange != null)
{
OnPlayStateChange(new PlayStateEventArgs()
{
playing = new_response.playing
});
}
if (new_response.volume != response.volume && OnVolumeChange != null)
{
OnVolumeChange(new VolumeChangeEventArgs()
{
old_volume = response.volume,
new_volume = new_response.volume
});
}
if(new_response.playing_position != response.playing_position && OnTrackTimeChange != null)
{
OnTrackTimeChange(new TrackTimeChangeEventArgs()
{
track_time = new_response.playing_position
});
}
response = new_response;
timer.Start();
}
}
}