From 5dda2b2174733f6ffa8ad7b93c736345df17abfc Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 19 Nov 2009 12:04:34 +0200 Subject: modified: watrack_mpd/globals.h modified: watrack_mpd/init.c modified: watrack_mpd/m_music.h modified: watrack_mpd/main.c modified: watrack_mpd/options.c modified: watrack_mpd/utilities.c modified: watrack_mpd/utilities.h --- watrack_mpd/globals.h | 1 + watrack_mpd/init.c | 3 +- watrack_mpd/m_music.h | 2 +- watrack_mpd/main.c | 138 +++++++++++++++++++++++++++++++++++++++++------- watrack_mpd/options.c | 8 +-- watrack_mpd/utilities.c | 32 ----------- watrack_mpd/utilities.h | 4 -- 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); -- cgit v1.2.3