Mercurial > grim > purple-plugin-pack
view autoprofile/comp_textfile.c @ 1028:314cfd774bc4
s/purple.guifications.org/plugins.guifications.org/
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Thu, 06 Aug 2009 12:30:12 -0700 |
parents | b7046b84ef60 |
children |
line wrap: on
line source
/*--------------------------------------------------------------------------* * AUTOPROFILE * * * * A Purple away message and profile manager that supports dynamic text * * * * AutoProfile is the legal property of its developers. Please refer to * * the COPYRIGHT file distributed with this source distribution. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *--------------------------------------------------------------------------*/ #include "../common/pp_internal.h" #include "component.h" #include <string.h> /*---------- TEXT FILE: Text from a file ----------*/ static GtkWidget *file_entry; static GtkWidget *file_selector; /* Read file into string and return */ char *text_file_generate (struct widget *w) { gchar *text, *salvaged, *converted; const gchar *filename; int max = ap_prefs_get_int (w, "text_size"); text = NULL; filename = ap_prefs_get_string (w, "text_file"); if (!g_file_test (filename, G_FILE_TEST_EXISTS)) { return g_strdup (_("[ERROR: File does not exist]")); } if (!g_file_get_contents (filename, &text, NULL, NULL)) { return g_strdup (_("[ERROR: Unable to open file]")); } converted = purple_utf8_try_convert (text); if (converted != NULL) { g_free (text); text = converted; } if (strlen (text) > max) { *(text+max) = '\0'; } salvaged = purple_utf8_salvage (text); g_free (text); return salvaged; } static gboolean text_file_update (GtkWidget *widget, GdkEventFocus *evt, struct widget *w) { ap_prefs_set_string (w, "text_file", gtk_entry_get_text (GTK_ENTRY (file_entry))); return FALSE; } static void text_file_filename (GtkWidget *widget, gpointer user_data) { const gchar *selected_filename; struct widget *w = (struct widget *) user_data; selected_filename = gtk_file_selection_get_filename ( GTK_FILE_SELECTION (file_selector)); ap_prefs_set_string (w, "text_file", selected_filename); gtk_entry_set_text (GTK_ENTRY (file_entry), selected_filename); } /* Creates and pops up file selection dialog for fortune file */ static void text_file_selection (GtkWidget *widget, gpointer user_data) { const char *cur_file; struct widget *w = (struct widget *) user_data; /* Create the selector */ file_selector = gtk_file_selection_new ( "Select a text file with content"); cur_file = ap_prefs_get_string (w, "text_file"); if (cur_file && strlen (cur_file) > 1) { gtk_file_selection_set_filename ( GTK_FILE_SELECTION (file_selector), cur_file); } g_signal_connect (GTK_OBJECT( GTK_FILE_SELECTION(file_selector)->ok_button), "clicked", G_CALLBACK (text_file_filename), w); /* Destroy dialog box when the user clicks button. */ g_signal_connect_swapped (GTK_OBJECT( GTK_FILE_SELECTION(file_selector)->ok_button), "clicked", G_CALLBACK (gtk_widget_destroy), (gpointer) file_selector); g_signal_connect_swapped (GTK_OBJECT ( GTK_FILE_SELECTION (file_selector)->cancel_button), "clicked", G_CALLBACK (gtk_widget_destroy), (gpointer) file_selector); /* Display dialog */ gtk_widget_show (file_selector); } /* Pop up message with instructions */ static void text_file_info_button (GtkButton *button, gpointer data) { if (!strcmp ((char *) data, "itunes")) { purple_notify_formatted (NULL, _("iTunes"), _("Current song in iTunes"), NULL, _("Get TuneCam from <a href=\"" "http://www.soft-o-mat.com/productions.shtml\">" "http://www.soft-o-mat.com/productions.shtml</a> and start it.<br>" "Create a html file that contains the following text:<br><br><tc" ">artist</tc> - <tc>title</tc><br><br>and " "press the \"T\" button. Import the html file as a template for " "the \"File Track\" and whatever else you see fit. Then select " "the \"G\" button and choose the location of the output file which " "will be used in this component"), NULL, NULL); } else if (!strcmp ((char *) data, "xmms")) { purple_notify_formatted (NULL, _("XMMS"), _("Current song in XMMS"), NULL, _("Included in the misc folder of AutoProfile is a script called \"" "xmms_currenttrack\". Install this script in your $PATH and give it " "executable permissions, and specify the program using a pipe.<br><br>" "Alternatively, in XMMS, go to Options->Preferences->Effects/General " "Plugins.<br>Configure the \"Song Change\" plugin. In the song change" " command box, put<br><br>echo \"%s\" > /path/to/output/file<br><br>" "and be sure to enable the plugin. Select the file location in " "AutoProfile and you should be done"), NULL, NULL); } else if (!strcmp ((char *) data, "wmp")) { purple_notify_formatted (NULL, _("Windows Media Player"), _("Current song in Windows Media Player"), NULL, _("Download NowPlaying, a plugin for WMP from <a href=\"" "http://www.wmplugins.com/ItemDetail.aspx?ItemID=357\">" "http://www.wmplugins.com/ItemDetail.aspx?ItemID=357</a> and follow " "the included installation instructions.<br>Set the output filename " "to the file you choose in this component"), NULL, NULL); } else if (!strcmp ((char *) data, "amip")) { purple_notify_formatted (NULL, _("iTunes/Winamp/Foobar/Apollo/QCD"), _("Current song in iTunes/Winamp/Foobar/Apollo/QCD"), NULL, _("Get the version of AMIP associated with your player from <a href=\"" "http://amip.tools-for.net/\">" "http://amip.tools-for.net/</a> and install/" "enable it.<br>" "Check the box \"Write song info to file\", play with the settings, " "and set the file in this component to be the file in the AMIP " "options."), NULL, NULL); } } /* Create the menu */ GtkWidget *text_file_menu (struct widget *w) { GtkWidget *ret = gtk_vbox_new (FALSE, 5); GtkWidget *hbox, *label, *button; label = gtk_label_new (_("Select text file with source content")); gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE, FALSE, 0); /* Text entry to type in file name */ file_entry = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (hbox), file_entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (file_entry), ap_prefs_get_string (w, "text_file")); g_signal_connect (G_OBJECT (file_entry), "focus-out-event", G_CALLBACK (text_file_update), w); /* Button to bring up file select dialog */ button = gtk_button_new_with_label ("Browse ..."); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (text_file_selection), w); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); ap_prefs_labeled_spin_button (w, ret, _("Max characters to read from file:"), "text_size", 1, AP_SIZE_MAXIMUM - 1, NULL); gtk_box_pack_start (GTK_BOX (ret), gtk_hseparator_new (), 0, 0, 0); /* Windows */ label = gtk_label_new (_("Windows users: Play the current song in:")); gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE, FALSE, 0); button = gtk_button_new_with_label ("iTunes/Winamp/Foobar/Apollo/QCD"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (text_file_info_button), "amip"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); button = gtk_button_new_with_label ("Windows Media Player"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (text_file_info_button), "wmp"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE, FALSE, 0); /* *nix */ label = gtk_label_new (_("*nix users: Play the current song in:")); gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE, FALSE, 0); button = gtk_button_new_with_label ("XMMS"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (text_file_info_button), "xmms"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); /* OS X */ label = gtk_label_new (_("OS X users: Play the current song in:")); gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label), 0, 0); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE, FALSE, 0); button = gtk_button_new_with_label ("iTunes"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (text_file_info_button), "itunes"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); return ret; } void text_file_init (struct widget *w) { ap_prefs_add_string (w, "text_file", ""); ap_prefs_add_int (w, "text_size", AP_SIZE_MAXIMUM - 1); } struct component text = { N_("Text File / Songs"), N_("Copies text from file that external programs " "(e.g. XMMS, Winamp, iTunes) can modify on a regular basis"), "File", &text_file_generate, &text_file_init, NULL, NULL, NULL, &text_file_menu };