summaryrefslogtreecommitdiff
path: root/plugins/Watrack_MPD/src
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Watrack_MPD/src')
-rwxr-xr-xplugins/Watrack_MPD/src/commonheaders.h17
-rwxr-xr-xplugins/Watrack_MPD/src/globals.h11
-rwxr-xr-xplugins/Watrack_MPD/src/init.cpp23
-rwxr-xr-xplugins/Watrack_MPD/src/m_music.h351
-rwxr-xr-xplugins/Watrack_MPD/src/main.cpp350
-rwxr-xr-xplugins/Watrack_MPD/src/options.cpp41
6 files changed, 214 insertions, 579 deletions
diff --git a/plugins/Watrack_MPD/src/commonheaders.h b/plugins/Watrack_MPD/src/commonheaders.h
index 85eb73a335..c71f36b977 100755
--- a/plugins/Watrack_MPD/src/commonheaders.h
+++ b/plugins/Watrack_MPD/src/commonheaders.h
@@ -15,13 +15,16 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef COMMONHEADERS_H
#define COMMONHEADERS_H
+
+#define _CRT_SECURE_NO_WARNINGS
+
#include <windows.h>
#include <tchar.h>
#include <malloc.h>
#include <time.h>
+#include <uxtheme.h>
-#define MIRANDA_VER 0x0800
#include <newpluginapi.h>
#include <m_netlib.h>
//#include <m_clist.h>
@@ -36,8 +39,18 @@
#include "resource.h"
#include "constants.h"
-#include "globals.h"
#include "main.h"
#include "m_music.h"
#include "utilities.h"
+
+extern HINSTANCE hInst;
+extern HANDLE ghNetlibUser;
+extern BOOL bWatrackService;
+extern TCHAR *gbHost, *gbPassword;
+extern WORD gbPort;
+
+extern char *date();
+extern int WaMpdOptInit(WPARAM wParam,LPARAM lParam);
+extern void RegisterPlayer();
+
#endif
diff --git a/plugins/Watrack_MPD/src/globals.h b/plugins/Watrack_MPD/src/globals.h
deleted file mode 100755
index edc5bd10c3..0000000000
--- a/plugins/Watrack_MPD/src/globals.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GLOBALS_H
-#define GLOBALS_H
-HANDLE ghNetlibUser;
-HANDLE ghConnection;
-HANDLE ghPacketReciever;
-BOOL bWatrackService;
-TCHAR *gbHost, *gbPassword;
-WORD gbPort;
-BOOL Connected;
-int gbState;
-#endif
diff --git a/plugins/Watrack_MPD/src/init.cpp b/plugins/Watrack_MPD/src/init.cpp
index bfd7199856..13e0b85351 100755
--- a/plugins/Watrack_MPD/src/init.cpp
+++ b/plugins/Watrack_MPD/src/init.cpp
@@ -21,9 +21,9 @@
HINSTANCE hInst;
BOOL bWatrackService = FALSE;
int hLangpack = 0;
-static int OnModulesLoaded(WPARAM wParam,LPARAM lParam);
-extern char *date();
-extern int WaMpdOptInit(WPARAM wParam,LPARAM lParam);
+TCHAR *gbHost, *gbPassword;
+WORD gbPort;
+HANDLE ghNetlibUser;
PLUGININFOEX pluginInfo={
sizeof(PLUGININFOEX),
@@ -50,13 +50,6 @@ __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
return &pluginInfo;
}
-int __declspec(dllexport) Load()
-{
- mir_getLP(&pluginInfo);
- HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
- return 0;
-}
-
void InitVars()
{
gbPort = DBGetContactSettingWord(NULL, szModuleName, "Port", 6600);
@@ -66,9 +59,7 @@ void InitVars()
gbPassword = UniGetContactSettingUtf(NULL, szModuleName, "Password", _T(""));
}
-
-extern void RegisterPlayer();
-static int OnModulesLoaded(WPARAM wParam,LPARAM lParam)
+static int OnModulesLoaded(WPARAM wParam, LPARAM lParam)
{
HANDLE hHookOptionInit;
NETLIBUSER nlu = {0};
@@ -86,6 +77,12 @@ static int OnModulesLoaded(WPARAM wParam,LPARAM lParam)
return 0;
}
+int __declspec(dllexport) Load()
+{
+ mir_getLP(&pluginInfo);
+ HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
+ return 0;
+}
int __declspec(dllexport) Unload(void)
{
diff --git a/plugins/Watrack_MPD/src/m_music.h b/plugins/Watrack_MPD/src/m_music.h
deleted file mode 100755
index 283910dfce..0000000000
--- a/plugins/Watrack_MPD/src/m_music.h
+++ /dev/null
@@ -1,351 +0,0 @@
-#ifndef M_MUSIC
-#define M_MUSIC
-
-#define MIID_WATRACK {0xfc6c81f4, 0x837e, 0x4430, {0x96, 0x01, 0xa0, 0xaa, 0x43, 0x17, 0x7a, 0xe3}}
-
-typedef struct tSongInfoA {
- char *artist;
- char *title;
- char *album;
- char *genre;
- char *comment;
- char *year;
- char *mfile; // media file
- int kbps;
- int khz;
- int channels;
- int track;
- int total; // music length
- int time; // elapsed time
- char *wndtext; // window title
- char *player; // player name
- int plyver; // player version
- HANDLE icon; // player icon
- int fsize; // media file size
- int vbr;
- int status; // player status: 0 - stopped; 1 - playing; 2 - paused
- HWND plwnd; // player window
- // video part
- int codec;
- int width;
- int height;
- int fps;
- __int64 date;
- char *txtver;
- char *lyric;
- char *cover;
- int volume;
- char *url;
-} SONGINFOA, *LPSONGINFOA;
-
-typedef struct tSongInfo {
- wchar_t *artist;
- wchar_t *title;
- wchar_t *album;
- wchar_t *genre;
- wchar_t *comment;
- wchar_t *year;
- wchar_t *mfile; // media file
- int kbps;
- int khz;
- int channels;
- int track;
- int total; // music length
- int time; // elapsed time
- wchar_t *wndtext; // window title
- wchar_t *player; // player name
- int plyver; // player version
- HANDLE icon; // player icon
- int fsize; // media file size
- int vbr;
- int status; // player status: 0 - stopped; 1 - playing; 2 - paused
- HWND plwnd; // player window
- // video part
- int codec;
- int width;
- int height;
- int fps;
- __int64 date;
- wchar_t *txtver;
- // not implemented yet
- wchar_t *lyric;
- wchar_t *cover;
- int volume;
- wchar_t *url;
-} SONGINFO, *LPSONGINFO;
-
-#define WAT_INF_TCHAR WAT_INF_UNICODE
-#define SongInfoT tSongInfo
-
-
- // result codes
-#define WAT_RES_UNKNOWN -2
-#define WAT_RES_NOTFOUND -1
-#define WAT_RES_ERROR WAT_RES_NOTFOUND
-#define WAT_RES_OK 0
-#define WAT_RES_ENABLED WAT_RES_OK
-#define WAT_RES_DISABLED 1
- // internal
-#define WAT_RES_NEWFILE 3
-
-#define WAT_PLS_NORMAL WAT_RES_OK
-#define WAT_PLS_NOMUSIC WAT_RES_DISABLED
-#define WAT_PLS_NOTFOUND WAT_RES_NOTFOUND
-
-#define WAT_INF_UNICODE 0
-#define WAT_INF_ANSI 1
-#define WAT_INF_UTF8 2
-#define WAT_INF_CHANGES 0x100
-
-/*
- wParam : WAT_INF_* constant
- lParam : pointer to LPSONGINGO (Unicode) or LPSONGINFOA (ANSI/UTF8)
- Affects: Fill structure by currently played music info
- returns: WAT_PLS_* constant
- note: pointer will be point to global SONGINFO structure of plugin
- warning: Non-Unicode data filled only by request
- if lParam=0 only internal SongInfo structure will be filled
- Example:
- LPSONGINFO p;
- PluginLink->CallService(MS_WAT_GETMUSICINFO,0,(DWORD)&p);
-*/
-
-#define MS_WAT_GETMUSICINFO "WATrack/GetMusicInfo"
-
-/*
- wParam:0
- lParam : pointer to pSongInfo (Unicode)
- Affects: Fill structure by info from file named in SongInfo.mfile
- returns: 0, if success
- note: fields, which values can't be obtained, leaves old values.
- you must free given strings by miranda mmi.free
-*/
-#define MS_WAT_GETFILEINFO "WATrack/GetFileInfo"
-
-/*
- wParam: encoding (WAT_INF_* consts, 0 = WAT_INF_UNICODE)
- lParam: codepage (0 = ANSI)
- Returns Global unicode SongInfo pointer or tranlated to Ansi/UTF8 structure
-*/
-#define MS_WAT_RETURNGLOBAL "WATrack/GetMainStructure"
-
-#define WAT_CTRL_PREV 1
-#define WAT_CTRL_PLAY 2
-#define WAT_CTRL_PAUSE 3
-#define WAT_CTRL_STOP 4
-#define WAT_CTRL_NEXT 5
-#define WAT_CTRL_VOLDN 6
-#define WAT_CTRL_VOLUP 7
-#define WAT_CTRL_SEEK 8 // lParam is new position (sec)
-/*
- wParam: button code (WAT_CTRL_* const)
- lParam: 0, or value (see WAT_CTRL_* const comments)
- Affects: emulate player button pressing
- returns: 0 if unsuccesful
-*/
-#define MS_WAT_PRESSBUTTON "WATrack/PressButton"
-
-/*
- Get user's Music Info
-*/
-#define MS_WAT_GETCONTACTINFO = "WATrack/GetContactInfo"
-
-// ------------ Plugin/player status ------------
-
-/*
- wParam: 1 - switch off plugin
- 0 - switch on plugin
- -1 - switch plugin status
- 2 - get plugin version
- other - get plugin status
- lParam: 0
- Affects: Switch plugin status to enabled or disabled
- returns: version, old plugin status, 0, if was enabled
-*/
-
-#define MS_WAT_PLUGINSTATUS "WATrack/PluginStatus"
-
-#define ME_WAT_MODULELOADED "WATrack/ModuleLoaded"
-
-#define WAT_EVENT_PLAYERSTATUS 1 // 0-normal; 1-no music (possibly stopped); 2-not found
-#define WAT_EVENT_NEWTRACK 2
-#define WAT_EVENT_PLUGINSTATUS 3 // 0-enabled; 1-dis.temporary; 2-dis.permanent
-#define WAT_EVENT_NEWPLAYER 4 //
-#define WAT_EVENT_NEWTEMPLATE 5 // TM_* constant
-
-/*
- Plugin or player status changed:
- wParam: type of event (see above)
- lParam: value
-*/
-#define ME_WAT_NEWSTATUS "WATrack/NewStatus"
-
-// ---------- Popup module ------------
-
-/*
- wParam: not used
- lParam: not used
- Affects: Show popup or Info window with current music information
- note: Only Info window will be showed if Popup plugin disabled
-*/
-
-#define MS_WAT_SHOWMUSICINFO "WATrack/ShowMusicInfo"
-
-// --------- Statistic (report) module -------------
-
-/*
- wParam: pointer to log file name or NULL
- lParam: pointer to report file name or NULL
- Affects: Create report from log and run it (if option is set)
- returns: 0 if unsuccesful
- note: if wParam or lParam is a NULL then file names from options are used
-*/
-#define MS_WAT_MAKEREPORT "WATrack/MakeReport"
-
-/*
- wParam, lParam - not used
- Affects: pack statistic file
-*/
-#define MS_WAT_PACKLOG = "WATrack/PackLog"
-
-/*
- wParam: not used
- lParam: pointer to SongInfo
-*/
-#define MS_WAT_ADDTOLOG = "WATrack/AddToLog"
-
-// ----------- Formats and players -----------
-
-// media file status
-
-#define WAT_MES_STOPPED 0
-#define WAT_MES_PLAYING 1
-#define WAT_MES_PAUSED 2
-#define WAT_MES_UNKNOWN -1
-
-#define WAT_ACT_REGISTER 1
-#define WAT_ACT_UNREGISTER 2
-#define WAT_ACT_DISABLE 3
-#define WAT_ACT_ENABLE 4
-#define WAT_ACT_GETSTATUS 5 // not found/enabled/disabled
-#define WAT_ACT_SETACTIVE 6
-#define WAT_ACT_REPLACE 0x10000 // can be combined with WAT_REGISTERFORMAT
-
- // flags
-#define WAT_OPT_DISABLED 0x00000001 // format registered but disabled
-#define WAT_OPT_ONLYONE 0x00000002 // format can't be overwriten
-#define WAT_OPT_PLAYERINFO 0x00000004 // song info from player
-#define WAT_OPT_WINAMPAPI 0x00000008 // Winamp API support
-#define WAT_OPT_CHECKTIME 0x00000010 // check file time for changes
-#define WAT_OPT_VIDEO 0x00000020 // only for format registering used
-#define WAT_OPT_LAST 0x00000040 // (internal)
-#define WAT_OPT_FIRST 0x00000080 // (internal)
-#define WAT_OPT_TEMPLATE 0x00000100 // (internal)
-#define WAT_OPT_IMPLANTANT 0x00000200 // use process implantation
-#define WAT_OPT_HASURL 0x00000400 // (player registration) URL field present
-#define WAT_OPT_CHANGES 0x00000800 // obtain only chaged values
- // (volume, status, window text, elapsed time)
-#define WAT_OPT_APPCOMMAND 0x00001000 // Special (multimedia) key support
-#define WAT_OPT_CHECKALL 0x00002000 // Check all players
-#define WAT_OPT_KEEPOLD 0x00004000 // Keep Old opened file
-#define WAT_OPT_MULTITHREAD 0x00008000 // Use multithread scan
-#define WAT_OPT_SINGLEINST 0x00010000 // Single player instance
-
-
-typedef BOOL (__cdecl *LPREADFORMATPROC)(LPSONGINFO Info);
-
-typedef struct tMusicFormat {
- LPREADFORMATPROC proc;
- char ext[8];
- int flags;
-} MUSICFORMAT, *LPMUSICFORMAT;
-
-/*
- wParam: action
- lParam: pointer to MUSICFORMAT if wParam = WAT_ACT_REGISTER,
- else - pointer to extension string (ANSI)
- returns: see result codes
-*/
-
-#define MS_WAT_FORMAT "WATrack/Format"
-
-/*
- wParam - pointer to SONGINFO structure (plwind field must be initialized)
- lParam - flags
-*/
-
-#define MS_WAT_WINAMPINFO "WATrack/WinampInfo"
-
-/*
- wParam: window
- lParam: LoWord - command; HiWord - value
-*/
-
-#define MS_WAT_WINAMPCOMMAND "WATrack/WinampCommand"
-
-int tInitProc();
-int tDeInitProc();
-int tStatusProc();
-
-typedef int (__cdecl *LPINITPROC)();
-typedef int (__cdecl *LPDEINITPROC)();
-typedef int (__cdecl *LPSTATUSPROC)(HWND wnd);
-typedef wchar_t (__cdecl *LPNAMEPROC)(HWND wnd, int flags);
-typedef HWND (__cdecl *LPCHECKPROC)(HWND wnd, int flags);
-typedef int (__cdecl *LPGETSTATUSPROC) (HWND wnd);
-typedef int (__cdecl *LPINFOPROC)(LPSONGINFO Info, int flags);
-typedef int (__cdecl *LPCOMMANDPROC)(HWND wnd, int command, int value);
-
-typedef struct tPlayerCell {
- char *Desc;
- int flags;
- HICON Icon; // can be 0. for registration only
- LPINITPROC Init;
- LPDEINITPROC DeInit;
- LPCHECKPROC Check; // check player
- LPGETSTATUSPROC GetStatus;
- LPNAMEPROC GetName; // can be NULL. get media filename
- LPINFOPROC GetInfo; // can be NULL. get info from player
- LPCOMMANDPROC Command; // can be NULL. send command to player
- char *URL; // only if WAT_OPT_HASURL flag present
- wchar_t *Notes;
-} PLAYERCELL, *LPPLAYERCELL;
-
-/*
- wParam: action
- lParam: pointer to PLAYERCELL if wParam = WAT_ACT_REGISTER,
- else - pointer to player description string (ANSI)
- returns: player window handle or value>0 if found
- note: If you use GetName or GetInfo field, please, do not return empty
- filename even when mediafile is remote!
-*/
-
-#define MS_WAT_PLAYER "WATrack/Player"
-
-// --------- Templates ----------
-
-/*
- wParam: not used
- lParam: Unicode template
- returns: New Unicode (replaced) string
-*/
-#define MS_WAT_REPLACETEXT "WATrack/ReplaceText"
-
-/*
- event types for History
- Blob structure for EVENTTYPE_WAT_ANSWER:
- Uniciode artist#0title#0album#0answer
-*/
-#define EVENTTYPE_WAT_REQUEST 9601
-#define EVENTTYPE_WAT_ANSWER 9602
-#define EVENTTYPE_WAT_ERROR 9603
-#define EVENTTYPE_WAT_MESSAGE 9604
-
-/*
- wParam: 0 or parent window
- lParam: 0
- note: Shows Macro help window with edit aliases ability
-*/
-#define MS_WAT_MACROHELP "WATrack/MacroHelp"
-
-#endif
diff --git a/plugins/Watrack_MPD/src/main.cpp b/plugins/Watrack_MPD/src/main.cpp
index 17a8c29d64..eec0a6b1af 100755
--- a/plugins/Watrack_MPD/src/main.cpp
+++ b/plugins/Watrack_MPD/src/main.cpp
@@ -14,169 +14,38 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-
-
#include "commonheaders.h"
-
-//maybe add mutex ?
-void Start(void *param);
-int Parser();
-
-LPINITPROC Init()
-{
- mir_forkthread(&Start, 0);
- return 0;
-}
-void Stop();
-LPDEINITPROC DeInit()
-{
- Stop();
- return 0;
-}
-LPCHECKPROC CheckPlayer(HWND wnd, int flags)
-{
- if(!ghConnection)
- {
- mir_forkthread(&Start, 0);
- return 0;
- }
- if(Parser())
- return (LPCHECKPROC)WAT_MES_STOPPED;
- if(Connected)
- return (LPCHECKPROC)WAT_MES_PLAYING;
- return 0;
-}
-LPGETSTATUSPROC GetStatus()
-{
- if(!ghConnection)
- {
- mir_forkthread(&Start, 0);
- return 0;
- }
- if(Parser())
- return (LPGETSTATUSPROC)-1;
- return (LPGETSTATUSPROC)(gbState);
-}
-LPNAMEPROC GetFileName(HWND wnd, int flags)
-{
- if(!ghConnection)
- {
- mir_forkthread(&Start, 0);
- return 0;
- }
- return 0;
-}
+HANDLE ghConnection;
+HANDLE ghPacketReciever;
+BOOL Connected;
+int gbState;
SONGINFO SongInfo = {0};
-LPINFOPROC GetPlayerInfo(LPSONGINFO info, int flags)
-{
- if(!ghConnection)
- {
- mir_forkthread(&Start, 0);
- return 0;
- }
- if(Parser())
- return (LPINFOPROC)-1;
-/*
-
- info->channels = SongInfo.channels;
- info->codec = SongInfo.codec;
- info->comment = SongInfo.comment;
- info->cover = SongInfo.cover;
- info->date = SongInfo.date;
- info->fps = SongInfo.fps;
- info->fsize = SongInfo.fsize;
-
- info->icon = SongInfo.icon;
- info->kbps = SongInfo.kbps;
- info->khz = SongInfo.khz;
- info->lyric = SongInfo.lyric;
- info->mfile = SongInfo.mfile;
- info->player = SongInfo.player;
- info->plyver = SongInfo.plyver;
- info->status = SongInfo.status;
- info->time = SongInfo.time;
- info->title = SongInfo.title;
- info->total = SongInfo.total;
- info->track = SongInfo.track;*/
- info->total = SongInfo.total;
- info->time = SongInfo.time;
- info->mfile = SongInfo.mfile;
- info->txtver = SongInfo.txtver;
- info->title = SongInfo.title;
- info->artist = SongInfo.artist;
- info->genre = SongInfo.genre;
- info->album = SongInfo.album;
- info->year = SongInfo.year;
- info->kbps = SongInfo.kbps;
- info->track = SongInfo.track;
- info->khz = SongInfo.khz;
- info->volume = SongInfo.volume;
-/* info->url = SongInfo.url; //??
- info->vbr = SongInfo.vbr;
- info->volume = SongInfo.volume;
- */
- return 0;
-}
-LPCOMMANDPROC SendCommand(HWND wnd, int command, int value)
+void Start(void* param)
{
- switch (command)
- {
- case WAT_CTRL_PREV:
- Netlib_Send(ghConnection, "previous\n", strlen("previous\n"), 0);
- break;
- case WAT_CTRL_PLAY: //add resuming support
- if(gbState != WAT_MES_PAUSED)
- Netlib_Send(ghConnection, "play\n", strlen("play\n"), 0);
- else
- Netlib_Send(ghConnection, "pause 0\n", strlen("pause 0\n"), 0);
- break;
- case WAT_CTRL_PAUSE:
- Netlib_Send(ghConnection, "pause 1\n", strlen("pause 1\n"), 0);
- break;
- case WAT_CTRL_STOP:
- Netlib_Send(ghConnection, "stop\n", strlen("stop\n"), 0);
- break;
- case WAT_CTRL_NEXT:
- Netlib_Send(ghConnection, "next\n", strlen("next\n"), 0);
- break;
- case WAT_CTRL_VOLDN:
- break;
- case WAT_CTRL_VOLUP:
- break;
- case WAT_CTRL_SEEK:
- break;
- default:
- break;
- }
- return 0;
+ NETLIBOPENCONNECTION nloc = {0};
+ char *tmp = (char*)mir_u2a(gbHost);
+ nloc.cbSize = sizeof(nloc);
+ nloc.szHost = tmp;
+ nloc.timeout = 5;
+ nloc.wPort = gbPort;
+ Connected = FALSE;
+ ghConnection = NetLib_CreateConnection(ghNetlibUser, &nloc);
+ if(ghConnection)
+ ghPacketReciever = (HANDLE)CallService(MS_NETLIB_CREATEPACKETRECVER,(WPARAM)ghConnection,2048);
}
-
-void RegisterPlayer()
+void ReStart(void *param)
{
- if(!bWatrackService)
- return;
- {
- PLAYERCELL player = {0};
- player.Desc = "Music Player Daemon";
- player.Check = (LPCHECKPROC)CheckPlayer;
- player.Init = (LPINITPROC)Init;
- player.DeInit = (LPDEINITPROC)DeInit;
- player.GetStatus = (LPGETSTATUSPROC)GetStatus;
- player.Command = (LPCOMMANDPROC)SendCommand;
- player.flags = (WAT_OPT_HASURL|WAT_OPT_SINGLEINST|WAT_OPT_PLAYERINFO);
- player.GetName = (LPNAMEPROC)GetFileName;
- player.GetInfo = (LPINFOPROC)GetPlayerInfo;
-// player.Icon = //TODO:implement icon support
- player.Notes = _T("mpd is a nice music player for *nix which have not any gui, just daemon.\nuses very small amount of ram, cpu.");
- player.URL = "http://www.musicpd.org";
- CallService(MS_WAT_PLAYER, (WPARAM)WAT_ACT_REGISTER, (LPARAM)&player);
- }
+ if(ghPacketReciever)
+ Netlib_CloseHandle(ghPacketReciever);
+ if(ghConnection)
+ Netlib_CloseHandle(ghConnection);
+ Sleep(500);
+ mir_forkthread(&Start, 0);
}
-void ReStart(void *data);
+
int Parser()
{
static NETLIBPACKETRECVER nlpr = {0};
@@ -246,7 +115,7 @@ int Parser()
}
nlpr.bytesUsed = nlpr.bytesAvailable;
}
- buf = nlpr.buffer;
+ buf = (char*)nlpr.buffer;
if(ptr = strstr(buf, "MPD"))
{
Connected = TRUE;
@@ -398,20 +267,6 @@ int Parser()
return 0;
}
-
-void Start(void* param)
-{
- NETLIBOPENCONNECTION nloc = {0};
- char *tmp = (char*)mir_u2a(gbHost);
- nloc.cbSize = sizeof(nloc);
- nloc.szHost = tmp;
- nloc.timeout = 5;
- nloc.wPort = gbPort;
- Connected = FALSE;
- ghConnection = NetLib_CreateConnection(ghNetlibUser, &nloc);
- if(ghConnection)
- ghPacketReciever = (HANDLE)CallService(MS_NETLIB_CREATEPACKETRECVER,(WPARAM)ghConnection,2048);
-}
void Stop()
{
if(ghPacketReciever)
@@ -421,13 +276,158 @@ void Stop()
if(ghNetlibUser && (ghNetlibUser != INVALID_HANDLE_VALUE))
CallService(MS_NETLIB_SHUTDOWN,(WPARAM)ghNetlibUser,0);
}
-void ReStart(void *param)
+
+LPINITPROC Init()
{
- if(ghPacketReciever)
- Netlib_CloseHandle(ghPacketReciever);
- if(ghConnection)
- Netlib_CloseHandle(ghConnection);
- Sleep(500);
mir_forkthread(&Start, 0);
+ return 0;
+}
+
+LPDEINITPROC DeInit()
+{
+ Stop();
+ return 0;
+}
+
+LPCHECKPROC CheckPlayer(HWND wnd, int flags)
+{
+ if(!ghConnection)
+ {
+ mir_forkthread(&Start, 0);
+ return 0;
+ }
+ if(Parser())
+ return (LPCHECKPROC)WAT_MES_STOPPED;
+ if(Connected)
+ return (LPCHECKPROC)WAT_MES_PLAYING;
+ return 0;
}
+LPSTATUSPROC GetStatus()
+{
+ if(!ghConnection)
+ {
+ mir_forkthread(&Start, 0);
+ return 0;
+ }
+ if(Parser())
+ return (LPSTATUSPROC)-1;
+ return (LPSTATUSPROC)(gbState);
+}
+
+LPNAMEPROC GetFileName(HWND wnd, int flags)
+{
+ if(!ghConnection)
+ {
+ mir_forkthread(&Start, 0);
+ return 0;
+ }
+ return 0;
+}
+
+LPINFOPROC GetPlayerInfo(LPSONGINFO info, int flags)
+{
+ if(!ghConnection)
+ {
+ mir_forkthread(&Start, 0);
+ return 0;
+ }
+ if(Parser())
+ return (LPINFOPROC)-1;
+/*
+
+ info->channels = SongInfo.channels;
+ info->codec = SongInfo.codec;
+ info->comment = SongInfo.comment;
+ info->cover = SongInfo.cover;
+ info->date = SongInfo.date;
+ info->fps = SongInfo.fps;
+ info->fsize = SongInfo.fsize;
+
+ info->icon = SongInfo.icon;
+ info->kbps = SongInfo.kbps;
+ info->khz = SongInfo.khz;
+ info->lyric = SongInfo.lyric;
+ info->mfile = SongInfo.mfile;
+ info->player = SongInfo.player;
+ info->plyver = SongInfo.plyver;
+ info->status = SongInfo.status;
+ info->time = SongInfo.time;
+ info->title = SongInfo.title;
+ info->total = SongInfo.total;
+ info->track = SongInfo.track;*/
+ info->total = SongInfo.total;
+ info->time = SongInfo.time;
+ info->mfile = SongInfo.mfile;
+ info->txtver = SongInfo.txtver;
+ info->title = SongInfo.title;
+ info->artist = SongInfo.artist;
+ info->genre = SongInfo.genre;
+ info->album = SongInfo.album;
+ info->year = SongInfo.year;
+ info->kbps = SongInfo.kbps;
+ info->track = SongInfo.track;
+ info->khz = SongInfo.khz;
+ info->volume = SongInfo.volume;
+/* info->url = SongInfo.url; //??
+ info->vbr = SongInfo.vbr;
+ info->volume = SongInfo.volume;
+ */
+ return 0;
+}
+
+LPCOMMANDPROC SendCommand(HWND wnd, int command, int value)
+{
+ switch (command)
+ {
+ case WAT_CTRL_PREV:
+ Netlib_Send(ghConnection, "previous\n", strlen("previous\n"), 0);
+ break;
+ case WAT_CTRL_PLAY: //add resuming support
+ if(gbState != WAT_MES_PAUSED)
+ Netlib_Send(ghConnection, "play\n", strlen("play\n"), 0);
+ else
+ Netlib_Send(ghConnection, "pause 0\n", strlen("pause 0\n"), 0);
+ break;
+ case WAT_CTRL_PAUSE:
+ Netlib_Send(ghConnection, "pause 1\n", strlen("pause 1\n"), 0);
+ break;
+ case WAT_CTRL_STOP:
+ Netlib_Send(ghConnection, "stop\n", strlen("stop\n"), 0);
+ break;
+ case WAT_CTRL_NEXT:
+ Netlib_Send(ghConnection, "next\n", strlen("next\n"), 0);
+ break;
+ case WAT_CTRL_VOLDN:
+ break;
+ case WAT_CTRL_VOLUP:
+ break;
+ case WAT_CTRL_SEEK:
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+void RegisterPlayer()
+{
+ if(!bWatrackService)
+ return;
+ {
+ PLAYERCELL player = {0};
+ player.Desc = "Music Player Daemon";
+ player.Check = (LPCHECKPROC)CheckPlayer;
+ player.Init = (LPINITPROC)Init;
+ player.DeInit = (LPDEINITPROC)DeInit;
+ player.GetStatus = (LPSTATUSPROC)GetStatus;
+ player.Command = (LPCOMMANDPROC)SendCommand;
+ player.flags = (WAT_OPT_HASURL|WAT_OPT_SINGLEINST|WAT_OPT_PLAYERINFO);
+ player.GetName = (LPNAMEPROC)GetFileName;
+ player.GetInfo = (LPINFOPROC)GetPlayerInfo;
+// player.Icon = //TODO:implement icon support
+ player.Notes = _T("mpd is a nice music player for *nix which have not any gui, just daemon.\nuses very small amount of ram, cpu.");
+ player.URL = "http://www.musicpd.org";
+ CallService(MS_WAT_PLAYER, (WPARAM)WAT_ACT_REGISTER, (LPARAM)&player);
+ }
+} \ No newline at end of file
diff --git a/plugins/Watrack_MPD/src/options.cpp b/plugins/Watrack_MPD/src/options.cpp
index ef607d78ed..770d5988b0 100755
--- a/plugins/Watrack_MPD/src/options.cpp
+++ b/plugins/Watrack_MPD/src/options.cpp
@@ -15,26 +15,6 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "commonheaders.h"
-#include <uxtheme.h>
-
-HINSTANCE hInst;
-static INT_PTR CALLBACK DlgProcWaMpdOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-
-int WaMpdOptInit(WPARAM wParam,LPARAM lParam)
-{
- OPTIONSDIALOGPAGE odp = { 0 };
- odp.cbSize = sizeof(odp);
- odp.hInstance = hInst;
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_WA_MPD);
- odp.ptszTitle = LPGENT("Winamp Track");
- odp.ptszGroup = LPGENT("Plugins");
- odp.ptszTab = LPGENT("Watrack MPD");
- odp.flags=ODPF_BOLDGROUPS|ODPF_TCHAR;
- odp.pfnDlgProc = DlgProcWaMpdOpts;
- Options_AddPage(wParam, &odp);
- return 0;
-}
-
static INT_PTR CALLBACK DlgProcWaMpdOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
@@ -52,11 +32,6 @@ static INT_PTR CALLBACK DlgProcWaMpdOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
case WM_COMMAND:
{
- switch (LOWORD(wParam))
- {
-
- }
-
SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
break;
}
@@ -87,5 +62,17 @@ static INT_PTR CALLBACK DlgProcWaMpdOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
return FALSE;
}
-
-
+int WaMpdOptInit(WPARAM wParam,LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.hInstance = hInst;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_WA_MPD);
+ odp.ptszTitle = LPGENT("Winamp Track");
+ odp.ptszGroup = LPGENT("Plugins");
+ odp.ptszTab = LPGENT("Watrack MPD");
+ odp.flags=ODPF_BOLDGROUPS|ODPF_TCHAR;
+ odp.pfnDlgProc = DlgProcWaMpdOpts;
+ Options_AddPage(wParam, &odp);
+ return 0;
+}