pidgin/purple-plugin-pack

Tweak plugins.cfg for switchspell to note the change in enchant support
org.guifications.plugins
2008-07-22, rekkanoryo
6bf9c444fc79
Tweak plugins.cfg for switchspell to note the change in enchant support
status, which is unfortunately somewhat buggy. I'll trust the distro
packagers to handle this correctly for their individual distros.
/*--------------------------------------------------------------------------*
* 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>&lt;tc"
"&gt;artist&lt;/tc&gt; - &lt;tc&gt;title&lt;/tc&gt;<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
};