#include "libxmms/configfile.h"
#include <gtk/gtk.h>
#include "xmms/plugin.h"
#include "xmms/i18n.h"
#include "libxmms/util.h"
static int enabled;
static gpointer foo;
static void init(void)
{
ConfigFile *cfg;
enabled = 1;
cfg = xmms_cfg_open_default_file();
xmms_cfg_read_boolean(cfg, "zzmp3", "enabled", &enabled);
xmms_cfg_free(cfg);
}
static int get_time(void)
{
return -1;
}
static void clicked_button()
{
ConfigFile *cfg;
gchar *filename;
filename = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL);
cfg = xmms_cfg_open_file(filename);
if (!cfg)
cfg = xmms_cfg_new();
xmms_cfg_write_boolean(cfg, "zzmp3", "enabled", enabled);
xmms_cfg_write_file(cfg, filename);
xmms_cfg_free(cfg);
g_free(filename);
}
static void pref_toggled(void *button)
{
GtkWidget *check = GTK_WIDGET(button);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)))
enabled = 0;
else
enabled = 1;
}
static void play_file(char *filename)
{
GtkWidget *dialog, *vbox, *label, *checkbox, *bbox, *button;
dialog = gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog), _("MPEG Layer 1/2/3 Not Supported"));
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 15);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0);
label = gtk_label_new(_("Due to patent licensing, and conflicts between\n"
"such patent licenses and the licenses of application\n"
"source code, MPEG-1/2 audio layer 3 (mp3) support has\n"
"been removed from this application by Red Hat, Inc.\n\n"
"We apologize for the inconvenience."));
gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
checkbox = gtk_check_button_new_with_label (_("Do not show this dialog again"));
gtk_signal_connect_object(GTK_OBJECT(checkbox), "toggled", GTK_SIGNAL_FUNC(pref_toggled), GTK_OBJECT(checkbox));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), TRUE);
gtk_box_pack_start(GTK_BOX(vbox), checkbox, TRUE, TRUE, 0);
gtk_widget_show(label);
gtk_widget_show(checkbox);
gtk_widget_show(vbox);
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), bbox, FALSE, FALSE, 0);
button = gtk_button_new_with_label(_("Ok"));
gtk_signal_connect(GTK_OBJECT(button), "clicked", clicked_button, button);
gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog));
gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
gtk_widget_grab_default(button);
gtk_widget_show(button);
gtk_widget_show(bbox);
gtk_widget_show(dialog);
gtk_signal_connect(GTK_OBJECT(dialog), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed), &dialog);
}
static int is_our_file(char *filename)
{
char *ext;
guint16 wavid;
if (!enabled) return FALSE;
if (!strncasecmp(filename, "http://", 7))
{ /* We assume all http:// (except those ending in .ogg) are mpeg -- why do we do that? */
ext = strrchr(filename, '.');
if (ext)
{
if (!strncasecmp(ext, ".ogg", 4))
return FALSE;
if (!strncasecmp(ext, ".rm", 3) ||
!strncasecmp(ext, ".ra", 3) ||
!strncasecmp(ext, ".rpm", 4) ||
!strncasecmp(ext, ".ram", 4))
return FALSE;
}
return TRUE;
}
ext = strrchr(filename, '.');
if (ext)
{
if (!strncasecmp(ext, ".mp2", 4) || !strncasecmp(ext, ".mp3", 4))
{
return TRUE;
}
}
return FALSE;
}
static void aboutbox(void) {
static GtkWidget *aboutbox;
if (aboutbox != NULL)
return;
aboutbox = xmms_show_message(
_("MPEG Layer 1/2/3 Placeholder plugin"),
_("Placeholder for MPEG Layer 1/2/3, explaining patent issues\n"
"Red Hat, Inc."),
_("Ok"), FALSE, NULL, NULL);
gtk_signal_connect(GTK_OBJECT(aboutbox), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed), &aboutbox);
}
InputPlugin zzmp3_ip =
{
NULL,
NULL,
NULL, /* description */
init,
aboutbox,
NULL, /* configure */
is_our_file,
NULL,
play_file,
NULL, /* stop */
NULL, /* pause */
NULL, /* seek */
NULL, /* set eq */
get_time, /* get time */
NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, /* get_song_info */
NULL, /* file_info_box */
NULL
};
InputPlugin *get_iplugin_info(void)
{
zzmp3_ip.description =
g_strdup(_("MPEG Layer 1/2/3 Placeholder Plugin"));
return &zzmp3_ip;
}