summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss123next@list.ru>2009-11-19 16:56:36 +0200
committerGluzskiy Alexandr <sss123next@list.ru>2009-11-19 16:56:36 +0200
commit51255531e9412bd81c13dd7e8d5dbea51e811bb3 (patch)
tree46c583f975a8ff3740222985620d0170f425bc72
parente133acbc62885939b4de37d792b8d4bcfd560304 (diff)
modified: watrack_mpd/globals.h
modified: watrack_mpd/main.c
-rwxr-xr-xwatrack_mpd/globals.h1
-rwxr-xr-xwatrack_mpd/main.c107
2 files changed, 56 insertions, 52 deletions
diff --git a/watrack_mpd/globals.h b/watrack_mpd/globals.h
index 400781f..5b36ede 100755
--- a/watrack_mpd/globals.h
+++ b/watrack_mpd/globals.h
@@ -3,7 +3,6 @@
HANDLE ghNetlibUser;
HANDLE ghConnection;
HANDLE ghPacketReciever;
-HANDLE ghRecieverThread;
BOOL bWatrackService;
TCHAR *gbHost, *gbPassword;
WORD gbPort;
diff --git a/watrack_mpd/main.c b/watrack_mpd/main.c
index 87fd2e5..a64265e 100755
--- a/watrack_mpd/main.c
+++ b/watrack_mpd/main.c
@@ -20,6 +20,7 @@
#include "commonheaders.h"
void Start();
+int Parser();
LPINITPROC Init()
{
@@ -39,6 +40,7 @@ LPCHECKPROC CheckPlayer(HWND wnd, int flags)
Start();
return 0;
}
+ Parser();
if(Connected)
return (LPCHECKPROC)1;
return 0;
@@ -50,6 +52,7 @@ LPGETSTATUSPROC GetStatus()
Start();
return 0;
}
+ Parser();
return (LPGETSTATUSPROC)gbState;
}
LPNAMEPROC GetFileName(HWND wnd, int flags)
@@ -62,6 +65,7 @@ LPNAMEPROC GetFileName(HWND wnd, int flags)
return 0;
}
SONGINFO SongInfo = {0};
+
LPINFOPROC GetPlayerInfo(LPSONGINFO info, int flags)
{
if(!ghConnection)
@@ -69,6 +73,7 @@ LPINFOPROC GetPlayerInfo(LPSONGINFO info, int flags)
Start();
return 0;
}
+ Parser();
/* info->album = SongInfo.album;
info->channels = SongInfo.channels;
@@ -132,21 +137,55 @@ void RegisterPlayer()
}
}
-int Parser(unsigned char *buf)
+int Parser()
{
+ NETLIBPACKETRECVER nlpr = {0};
char *ptr;
char tmp[128];
int i;
+ char *buf;
+ static char ver[16];
+ nlpr.cbSize = sizeof(nlpr);
+ nlpr.dwTimeout = 5;
+
+ if(ghConnection)
+ {
+ int recvResult;
+ if(!Connected)
+ {
+ recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
+ if(recvResult == 0)
+ return 1;
+ if (recvResult == SOCKET_ERROR)
+ return 1;
+ }
+ Netlib_Send(ghConnection, "status\n", strlen("status\n"), 0);
+ recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
+ if(recvResult == 0)
+ return 1;
+ if (recvResult == SOCKET_ERROR)
+ return 1;
+ Netlib_Send(ghConnection, "currentsong\n", strlen("currentsong\n"), 0);
+ recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
+ if(recvResult == 0)
+ return 1;
+ if (recvResult == SOCKET_ERROR)
+ return 1;
+ nlpr.bytesUsed = nlpr.bytesAvailable;
+ }
+ buf = nlpr.buffer;
if(ptr = strstr(buf, "MPD"))
{
Connected = TRUE;
ptr = &ptr[4];
for(i = 0; ((ptr[i] != '\n') && (ptr[i] != '\0')); i++)
tmp[i] = ptr[i];
- tmp[i+1] = '\0';
-// SongInfo.txtver = (TCHAR*)mir_a2t(tmp);
- SongInfo.txtver = (TCHAR*)mir_strdup(tmp);
+ tmp[i] = '\0';
+ strcpy(ver, tmp);
+ SongInfo.txtver = (TCHAR*)mir_a2t(tmp);
}
+ else if(strlen(ver) > 2)
+ SongInfo.txtver = (TCHAR*)mir_a2t(tmp);
else if (!SongInfo.txtver)
SongInfo.txtver = _T("");
if(ptr = strstr(buf, "file:"))
@@ -154,9 +193,9 @@ int Parser(unsigned char *buf)
ptr = &ptr[6];
for(i = 0; ((ptr[i] != '\n') && (ptr[i] != '\0')); i++)
tmp[i] = ptr[i];
- tmp[i+1] = '\0';
+ tmp[i] = '\0';
- SongInfo.mfile = (TCHAR*)mir_strdup(tmp);
+ SongInfo.mfile = (TCHAR*)mir_a2t(tmp);
}
else if(!SongInfo.mfile)
SongInfo.mfile = _T("");
@@ -165,7 +204,7 @@ int Parser(unsigned char *buf)
ptr = &ptr[6];
for(i = 0; ((ptr[i] != '\n') && (ptr[i] != '\0')); i++)
tmp[i] = ptr[i];
- tmp[i+1] = '\0';
+ tmp[i] = '\0';
SongInfo.total = atoi(tmp);
}
else if(!SongInfo.total)
@@ -185,8 +224,8 @@ int Parser(unsigned char *buf)
ptr = &ptr[7];
for(i = 0; ((ptr[i] != '\n') && (ptr[i] != '\0')); i++)
tmp[i] = ptr[i];
- tmp[i+1] = '\0';
- SongInfo.title = (TCHAR*)mir_strdup(tmp);
+ tmp[i] = '\0';
+ SongInfo.title = (TCHAR*)mir_a2t(tmp);
}
else if(!SongInfo.title)
SongInfo.title = _T("");
@@ -195,8 +234,8 @@ int Parser(unsigned char *buf)
ptr = &ptr[8];
for(i = 0; ((ptr[i] != '\n') && (ptr[i] != '\0')); i++)
tmp[i] = ptr[i];
- tmp[i+1] = '\0';
- SongInfo.artist = (TCHAR*)mir_strdup(tmp);
+ tmp[i] = '\0';
+ SongInfo.artist = (TCHAR*)mir_a2t(tmp);
}
else if(!SongInfo.artist)
SongInfo.artist = _T("");
@@ -205,8 +244,8 @@ int Parser(unsigned char *buf)
ptr = &ptr[7];
for(i = 0; ((ptr[i] != '\n') && (ptr[i] != '\0')); i++)
tmp[i] = ptr[i];
- tmp[i+1] = '\0';
- SongInfo.genre = (TCHAR*)mir_strdup(tmp);
+ tmp[i] = '\0';
+ SongInfo.genre = (TCHAR*)mir_a2t(tmp);
}
else if(!SongInfo.genre)
SongInfo.genre = _T("");
@@ -228,55 +267,21 @@ int Parser(unsigned char *buf)
return 0;
}
-DWORD __stdcall Reciever(LPVOID lp)
+
+void Start()
{
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_CREATEPACKETRECVER,(WPARAM)ghConnection,2048);
- while(ghConnection)
- {
- recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
- if(recvResult == 0)
- break;
- if (recvResult == SOCKET_ERROR)
- break;
- Netlib_Send(ghConnection, "status\n", strlen("status\n"), 0);
- recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
- if(recvResult == 0)
- break;
- if (recvResult == SOCKET_ERROR)
- break;
- Netlib_Send(ghConnection, "currentsong\n", strlen("currentsong\n"), 0);
- recvResult = CallService(MS_NETLIB_GETMOREPACKETS,(WPARAM)ghPacketReciever, (LPARAM)&nlpr);
- if(recvResult == 0)
- break;
- if (recvResult == SOCKET_ERROR)
- break;
- Parser(nlpr.buffer);
- nlpr.bytesUsed = nlpr.bytesAvailable;
- Sleep(1000); //do not flood daemon
- }
- return 0;
-}
-
-void Start()
-{
- DWORD pid;
- ghRecieverThread = CreateThreadEx((pThreadFuncEx)Reciever, 0, &pid);
+ if(ghConnection)
+ ghPacketReciever = (HANDLE)CallService(MS_NETLIB_CREATEPACKETRECVER,(WPARAM)ghConnection,2048);
}
void Stop()
{
- TerminateThread(ghRecieverThread, 0);
if(ghNetlibUser && (ghNetlibUser != INVALID_HANDLE_VALUE))
CallService(MS_NETLIB_SHUTDOWN,(WPARAM)ghNetlibUser,0);
}