summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xwatrack_mpd/globals.h1
-rwxr-xr-xwatrack_mpd/init.c3
-rw-r--r--watrack_mpd/m_music.h2
-rwxr-xr-xwatrack_mpd/main.c138
-rwxr-xr-xwatrack_mpd/options.c8
-rwxr-xr-xwatrack_mpd/utilities.c32
-rwxr-xr-xwatrack_mpd/utilities.h4
7 files changed, 126 insertions, 62 deletions
diff --git a/watrack_mpd/globals.h b/watrack_mpd/globals.h
index e1d54e8..20beab9 100755
--- a/watrack_mpd/globals.h
+++ b/watrack_mpd/globals.h
@@ -7,4 +7,5 @@ HANDLE ghRecieverThread;
BOOL bWatrackService;
TCHAR *gbHost, *gbPassword;
WORD gbPort;
+BOOL Connected;
#endif
diff --git a/watrack_mpd/init.c b/watrack_mpd/init.c
index bbc11eb..85c5b87 100755
--- a/watrack_mpd/init.c
+++ b/watrack_mpd/init.c
@@ -102,14 +102,13 @@ static int OnModulesLoaded(WPARAM wParam,LPARAM lParam)
if (ServiceExists("WATrack/Player"))
bWatrackService = TRUE;
RegisterPlayer();
+
return 0;
}
int __declspec(dllexport) Unload(void)
{
- if(ghNetlibUser && (ghNetlibUser != INVALID_HANDLE_VALUE))
- CallService(MS_NETLIB_SHUTDOWN,(WPARAM)ghNetlibUser,0);
free(gbHost);
free(gbPassword);
return 0;
diff --git a/watrack_mpd/m_music.h b/watrack_mpd/m_music.h
index fabfe57..9c53297 100644
--- a/watrack_mpd/m_music.h
+++ b/watrack_mpd/m_music.h
@@ -66,7 +66,7 @@ typedef struct tSongInfo {
int height;
int fps;
__int64 date;
- wchar_t txtver;
+ wchar_t *txtver;
// not implemented yet
wchar_t *lyric;
wchar_t *cover;
diff --git a/watrack_mpd/main.c b/watrack_mpd/main.c
index aa7aeef..ce0f60b 100755
--- a/watrack_mpd/main.c
+++ b/watrack_mpd/main.c
@@ -19,16 +19,23 @@
#include "commonheaders.h"
+void Start();
+
LPINITPROC Init()
{
+ Start();
return 0;
}
+void Stop();
LPDEINITPROC DeInit()
{
+ Stop();
return 0;
}
LPCHECKPROC CheckPlayer(HWND wnd, int flags)
{
+ if(Connected)
+ return (LPCHECKPROC)1;
return 0;
}
LPGETSTATUSPROC GetStatus()
@@ -39,8 +46,42 @@ LPNAMEPROC GetFileName(HWND wnd, int flags)
{
return 0;
}
-LPINFOPROC GetPlayerInfo(LPSONGINFO Info, int flags)
+SONGINFO SongInfo = {0};
+LPINFOPROC GetPlayerInfo(LPSONGINFO info, int flags)
{
+/* info->album = SongInfo.album;
+ info->artist = SongInfo.artist;
+ 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->genre = SongInfo.genre;
+ 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->time = SongInfo.time;
+ _tcscpy(info->mfile, SongInfo.mfile);
+ _tcscpy(info->txtver, SongInfo.txtver); //??
+/* info->url = SongInfo.url; //??
+ info->vbr = SongInfo.vbr;
+ info->volume = SongInfo.volume;
+ info->year = SongInfo.year;*/
+ free(SongInfo.txtver);
+ free(SongInfo.mfile);
+ free(SongInfo.title);
+
return 0;
}
LPCOMMANDPROC SendCommand(HWND wnd, int command, int value)
@@ -53,44 +94,103 @@ void RegisterPlayer()
{
if(!bWatrackService)
return;
- else //для красоты
{
PLAYERCELL player = {0};
- player.Desc = "MPD desc";
+ 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 = 0;
+// player.flags = (WAT_OPT_HASURL|WAT_OPT_SINGLEINST);
player.GetName = (LPNAMEPROC)GetFileName;
player.GetInfo = (LPINFOPROC)GetPlayerInfo;
-// player.Icon =
+// player.Icon = //TODO:implement icon support
player.Notes = _T("123");
- player.URL = "http:// ?";
+ player.URL = "http://www.musicpd.org";
CallService(MS_WAT_PLAYER, (WPARAM)WAT_ACT_REGISTER, (LPARAM)&player);
}
}
-DWORD __stdcall Reciever(LPVOID lp)
+int Parser(unsigned char *buf, int len)
{
- NETLIBOPENCONNECTION nloc;
- nloc.cbSize = sizeof(NETLIBOPENCONNECTION);
- nloc.flags = 0;
- nloc.szHost = (char*)mir_u2a(UniGetContactSettingUtf(NULL, szModuleName, "Host", _T("127.0.0.1")));
- nloc.wPort = DBGetContactSettingWord(NULL, szModuleName, "Port", 6600);
- ghConnection = NetLib_CreateConnection(ghNetlibUser, &nloc);
- ghPacketReciever = CreatePacketReciever();
+ char *ptr;
+ char tmp[128];
+ int i;
+ if(ptr = strstr(buf, "MPD"))
+ {
+ Connected = TRUE;
+ ptr = &ptr[4];
+ for(i = 0; ptr[i] != '\n'; i++)
+ tmp[i] = ptr[i];
+ tmp[i+1] = '\0';
+ SongInfo.txtver = (TCHAR*)mir_a2t(tmp);
+ }
+ if(ptr = strstr(buf, "file:"))
+ {
+ ptr = &ptr[6];
+ for(i = 0; ptr[i] != '\n'; i++)
+ tmp[i] = ptr[i];
+ tmp[i+1] = '\0';
+ SongInfo.mfile = (TCHAR*)mir_a2t(tmp);
+ }
+ if(ptr = strstr(buf, "Time:"))
+ {
+ ptr = &ptr[6];
+ for(i = 0; ptr[i] != '\n'; i++)
+ tmp[i] = ptr[i];
+ tmp[i+1] = '\0';
+ SongInfo.time = atoi(tmp);
+ }
+ if(ptr = strstr(buf, "Title:"))
+ {
+ ptr = &ptr[7];
+ for(i = 0; ptr[i] != '\n'; i++)
+ tmp[i] = ptr[i];
+ tmp[i+1] = '\0';
+ SongInfo.title = (TCHAR*)mir_a2t(tmp);
+ }
+ return len;
+}
+
+DWORD Reciever(LPVOID lp)
+{
+ NETLIBOPENCONNECTION nloc = {0};
+ NETLIBPACKETRECVER nlpr = {0};
+ int recvResult;
+ char *tmp = (char*)mir_u2a(gbHost);
+ nloc.cbSize = sizeof(nloc);
+ nloc.szHost = tmp;
+ nloc.timeout = 5;
+ nloc.wPort = gbPort;
+ ghConnection = NetLib_CreateConnection(ghNetlibUser, &nloc);
+ free(tmp);
+ nlpr.cbSize = sizeof(nlpr);
+ nlpr.dwTimeout = INFINITE;
+ ghPacketReciever = (HANDLE)CallService(MS_NETLIB_RECV,(WPARAM)ghConnection,0x2400);
+ while(ghConnection)
+ {
+ Netlib_Send(ghConnection, "currentsong\n", strlen("currentsong\n") + 1, 0);
+ Netlib_Send(ghConnection, "status\n", strlen("status\n") + 1, 0);
+ recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
+ if(recvResult == 0)
+ break;
+ if (recvResult == SOCKET_ERROR)
+ break;
+ nlpr.bytesUsed = Parser(nlpr.buffer, nlpr.bytesAvailable);
+ }
return 0;
}
-int Start(WPARAM wParam,LPARAM lParam)
+
+void Start()
{
DWORD pid;
- ghRecieverThread = CreateThreadEx((pThreadFuncEx)Reciever, (HANDLE)wParam, &pid);
- return 0;
+ ghRecieverThread = CreateThreadEx((pThreadFuncEx)Reciever, 0, &pid);
}
-int Stop(WPARAM wParam,LPARAM lParam)
+void Stop()
{
- return 0;
+ if(ghNetlibUser && (ghNetlibUser != INVALID_HANDLE_VALUE))
+ CallService(MS_NETLIB_SHUTDOWN,(WPARAM)ghNetlibUser,0);
}
+
diff --git a/watrack_mpd/options.c b/watrack_mpd/options.c
index 0a82d44..2d89a46 100755
--- a/watrack_mpd/options.c
+++ b/watrack_mpd/options.c
@@ -33,9 +33,6 @@ int WaMpdOptInit(WPARAM wParam,LPARAM lParam)
odp.flags=ODPF_BOLDGROUPS;
odp.pfnDlgProc = DlgProcWaMpdOpts;
CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
-
-
-// ZeroMemory(&odp,sizeof(odp));
return 0;
}
@@ -73,11 +70,14 @@ static BOOL CALLBACK DlgProcWaMpdOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
case PSN_APPLY:
{
TCHAR szText[128];
- DBWriteContactSettingWord(NULL, szModuleName, "Port", (DWORD)GetDlgItemInt(hwndDlg, IDC_PORT, NULL, FALSE));
+ DBWriteContactSettingWord(NULL, szModuleName, "Port", (WORD)GetDlgItemInt(hwndDlg, IDC_PORT, NULL, FALSE));
+ gbPort = (WORD)GetDlgItemInt(hwndDlg, IDC_PORT, NULL, FALSE);
GetDlgItemText(hwndDlg, IDC_SERVER, szText, sizeof(szText));
DBWriteContactSettingTString(NULL, szModuleName, "Server", szText);
+ _tcscpy(gbHost, szText);
GetDlgItemText(hwndDlg, IDC_PASSWORD, szText, sizeof(szText));
DBWriteContactSettingTString(NULL, szModuleName, "Password", szText);
+ _tcscpy(gbPassword, szText);
return TRUE;
}
}
diff --git a/watrack_mpd/utilities.c b/watrack_mpd/utilities.c
index 53092fd..78ceb46 100755
--- a/watrack_mpd/utilities.c
+++ b/watrack_mpd/utilities.c
@@ -107,38 +107,6 @@ char *date()
d[9]=tmp[5];
return d;
}
-
-int Send(char* data)
-{
- NETLIBBUFFER nlb;
- nlb.buf = data;
- nlb.flags = MSG_DUMPASTEXT;
- nlb.len = strlen(data)+1;
- return CallService(MS_NETLIB_SEND,(WPARAM)ghConnection,(LPARAM)&nlb);
-}
-
-int Recv(char *buf)
-{
- NETLIBBUFFER nlb;
- nlb.buf = buf;
- nlb.flags = MSG_DUMPASTEXT;
- nlb.len = strlen(buf)+1;
- return CallService(MS_NETLIB_RECV,(WPARAM)ghConnection,(LPARAM)&nlb);
-}
-HANDLE CreatePacketReciever()
-{
- return (HANDLE)CallService(MS_NETLIB_RECV,(WPARAM)ghConnection,(LPARAM)8192);
-}
-
-NETLIBPACKETRECVER *RecivePackets(int bytesUsed)
-{
- static NETLIBPACKETRECVER nlpr;
- nlpr.bytesUsed = bytesUsed;
- nlpr.dwTimeout = INFINITE;
- nlpr.cbSize = sizeof(NETLIBPACKETRECVER);
- CallService(MS_NETLIB_RECV,(WPARAM)ghPacketReciever,(LPARAM)&nlpr);
- return &nlpr;
-}
HANDLE NetLib_CreateConnection(HANDLE hUser, NETLIBOPENCONNECTION* nloc) //from icq )
{
HANDLE hConnection;
diff --git a/watrack_mpd/utilities.h b/watrack_mpd/utilities.h
index 1da86c0..44fef30 100755
--- a/watrack_mpd/utilities.h
+++ b/watrack_mpd/utilities.h
@@ -1,9 +1,5 @@
#ifndef UTILITIES_H
#define UTILITIES_H
-int Send(char* data);
-int Recv(char *buf);
-HANDLE CreatePacketReciever();
-NETLIBPACKETRECVER *RecivePackets(int bytesUsed);
HANDLE NetLib_CreateConnection(HANDLE hUser, NETLIBOPENCONNECTION* nloc);
HANDLE CreateThreadEx(pThreadFuncEx AFunc, void* arg, DWORD* pThreadID);
TCHAR* __stdcall UniGetContactSettingUtf(HANDLE hContact, const char *szModule,const char* szSetting, TCHAR* szDef);