34
34
public class Player : GLib.Object {
36
public delegate void NewSongHandler ();
36
public delegate void NewSongHandler (Song song);
37
37
public event NewSongHandler NewSong;
38
public event NewSongHandler SongEnded;
39
39
private SignalUtils.SignalDelegate new_song_cb;
40
private SignalUtils.SignalDelegate end_song_cb;
41
private SignalUtils.SignalDelegateStr error_cb;
40
42
private bool playing;
44
private Song current_song;
45
private Playlist playlist;
46
public Playlist Plist {
47
get { return playlist; }
43
51
[DllImport ("liblastexit")]
44
52
private static extern IntPtr player_new ();
46
public Player () : base (IntPtr.Zero) {
54
public Player (Playlist playlist) : base (IntPtr.Zero) {
55
this.playlist = playlist;
56
playlist.SongReady += new Playlist.SongReadyHandler (OnSongReady);
47
58
Raw = player_new ();
49
60
new_song_cb = new SignalUtils.SignalDelegate (OnNewSong);
61
end_song_cb = new SignalUtils.SignalDelegate (OnEndSong);
62
error_cb = new SignalUtils.SignalDelegateStr (OnError);
50
63
SignalUtils.SignalConnect (Raw, "new-song", new_song_cb);
64
SignalUtils.SignalConnect (Raw, "end-song", end_song_cb);
65
SignalUtils.SignalConnect (Raw, "error", error_cb);
75
90
private static extern void player_play (IntPtr player);
77
92
public void Play () {
93
Console.WriteLine ("Player: Requesting Song");
95
playlist.RequestNextSong ();
96
Driver.PlayerWindow.UpdatePlayingUI ();
99
private void OnSongReady (Song song)
101
Console.WriteLine ("Player: Got Song");
103
Console.WriteLine ("Now playing: " + song.Location);
104
Driver.connection.InvokeMetadataLoaded (song);
105
this.Location = song.Location;
78
106
player_play (Raw);
80
Driver.PlayerWindow.UpdatePlayingUI ();
108
song.StartTime = DateTime.UtcNow;
83
111
[DllImport ("liblastexit")]
99
127
private void OnNewSong (IntPtr obj) {
100
128
if (NewSong != null) {
129
NewSong (current_song);
133
private void OnEndSong (IntPtr obj) {
134
Console.WriteLine ("EndSong");
136
if (SongEnded != null) {
137
SongEnded (current_song);
143
private void OnError (IntPtr obj, string error) {
144
Console.Error.WriteLine ("GST error: " + error);
148
public void SkipSong ()
157
[DllImport ("liblastexit")]
158
private static extern long player_get_stream_position (IntPtr player);
160
public long StreamPosition {
163
return player_get_stream_position (Raw);