#include "libxmms/configfile.h" #include #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; }