hexchat/plugins/winamp/winamp.c

155 lines
3.9 KiB
C
Raw Normal View History

2011-02-28 18:59:32 +01:00
/********************* Winamp Plugin 0.3******************************
*
* Distribution: GPL
*
* Originally written by: Leo - leo.nard@free.fr
* Modified by: SilvereX - SilvereX@karklas.mif.vu.lt
* Modified again by: Derek Buitenhuis - daemon404@gmail.com
* Modified yet again by: Berke Viktor - berkeviktor@aol.com
*********************************************************************/
#include "windows.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
2011-02-28 18:59:32 +01:00
2012-10-24 21:33:02 +02:00
#include "hexchat-plugin.h"
2011-02-28 18:59:32 +01:00
#define PLAYING 1
#define PAUSED 3
2012-10-30 08:42:48 +01:00
static hexchat_plugin *ph; /* plugin handle */
2011-02-28 18:59:32 +01:00
static int
winamp(char *word[], char *word_eol[], void *userdata)
{
2015-04-13 22:21:14 +02:00
HWND hwndWinamp = FindWindowW(L"Winamp v1.x",NULL);
if (hwndWinamp)
{
if (!stricmp("PAUSE", word[2]))
{
if (SendMessage(hwndWinamp,WM_USER, 0, 104))
{
SendMessage(hwndWinamp, WM_COMMAND, 40046, 0);
if (SendMessage(hwndWinamp, WM_USER, 0, 104) == PLAYING)
hexchat_printf(ph, "Winamp: playing");
else
hexchat_printf(ph, "Winamp: paused");
}
}
else if (!stricmp("STOP", word[2]))
{
SendMessage(hwndWinamp, WM_COMMAND, 40047, 0);
hexchat_printf(ph, "Winamp: stopped");
}
else if (!stricmp("PLAY", word[2]))
{
SendMessage(hwndWinamp, WM_COMMAND, 40045, 0);
hexchat_printf(ph, "Winamp: playing");
}
else if (!stricmp("NEXT", word[2]))
{
SendMessage(hwndWinamp, WM_COMMAND, 40048, 0);
hexchat_printf(ph, "Winamp: next playlist entry");
}
else if (!stricmp("PREV", word[2]))
{
SendMessage(hwndWinamp, WM_COMMAND, 40044, 0);
hexchat_printf(ph, "Winamp: previous playlist entry");
}
else if (!stricmp("START", word[2]))
{
SendMessage(hwndWinamp, WM_COMMAND, 40154, 0);
hexchat_printf(ph, "Winamp: playlist start");
}
else if (!word_eol[2][0])
{
2015-04-14 16:00:31 +02:00
wchar_t wcurrent_play[2048];
char *current_play, *p;
int len = GetWindowTextW(hwndWinamp, wcurrent_play, G_N_ELEMENTS(wcurrent_play));
2011-02-28 18:59:32 +01:00
2015-04-13 22:21:14 +02:00
current_play = g_utf16_to_utf8 (wcurrent_play, len, NULL, NULL, NULL);
if (!current_play)
{
hexchat_print (ph, "Winamp: Error getting song information.");
return HEXCHAT_EAT_ALL;
}
2011-02-28 18:59:32 +01:00
2015-04-13 22:21:14 +02:00
if (strchr(current_play, '-'))
2011-02-28 18:59:32 +01:00
{
2015-04-14 16:00:31 +02:00
/* Remove any trailing text and whitespace */
2015-04-13 22:21:14 +02:00
p = current_play + strlen(current_play) - 8;
while (p >= current_play)
2011-02-28 18:59:32 +01:00
{
2015-04-14 16:00:31 +02:00
if (!strnicmp(p, "- Winamp", 8))
break;
p--;
2011-02-28 18:59:32 +01:00
}
2015-04-13 22:21:14 +02:00
if (p >= current_play)
p--;
while (p >= current_play && *p == ' ')
p--;
2015-04-14 16:00:31 +02:00
*++p = '\0';
2015-04-13 22:21:14 +02:00
2015-04-14 16:00:31 +02:00
/* Ignore any leading track number */
p = strstr (current_play, ". ");
2015-04-13 22:21:14 +02:00
if (p)
2015-04-14 16:00:31 +02:00
p += 2;
2015-04-13 22:21:14 +02:00
else
2015-04-14 16:00:31 +02:00
p = current_play;
2011-02-28 18:59:32 +01:00
2015-04-14 16:00:31 +02:00
if (*p != '\0')
hexchat_commandf (ph, "me is now playing: %s", p);
else
hexchat_print (ph, "Winamp: No song information found.");
2015-04-13 22:21:14 +02:00
g_free (current_play);
}
else
hexchat_print(ph, "Winamp: Nothing being played.");
}
else
hexchat_printf(ph, "Usage: /WINAMP [PAUSE|PLAY|STOP|NEXT|PREV|START]\n");
2011-02-28 18:59:32 +01:00
}
else
{
2015-04-13 22:21:14 +02:00
hexchat_print(ph, "Winamp not found.\n");
2011-02-28 18:59:32 +01:00
}
2012-10-30 07:40:37 +01:00
return HEXCHAT_EAT_ALL;
2011-02-28 18:59:32 +01:00
}
int
2012-10-30 08:42:48 +01:00
hexchat_plugin_init(hexchat_plugin *plugin_handle,
2015-04-13 22:21:14 +02:00
char **plugin_name,
char **plugin_desc,
char **plugin_version,
char *arg)
2011-02-28 18:59:32 +01:00
{
2012-10-30 11:47:12 +01:00
/* we need to save this for use with any hexchat_* functions */
2011-02-28 18:59:32 +01:00
ph = plugin_handle;
*plugin_name = "Winamp";
*plugin_desc = "Winamp plugin for HexChat";
*plugin_version = "0.6";
2011-02-28 18:59:32 +01:00
2012-10-30 08:42:48 +01:00
hexchat_hook_command (ph, "WINAMP", HEXCHAT_PRI_NORM, winamp, "Usage: /WINAMP [PAUSE|PLAY|STOP|NEXT|PREV|START] - control Winamp or show what's currently playing", 0);
2013-04-14 10:14:17 +02:00
hexchat_command (ph, "MENU -ishare\\music.png ADD \"Window/Display Current Song (Winamp)\" \"WINAMP\"");
2011-02-28 18:59:32 +01:00
2012-10-30 08:42:48 +01:00
hexchat_print (ph, "Winamp plugin loaded\n");
2011-02-28 18:59:32 +01:00
2015-04-13 22:21:14 +02:00
return 1; /* return 1 for success */
2011-02-28 18:59:32 +01:00
}
int
2012-10-30 08:42:48 +01:00
hexchat_plugin_deinit(void)
2011-02-28 18:59:32 +01:00
{
2012-10-30 08:42:48 +01:00
hexchat_command (ph, "MENU DEL \"Window/Display Current Song (Winamp)\"");
hexchat_print (ph, "Winamp plugin unloaded\n");
2011-02-28 18:59:32 +01:00
return 1;
}