diff --git a/Plugins/PluginNowPlaying/NowPlaying.cpp b/Plugins/PluginNowPlaying/NowPlaying.cpp
index c7c79b7b..b6ef8878 100644
--- a/Plugins/PluginNowPlaying/NowPlaying.cpp
+++ b/Plugins/PluginNowPlaying/NowPlaying.cpp
@@ -21,7 +21,6 @@
#include "Internet.h"
#include "PlayerAIMP.h"
#include "PlayerCAD.h"
-#include "PlayerFoobar.h"
#include "PlayerITunes.h"
#include "PlayerSpotify.h"
#include "PlayerWinamp.h"
@@ -148,7 +147,17 @@ PLUGIN_EXPORT void Reload(void* data, void* rm, double* maxValue)
}
else if (_wcsicmp(L"foobar2000", str) == 0)
{
- parent->player = CPlayerFoobar::Create();
+ HWND fooWindow = FindWindow(L"foo_rainmeter_class", NULL);
+ if (fooWindow)
+ {
+ const WCHAR* error = L"Your foobar2000 plugin is out of date.\n\nDo you want to update the plugin now?";
+ if (MessageBox(NULL, error, L"Rainmeter", MB_YESNO | MB_ICONINFORMATION | MB_TOPMOST) == IDYES)
+ {
+ ShellExecute(NULL, L"open", L"http://github.com/poiru/foo-cad#readme", NULL, NULL, SW_SHOWNORMAL);
+ }
+ }
+
+ parent->player = CPlayerCAD::Create();
}
else if (_wcsicmp(L"iTunes", str) == 0)
{
diff --git a/Plugins/PluginNowPlaying/Player.cpp b/Plugins/PluginNowPlaying/Player.cpp
index 218b9e41..dc15542f 100644
--- a/Plugins/PluginNowPlaying/Player.cpp
+++ b/Plugins/PluginNowPlaying/Player.cpp
@@ -30,7 +30,7 @@ CPlayer::CPlayer() :
m_TrackCount(),
m_Measures(),
m_State(),
- m_Number(1),
+ m_Number(),
m_Year(),
m_Shuffle(false),
m_Repeat(false),
diff --git a/Plugins/PluginNowPlaying/PlayerCAD.cpp b/Plugins/PluginNowPlaying/PlayerCAD.cpp
index aa4ac624..748cd470 100644
--- a/Plugins/PluginNowPlaying/PlayerCAD.cpp
+++ b/Plugins/PluginNowPlaying/PlayerCAD.cpp
@@ -77,17 +77,18 @@ void CPlayerCAD::Initialize()
RegisterClass(&wc);
// Create reciever window
- m_Window = CreateWindow(L"NowPlayingCADClass",
- L"CD Art Display 1.x Class",
- WS_DISABLED,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- NULL,
- NULL,
- g_Instance,
- this);
+ m_Window = CreateWindow(
+ L"NowPlayingCADClass",
+ L"CD Art Display 1.x Class",
+ WS_DISABLED,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ NULL,
+ NULL,
+ g_Instance,
+ this);
// Add WM_USER/WM_COPYDATA to allowed messages from lower level processes
HMODULE hUser32 = LoadLibrary(L"user32.dll");
@@ -315,7 +316,7 @@ LRESULT CALLBACK CPlayerCAD::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
break;
case 11:
- if (*data == L' ' && player->m_Measures & MEASURE_COVER)
+ if (*data == L' ')
{
player->FindCover();
}
diff --git a/Plugins/PluginNowPlaying/PlayerFoobar.cpp b/Plugins/PluginNowPlaying/PlayerFoobar.cpp
deleted file mode 100644
index 617dde55..00000000
--- a/Plugins/PluginNowPlaying/PlayerFoobar.cpp
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- Copyright (C) 2011 Birunthan Mohanathas (www.poiru.net)
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#include "StdAfx.h"
-#include "PlayerFoobar.h"
-
-CPlayer* CPlayerFoobar::c_Player = NULL;
-extern HINSTANCE g_Instance;
-
-/*
-** Constructor.
-**
-*/
-CPlayerFoobar::CPlayerFoobar() : CPlayer(),
- m_Window(),
- m_FooWindow(),
- m_MaximizeOnStart(false)
-{
- Initialize();
-}
-
-/*
-** Constructor.
-**
-*/
-CPlayerFoobar::~CPlayerFoobar()
-{
- c_Player = NULL;
- Uninitialize();
-}
-
-/*
-** Creates a shared class object.
-**
-*/
-CPlayer* CPlayerFoobar::Create()
-{
- if (!c_Player)
- {
- c_Player = new CPlayerFoobar();
- }
-
- return c_Player;
-}
-
-/*
-** Create receiver window.
-**
-*/
-void CPlayerFoobar::Initialize()
-{
- // Create windows class
- WNDCLASS wc = {0};
- wc.hInstance = g_Instance;
- wc.lpfnWndProc = WndProc;
- wc.lpszClassName = L"NowPlayingFoobarClass";
- RegisterClass(&wc);
-
- // Create window
- m_Window = CreateWindow(L"NowPlayingFoobarClass",
- L"ReceiverWindow",
- WS_DISABLED,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- NULL,
- NULL,
- g_Instance,
- this);
-
- m_FooWindow = FindWindow(L"foo_rainmeter_class", NULL);
- if (m_FooWindow)
- {
- int version = (int)SendMessage(m_FooWindow, WM_USER, 0, FOO_GETVERSION);
- if (version < 100)
- {
- const WCHAR* error = L"Your copy of the foo_rainmeter.dll plugin for foobar2000 is outdated.\nDownload the latest version from foo-rainmeter.googlecode.com and try again.";
- MessageBox(NULL, error, L"Rainmeter", MB_OK | MB_ICONERROR | MB_TOPMOST);
- m_FooWindow = NULL;
- }
- else
- {
- m_Initialized = true;
- SendMessage(m_FooWindow, WM_USER, (WPARAM)m_Window, FOO_SETCALLBACK);
- }
- }
-}
-
-/*
-** Destroy reciever window.
-**
-*/
-void CPlayerFoobar::Uninitialize()
-{
- if (m_FooWindow)
- {
- SendMessage(m_FooWindow, WM_USER, 0, FOO_REMOVECALLBACK);
- }
-
- DestroyWindow(m_Window);
- UnregisterClass(L"NowPlayingFoobarClass", g_Instance);
-}
-
-/*
-** Window procedure for the reciever window.
-**
-*/
-LRESULT CALLBACK CPlayerFoobar::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- static CPlayerFoobar* player;
-
- switch (msg)
- {
- case WM_CREATE:
- {
- // Get pointer to the CPlayerFoobar class from the CreateWindow call
- LPVOID params = ((CREATESTRUCT*)lParam)->lpCreateParams;
- player = (CPlayerFoobar*)params;
- return 0;
- }
-
- case WM_USER:
- switch (lParam)
- {
- case FOO_GETVERSION:
- return 100;
-
- case FOO_STATECHANGE:
- {
- StateType ps = (StateType)wParam;
- if (ps == STATE_STOPPED)
- {
- player->ClearData();
- }
- else
- {
- player->m_State = ps;
- }
- }
- break;
-
- case FOO_TIMECHANGE:
- player->m_Position = (UINT)wParam;
- break;
-
- case FOO_VOLUMECHANGE:
- player->m_Volume = (UINT)wParam;
- break;
-
- case FOO_PLAYERSTART:
- player->m_Initialized = true;
- player->m_FooWindow = (HWND)wParam;
-
- if (player->m_MaximizeOnStart)
- {
- SendMessage(player->m_FooWindow, WM_USER, 0, FOO_SHOWPLAYER);
- player->m_MaximizeOnStart = false;
- }
- break;
-
- case FOO_PLAYERQUIT:
- player->m_Initialized = false;
- player->ClearData();
- break;
- }
- return 0;
-
- case WM_COPYDATA:
- {
- PCOPYDATASTRUCT cds = (PCOPYDATASTRUCT)lParam;
-
- if (cds->dwData == FOO_TRACKCHANGE)
- {
- if (player->m_State != STATE_PLAYING)
- {
- player->m_State = STATE_PLAYING;
- }
-
- // In the format "TITLE ARTIST ALBUM LENGTH RATING" (seperated by \t)
- WCHAR buffer[1024];
- MultiByteToWideChar(CP_UTF8, 0, (char*)cds->lpData, cds->cbData, buffer, 1024);
- player->m_Artist = buffer;
-
- WCHAR* token = wcstok(buffer, L"\t");
- if (token)
- {
- if (wcscmp(token, L" ") == 0)
- {
- player->m_Title.clear();
- }
- else
- {
- player->m_Title = token;
- }
- }
- token = wcstok(NULL, L"\t");
- if (token)
- {
- if (wcscmp(token, L" ") == 0)
- {
- player->m_Artist.clear();
- }
- else
- {
- player->m_Artist = token;
- }
- }
- token = wcstok(NULL, L"\t");
- if (token)
- {
- if (wcscmp(token, L" ") == 0)
- {
- player->m_Album.clear();
- }
- else
- {
- player->m_Album = token;
- }
- }
- token = wcstok(NULL, L"\t");
- if (token)
- {
- player->m_Duration = _wtoi(token);
- }
- token = wcstok(NULL, L"\t");
- if (token)
- {
- player->m_Rating = _wtoi(token);
- }
- token = wcstok(NULL, L"\t");
- if (token && wcscmp(token, player->m_FilePath.c_str()) != 0)
- {
- // If different file
- ++player->m_TrackCount;
- player->m_FilePath = token;
- player->m_Position = 0;
-
- if (player->m_Measures & MEASURE_COVER || player->m_InstanceCount == 0)
- {
- player->FindCover();
- }
-
- if (player->m_Measures & MEASURE_LYRICS)
- {
- player->FindLyrics();
- }
- }
- token = wcstok(NULL, L"\t");
- if (token)
- {
- switch (_wtoi(token))
- {
- case 0:
- player->m_Shuffle = player->m_Repeat = false;
- break;
-
- case 1:
- player->m_Shuffle = true;
- player->m_Repeat = false;
- break;
-
- case 2:
- player->m_Shuffle = false;
- player->m_Repeat = true;
- break;
- }
- }
- }
- }
- return 0;
-
- default:
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
-}
-
-/*
-** Called during each update of the main measure.
-**
-*/
-void CPlayerFoobar::UpdateData()
-{
-}
-
-/*
-** Handles the Pause bang.
-**
-*/
-void CPlayerFoobar::Pause()
-{
- SendMessage(m_FooWindow, WM_USER, 0, FOO_PAUSE);
-}
-
-/*
-** Handles the Play bang.
-**
-*/
-void CPlayerFoobar::Play()
-{
- SendMessage(m_FooWindow, WM_USER, 0, (m_State == STATE_PAUSED) ? FOO_PLAYPAUSE : FOO_PLAY);
-}
-
-/*
-** Handles the Stop bang.
-**
-*/
-void CPlayerFoobar::Stop()
-{
- SendMessage(m_FooWindow, WM_USER, 0, FOO_STOP);
-}
-
-/*
-** Handles the Next bang.
-**
-*/
-void CPlayerFoobar::Next()
-{
- SendMessage(m_FooWindow, WM_USER, 0, FOO_NEXT);
-}
-
-/*
-** Handles the Previous bang.
-**
-*/
-void CPlayerFoobar::Previous()
-{
- SendMessage(m_FooWindow, WM_USER, 0, FOO_PREVIOUS);
-}
-
-/*
-** Handles the SetPosition bang.
-**
-*/
-void CPlayerFoobar::SetPosition(int position)
-{
- SendMessage(m_FooWindow, WM_USER, position, FOO_SETPOSITION);
-}
-
-/*
-** Handles the SetShuffle bang.
-**
-*/
-void CPlayerFoobar::SetShuffle(bool state)
-{
- m_Shuffle = state;
- m_Repeat = state ? !m_Shuffle : m_Shuffle;
- SendMessage(m_FooWindow, WM_USER, state ? 1 : 0, FOO_SETORDER);
-}
-
-/*
-** Handles the SetRepeat bang.
-**
-*/
-void CPlayerFoobar::SetRepeat(bool state)
-{
- m_Repeat = state;
- m_Shuffle = state ? !m_Repeat : m_Repeat;
- SendMessage(m_FooWindow, WM_USER, state ? 2 : 0, FOO_SETORDER);
-}
-
-/*
-** Handles the SetVolume bang.
-**
-*/
-void CPlayerFoobar::SetVolume(int volume)
-{
- SendMessage(m_FooWindow, WM_USER, volume, FOO_SETVOLUME);
-}
-
-/*
-** Handles the ClosePlayer bang.
-**
-*/
-void CPlayerFoobar::ClosePlayer()
-{
- SendMessage(m_FooWindow, WM_USER, 0, FOO_QUITPLAYER);
-}
-
-/*
-** Handles the OpenPlayer bang.
-**
-*/
-void CPlayerFoobar::OpenPlayer(std::wstring& path)
-{
- if (!m_Initialized)
- {
- if (path.empty())
- {
- // Gotta figure out where foobar2000 is located at
- HKEY hKey;
- RegOpenKeyEx(HKEY_CLASSES_ROOT,
- L"Applications\\foobar2000.exe\\shell\\open\\command",
- 0,
- KEY_QUERY_VALUE,
- &hKey);
-
- DWORD size = 512;
- WCHAR* data = new WCHAR[size];
- DWORD type = 0;
-
- if (RegQueryValueEx(hKey,
- NULL,
- NULL,
- (LPDWORD)&type,
- (LPBYTE)data,
- (LPDWORD)&size) == ERROR_SUCCESS)
- {
- if (type == REG_SZ && data[0] == L'\"')
- {
- path = data;
- path.erase(0, 1); // Get rid of the leading quote
- std::wstring::size_type pos = path.find_first_of(L'\"');
-
- if (pos != std::wstring::npos)
- {
- path.resize(pos); // Get rid the last quote and everything after it
- ShellExecute(NULL, L"open", path.c_str(), NULL, NULL, SW_SHOW);
- path = path;
- }
- else
- {
- path.clear();
- }
- }
- }
-
- delete [] data;
- RegCloseKey(hKey);
- }
- else
- {
- ShellExecute(NULL, L"open", path.c_str(), NULL, NULL, SW_SHOW);
- m_MaximizeOnStart = true;
- }
- }
- else
- {
- SendMessage(m_FooWindow, WM_USER, 0, FOO_SHOWPLAYER);
- }
-}
diff --git a/Plugins/PluginNowPlaying/PlayerFoobar.h b/Plugins/PluginNowPlaying/PlayerFoobar.h
deleted file mode 100644
index 0f39466b..00000000
--- a/Plugins/PluginNowPlaying/PlayerFoobar.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- Copyright (C) 2011 Birunthan Mohanathas (www.poiru.net)
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __PLAYERFOOBAR_H__
-#define __PLAYERFOOBAR_H__
-
-#include "Player.h"
-
-class CPlayerFoobar : public CPlayer
-{
-public:
- virtual ~CPlayerFoobar();
-
- static CPlayer* Create();
-
- virtual void UpdateData();
-
- virtual void Pause();
- virtual void Play();
- virtual void Stop();
- virtual void Next();
- virtual void Previous();
- virtual void SetPosition(int position);
- virtual void SetRating(int rating) {}
- virtual void SetVolume(int volume);
- virtual void SetShuffle(bool state);
- virtual void SetRepeat(bool state);
- virtual void ClosePlayer();
- virtual void OpenPlayer(std::wstring& path);
-
-protected:
- CPlayerFoobar();
-
-private:
- enum FOOMESSAGE
- {
- FOO_TRACKCHANGE = 100,
- FOO_STATECHANGE,
- FOO_TIMECHANGE,
- FOO_VOLUMECHANGE,
- FOO_PLAYERSTART,
- FOO_PLAYERQUIT
- };
-
- enum FOOCOMMAND
- {
- FOO_GETVERSION,
- FOO_PLAY,
- FOO_PLAYPAUSE,
- FOO_PAUSE,
- FOO_STOP,
- FOO_NEXT,
- FOO_PREVIOUS,
- FOO_SETRATING,
- FOO_SETVOLUME,
- FOO_SHOWPLAYER,
- FOO_QUITPLAYER,
- FOO_SETCALLBACK,
- FOO_REMOVECALLBACK,
- FOO_SETPOSITION,
- FOO_SETORDER
- };
-
- void Initialize();
- void Uninitialize();
- static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
-
- static CPlayer* c_Player;
-
- HWND m_Window; // Our reciever window
- HWND m_FooWindow; // Foobar receiver window
- bool m_MaximizeOnStart;
-};
-
-#endif
diff --git a/Plugins/PluginNowPlaying/PluginNowPlaying.rc b/Plugins/PluginNowPlaying/PluginNowPlaying.rc
index d121e25e..3c4c0e21 100644
--- a/Plugins/PluginNowPlaying/PluginNowPlaying.rc
+++ b/Plugins/PluginNowPlaying/PluginNowPlaying.rc
@@ -7,7 +7,7 @@
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,1,4,0
+ FILEVERSION 1,1,5,0
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
@@ -23,7 +23,7 @@ VS_VERSION_INFO VERSIONINFO
{
BLOCK "040904E4"
{
- VALUE "FileVersion", "1.1.4.0"
+ VALUE "FileVersion", "1.1.5.0"
VALUE "LegalCopyright", "© 2012 - Birunthan Mohanathas"
VALUE "ProductName", "Rainmeter"
#ifdef _WIN64
diff --git a/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj b/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj
index f2022e76..2233ab77 100644
--- a/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj
+++ b/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj
@@ -269,7 +269,6 @@
-
@@ -359,7 +358,6 @@
-
diff --git a/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj.filters b/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj.filters
index 8d176448..7eda38c5 100644
--- a/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj.filters
+++ b/Plugins/PluginNowPlaying/PluginNowPlaying.vcxproj.filters
@@ -246,9 +246,6 @@
Source Files
-
- Source Files
-
Source Files
@@ -296,9 +293,6 @@
SDKs\CD Art Display
-
- Header Files
-
Header Files