Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using iTunesLib;
- using System.Diagnostics;
- using System.Drawing;
- using System.Windows.Forms;
- using System.Threading;
- /* TODO:
- * - Hide console window
- * - Debug event firing
- * - Change icon
- * - Traverse to genius recommendations?
- */
- namespace iTunesPlaylistTrayApp
- {
- public class SysTrayApp : Form
- {
- [STAThread]
- public static void Main()
- {
- Application.Run(new SysTrayApp());
- }
- static iTunesApp itapp;
- static IITLibraryPlaylist lastPlaylist;
- public NotifyIcon trayIcon;
- private ContextMenu trayMenu;
- public SysTrayApp()
- {
- // Create a simple tray menu with only one item.
- trayMenu = new ContextMenu();
- trayMenu.MenuItems.Add("Exit", OnExit);
- // Create a tray icon. In this example we use a
- // standard system icon for simplicity, but you
- // can of course use your own custom icon too.
- trayIcon = new NotifyIcon();
- trayIcon.Text = "Play Genius Playlist";
- trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);
- trayIcon.Click += new EventHandler(trayIcon_Click);
- // Add menu to tray icon and show it.
- trayIcon.ContextMenu = trayMenu;
- trayIcon.Visible = true;
- }
- void trayIcon_Click(object sender, EventArgs e)
- {
- PlayPlaylist();
- }
- //private static ManualResetEvent _resetEvent;
- public static void PlayPlaylist()
- {
- //_resetEvent = new ManualResetEvent(false);
- itapp = new iTunesApp();
- itapp.OnPlayerStopEvent += new _IiTunesEvents_OnPlayerStopEventEventHandler(itapp_OnPlayerStopEvent);
- lastPlaylist = itapp.LibraryPlaylist;
- itapp.Play();
- // Block until the resetEvent has been Set() or
- // give up waiting after 5 minutes
- //_resetEvent.WaitOne(1000 * 5 * 60);
- }
- static void itapp_OnPlayerStopEvent(object iTrack)
- {
- Debug.WriteLine("Stop Event fired");
- // Determine whether the user fired the event, or whether the song finished on its own.
- // if the song finished on its own (i.e. player reset to 0 seconds)
- if (itapp.PlayerPosition == 0)
- {
- var curList = itapp.CurrentPlaylist;
- // If it's still in the (genius) playlist it started out in, and it's not the last song in the playlist
- if (curList == lastPlaylist && itapp.CurrentTrack != curList.Tracks[curList.Tracks.Count - 1])
- {
- itapp.NextTrack();
- itapp.Play();
- }
- }
- }
- protected override void OnLoad(EventArgs e)
- {
- Visible = false; // Hide form window.
- ShowInTaskbar = false; // Remove from taskbar.
- base.OnLoad(e);
- }
- private void OnExit(object sender, EventArgs e)
- {
- Application.Exit();
- }
- protected override void Dispose(bool isDisposing)
- {
- if (isDisposing)
- {
- // Release the icon resource.
- trayIcon.Dispose();
- }
- base.Dispose(isDisposing);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement