/** The user wants to insert a sreenshot. */ static void on_screenshot_insert_menuitem_activate_cb (GtkWidget * screenshot_insert_menuitem, PidginConversation *gtkconv) { PurplePlugin *plugin = purple_plugins_find_with_id (PLUGIN_ID); if (!strcmp (purple_prefs_get_string (PREF_SEND_TYPE), "img-ftp-http")) { PurpleConversation *conv = gtkconv->active_conv; /* Direct IM of image is allowed by current protocol */ if (!(purple_conversation_get_features (conv) & PURPLE_CONNECTION_NO_IMAGES)) { send_as_image (NULL, gtkconv); } else if (strcmp(purple_prefs_get_string (PREF_FTP_REMOTE_URL), "") && strcmp(purple_prefs_get_string (PREF_FTP_USERNAME), "") && strcmp(purple_prefs_get_string (PREF_FTP_PASSWORD), "")) { send_as_ftp_link (NULL, gtkconv); } else if (strcmp (purple_prefs_get_string (PREF_UPLOAD_TO), HOST_DISABLED)) { send_as_link (NULL, gtkconv); } else { purple_notify_error (plugin, PLUGIN_NAME, PLUGIN_ERROR, PLUGIN_CONFIGURE_ERROR); plugin_stop (plugin); } } }
static void send_as_link (PidginWindow * win, PidginConversation * _gtkconv) { PurplePlugin *plugin; plugin = purple_plugins_find_with_id (PLUGIN_ID); if (PLUGIN (locked)) return; /* Just return, don't fail. */ else { PidginConversation *gtkconv; PLUGIN (locked) = TRUE; PLUGIN (send_as) = SEND_AS_HTTP_LINK; if (win != NULL) gtkconv = PIDGIN_CONVERSATION (pidgin_conv_window_get_active_conversation (win)); else gtkconv = _gtkconv; if (!strcmp (purple_prefs_get_string (PREF_UPLOAD_TO), HOST_DISABLED)) { purple_notify_error (plugin, PLUGIN_NAME, PLUGIN_ERROR, PLUGIN_HOST_DISABLED_ERROR); plugin_stop (plugin); return; } REMEMBER_ACCOUNT (gtkconv); PLUGIN (conv_features) = gtkconv->active_conv->features; freeze_desktop (plugin, FALSE); } }
static void delete_plugin(gpointer data, gpointer udata) { ENTER; plugin_stop((plugin_instance *)data); plugin_put((plugin_instance *)data); RET(); }
static void on_countdown_dialog_response_cb (PurplePlugin * plugin, gint response_id) { g_assert (plugin != NULL && plugin->extra != NULL); switch (response_id) { case GTK_RESPONSE_ACCEPT: { if (purple_timeout_remove (PLUGIN (timeout_source))) { PLUGIN (timeout_source) = 0; /* delete_infobar (plugin); */ gtk_widget_destroy (PLUGIN (countdown_dialog)); PLUGIN (countdown_dialog) = NULL; PLUGIN (timeout_source) = purple_timeout_add (MSEC_TIMEOUT_VAL, (GSourceFunc) timeout_freeze_screen, plugin); } break; } case GTK_RESPONSE_REJECT: case GTK_RESPONSE_DELETE_EVENT: { if (purple_timeout_remove (PLUGIN (timeout_source))) { PLUGIN (timeout_source) = 0; gtk_widget_destroy (PLUGIN (countdown_dialog)); PLUGIN (countdown_dialog) = NULL; plugin_stop (plugin); } break; } } }
static gboolean insert_ftp_link_cb (PurplePlugin * plugin) { g_assert (plugin != NULL && plugin->extra != NULL); /* still uploading... */ if (PLUGIN (libcurl_thread) != NULL) { GtkProgressBar *progress_bar = g_object_get_data (G_OBJECT (PLUGIN (uploading_dialog)), "progress-bar"); g_assert (progress_bar != NULL); if (PLUGIN (read_size) == 0) gtk_progress_bar_pulse (progress_bar); else { gchar *str = NULL; gdouble val = PLUGIN (read_size) / (gdouble) PLUGIN (total_size); str = g_strdup_printf ("%d%%", (gint) (val * 100)); gtk_progress_bar_set_text (progress_bar, str); g_free (str); gtk_progress_bar_set_fraction (progress_bar, val); } return TRUE; } else { PLUGIN (timeout_cb_handle) = 0; gtk_widget_destroy (PLUGIN (uploading_dialog)); PLUGIN (uploading_dialog) = NULL; /* an error occured */ if (PLUGIN (error) != NULL) { NotifyUploadError ("%s", PLUGIN (error)->message); g_error_free (PLUGIN (error)); PLUGIN (error) = NULL; } else { gchar *remote_url; gchar *basename; basename = g_path_get_basename (PLUGIN (capture_path_filename)); if (strcmp (purple_prefs_get_string (PREF_FTP_WEB_ADDR), "")) /* not only a ftp server, but also a html server */ remote_url = g_strdup_printf ("%s/%s", purple_prefs_get_string (PREF_FTP_WEB_ADDR), basename); else remote_url = g_strdup_printf ("%s/%s", purple_prefs_get_string (PREF_FTP_REMOTE_URL), basename); real_insert_link (plugin, remote_url); g_free (remote_url); g_free (basename); } } plugin_stop (plugin); return FALSE; }