diff options
Diffstat (limited to 'plugins/ewc/ewc.c')
-rw-r--r-- | plugins/ewc/ewc.c | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/plugins/ewc/ewc.c b/plugins/ewc/ewc.c deleted file mode 100644 index 48336b36..00000000 --- a/plugins/ewc/ewc.c +++ /dev/null @@ -1,231 +0,0 @@ -/* -EasyWinampControl - A Winamp "What's playing" plugin for HexChat -Copyright (C) Yann HAMON & contributors - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library 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 -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -*/ - -#include <windows.h> -#include "hexchat-plugin.h" - -static hexchat_plugin *ph; /* plugin handle */ -static int enable = 1; - -// For example, circularstrstr("winamp", "pwi", 3) would return 5 (the index of p) -int circularstrstr(char* a, char* b, int nb) -{ - int equal = 1; - int length; - int pos=-1; - int i, j; - - length = strlen(a); - - for (i=0; i<length && pos == -1; ++i) { - equal = 1; - for (j=0; j<nb;j++) { - if (a[(i+j)%length] != b[j]) - equal = 0; - } - if (equal == 1) - pos = i; - } - - return pos; -} - -void GetCurrentSongsName(HWND hwndWinamp, char* title, int titlesize) -{ - int pos; - char *title2; - int i, j=0; - int length; - char *p; - - GetWindowText(hwndWinamp, title, titlesize); - length = strlen(title); - - if ((pos = circularstrstr(title, "- Winamp ***", 12)) != -1) { - // The option "scroll song title in taskbar" is on - title2 = (char*) malloc (titlesize*sizeof(char)); - - for (i=(pos+12)%length; i!=pos; i=(i+1)%length) - title2[j++] = title[i]; - - title2[j] = '\0'; - - p = title2; - while (p<title2+titlesize && *p != '.') - p++; - p+=2; // Delete the . and the following white space - - strcpy(title, p); - free(title2); - } - else { - p = title; - while (p<title+titlesize && *p != '.') - p++; - p+=2; // Delete the . and the following white space - if (p<title+titlesize) - strncpy(title, p, titlesize-(p-title)); - - // Delete the trailing "- winamp" - p = title + titlesize - 1; - while (p>title && *p != '-') p--; - *p = '\0'; - } -} - - -// Controlling winamp -static int wcmd_cb(char *word[], char *word_eol[], void *userdata) -{ - // Everything's here : http://winamp.com/nsdn/winamp2x/dev/sdk/api.php - // The previous url seems dead, see http://forums.winamp.com/showthread.php?threadid=180297 - HWND hwndWinamp = NULL; - - if ((hwndWinamp = FindWindow("Winamp v1.x",NULL)) == NULL) { - hexchat_print(ph, "Winamp's window not found - Is winamp really running?\n"); - } - else { - if (strcmp(word[1], "") == 0) - hexchat_print(ph, "Usage: wcmd [command]\n"); - else if (strcmp(word[2], "next") == 0) { - hexchat_print(ph, "Loading next song...\n"); - SendMessage (hwndWinamp, WM_COMMAND, 40048, 0); - } - else if (strcmp(word[2], "prev") == 0) { - hexchat_print(ph, "Loading previous song...\n"); - SendMessage (hwndWinamp, WM_COMMAND, 40044, 0); - } - else if (strcmp(word[2], "play") == 0) { - hexchat_print(ph, "Playin'...\n"); - SendMessage (hwndWinamp, WM_COMMAND, 40045, 0); - } - else if (strcmp(word[2], "stop") == 0) { - hexchat_print(ph, "Winamp stopped!...\n"); - SendMessage (hwndWinamp, WM_COMMAND, 40047, 0); - } - else if (strcmp(word[2], "pause") == 0) { - SendMessage (hwndWinamp, WM_COMMAND, 40046, 0); - } - } - - return HEXCHAT_EAT_ALL; -} - - -// Display current song -static int wp_cb(char *word[], char *word_eol[], void *userdata) -{ - HWND hwndWinamp = NULL; - int bitrate, length, elapsed, minutes, seconds, eminutes, eseconds, samplerate, nbchannels; - char elapsedtime[7]; - char totaltime[7]; - char this_title[1024]; - - if ((hwndWinamp = FindWindow("Winamp v1.x",NULL)) == NULL) - hexchat_print(ph, "Winamp's window not found - Is winamp really running?\n"); - else { - //Winamp's running - // Seems buggy when winamp2's agent is running, and winamp not (or winamp3) -> crashes HexChat. - SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)125); - - if ((samplerate = SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)126)) == 0) { - hexchat_print(ph, "Could not get current song's samplerate... !?\n"); - return HEXCHAT_EAT_ALL; - } - if ((bitrate = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)126)) == 0) { - hexchat_print(ph, "Could not get current song's bitrate... !?\n"); - return HEXCHAT_EAT_ALL; - } - if ((nbchannels = SendMessage(hwndWinamp, WM_USER, (WPARAM)2, (LPARAM)126)) == 0) { - hexchat_print(ph, "Could not get the number of channels... !?\n"); - return HEXCHAT_EAT_ALL; - } - if ((length = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)105)) == 0) { - // Could be buggy when streaming audio or video, returned length is unexpected; - // How to detect is Winamp is streaming, and display ??:?? in that case? - hexchat_print(ph, "Could not get current song's length... !?\n"); - return HEXCHAT_EAT_ALL; - } - else { - minutes = length/60; - seconds = length%60; - - if (seconds>9) - wsprintf(totaltime, "%d:%d", minutes, seconds); - else - wsprintf(totaltime, "%d:0%d", minutes, seconds); - } - if ((elapsed = SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)105)) == 0) { - hexchat_print(ph, "Could not get current song's elapsed time... !?\n"); - return HEXCHAT_EAT_ALL; - } - else { - eminutes = (elapsed/1000)/60; /* kinda stupid sounding, but e is for elapsed */ - eseconds = (elapsed/1000)%60; - - if (eseconds>9) - wsprintf(elapsedtime, "%d:%d", eminutes, eseconds); - else - wsprintf(elapsedtime, "%d:0%d", eminutes, eseconds); - } - - if ((bitrate = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)126)) == 0) { - hexchat_print(ph, "Could not get current song's bitrate... !?\n"); - return HEXCHAT_EAT_ALL; - } - - GetCurrentSongsName(hwndWinamp, this_title, 1024); - - hexchat_commandf(ph, "dispcurrsong %d %d %d %s %s %s", samplerate, bitrate, nbchannels, elapsedtime, totaltime, this_title); - } - - return HEXCHAT_EAT_ALL; /* eat this command so HexChat and other plugins can't process it */ -} - - - -int hexchat_plugin_init(hexchat_plugin *plugin_handle, - char **plugin_name, - char **plugin_desc, - char **plugin_version, - char *arg) -{ - /* we need to save this for use with any hexchat_* functions */ - ph = plugin_handle; - - *plugin_name = "EasyWinampControl"; - *plugin_desc = "Some commands to remotely control winamp"; - *plugin_version = "1.2"; - - hexchat_hook_command(ph, "wp", HEXCHAT_PRI_NORM, wp_cb, - "Usage: wp", 0); - - hexchat_hook_command(ph, "wcmd", HEXCHAT_PRI_NORM, wcmd_cb, - "Usage: wcmd [play|pause|stop|prev|next]", 0); - - hexchat_print(ph, "EasyWinampControl plugin loaded\n"); - - return 1; /* return 1 for success */ -} - -int hexchat_plugin_deinit(void) -{ - hexchat_print(ph, "EasyWinampControl plugin unloaded\n"); - return 1; -} |