Commit 94d75c2a authored by Harald Judt's avatar Harald Judt

Remove weather-http and use only one soup session.

parent 7af6d45f
......@@ -17,8 +17,6 @@ libweather_la_SOURCES = \
weather-data.h \
weather-debug.c \
weather-debug.h \
weather-http.c \
weather-http.h \
weather-icon.c \
weather-icon.h \
weather-parsers.c \
......
......@@ -378,7 +378,7 @@ start_auto_locate(xfceweather_dialog *dialog)
{
gtk_widget_set_sensitive(dialog->txt_loc_name, FALSE);
gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name), _("Detecting..."));
weather_search_by_ip(auto_locate_cb, dialog);
weather_search_by_ip(dialog->wd->session, auto_locate_cb, dialog);
}
......@@ -390,7 +390,7 @@ cb_findlocation(GtkButton *button,
search_dialog *sdialog;
gchar *loc_name;
sdialog = create_search_dialog(NULL);
sdialog = create_search_dialog(NULL, dialog->wd->session);
gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
if (run_search_dialog(sdialog)) {
......
/* Copyright (c) 2003-2012 Xfce Development Team
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <glib.h>
#include "weather-http.h"
#define WEATHER_MAX_CONN_TIMEOUT (10) /* connection timeout in seconds */
void
weather_http_queue_request(const gchar *uri,
SoupSessionCallback callback_func,
gpointer user_data)
{
SoupSession *session;
SoupMessage *msg;
SoupURI *soup_proxy_uri;
const gchar *proxy_uri;
/* create a new soup session */
session = soup_session_async_new();
g_object_set(session, SOUP_SESSION_TIMEOUT,
WEATHER_MAX_CONN_TIMEOUT, NULL);
/* Set the proxy URI if any */
proxy_uri = g_getenv("HTTP_PROXY");
if (!proxy_uri)
proxy_uri = g_getenv("http_proxy");
if (proxy_uri) {
soup_proxy_uri = soup_uri_new (proxy_uri);
g_object_set(session, SOUP_SESSION_PROXY_URI, soup_proxy_uri, NULL);
soup_uri_free(soup_proxy_uri);
}
msg = soup_message_new("GET", uri);
soup_session_queue_message(session, msg, callback_func, user_data);
}
/* Copyright (c) 2003-2012 Xfce Development Team
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __WEATHER_HTTP_H__
#define __WEATHER_HTTP_H__
#include <libsoup/soup.h>
G_BEGIN_DECLS
typedef void (*SoupSessionCallback) (SoupSession *session,
SoupMessage *msg,
gpointer user_data);
void weather_http_queue_request(const gchar *uri,
SoupSessionCallback callback_func,
gpointer user_data);
G_END_DECLS
#endif
......@@ -29,7 +29,6 @@
#include "weather.h"
#include "weather-search.h"
#include "weather-http.h"
#include "weather-debug.h"
#define BORDER 8
......@@ -168,7 +167,7 @@ search_cb(GtkWidget *widget,
gtk_tree_view_column_set_title(dialog->column, _("Searching..."));
g_message("getting %s", url);
weather_http_queue_request(url, cb_searchdone, dialog);
weather_http_queue_request(dialog->session, url, cb_searchdone, dialog);
g_free(url);
}
......@@ -184,7 +183,8 @@ pass_search_results(GtkTreeView *tree_view,
search_dialog *
create_search_dialog(GtkWindow *parent)
create_search_dialog(GtkWindow *parent,
SoupSession *session)
{
search_dialog *dialog;
GtkWidget *dialog_vbox, *vbox, *hbox, *scroll, *frame;
......@@ -195,6 +195,8 @@ create_search_dialog(GtkWindow *parent)
if (!dialog)
return NULL;
dialog->session = session;
dialog->dialog =
xfce_titled_dialog_new_with_buttons(_("Search location"),
parent,
......@@ -376,7 +378,8 @@ cb_geolocation(SoupSession *session,
}
void weather_search_by_ip(void (*gui_cb) (const gchar *loc_name,
void weather_search_by_ip(SoupSession *session,
void (*gui_cb) (const gchar *loc_name,
const gchar *lat,
const gchar *lon,
const unit_systems unit_system,
......@@ -393,5 +396,6 @@ void weather_search_by_ip(void (*gui_cb) (const gchar *loc_name,
data->user_data = user_data;
g_message("getting http://geoip.xfce.org/");
weather_http_queue_request("http://geoip.xfce.org/", cb_geolocation, data);
weather_http_queue_request(session, "http://geoip.xfce.org/",
cb_geolocation, data);
}
......@@ -38,14 +38,18 @@ typedef struct {
gchar *result_name;
gchar *last_search;
SoupSession *session;
} search_dialog;
search_dialog *create_search_dialog(GtkWindow *parent);
search_dialog *create_search_dialog(GtkWindow *parent,
SoupSession *session);
gboolean run_search_dialog(search_dialog *dialog);
void weather_search_by_ip(void (*gui_cb) (const gchar *loc_name,
void weather_search_by_ip(SoupSession *session,
void (*gui_cb) (const gchar *loc_name,
const gchar *lat,
const gchar *lon,
const unit_systems unit_system,
......
......@@ -24,7 +24,6 @@
#include "weather-parsers.h"
#include "weather-data.h"
#include "weather-http.h"
#include "weather.h"
#include "weather-summary.h"
......@@ -254,7 +253,8 @@ weather_summary_get_logo(xfceweather_data *data)
pixbuf = gdk_pixbuf_new_from_file(path, NULL);
g_free(path);
if (pixbuf == NULL)
weather_http_queue_request("http://met.no/filestore/met.no-logo.gif",
weather_http_queue_request(data->session,
"http://met.no/filestore/met.no-logo.gif",
logo_fetched, image);
else {
gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
......
......@@ -31,7 +31,6 @@
#include "weather.h"
#include "weather-translate.h"
#include "weather-http.h"
#include "weather-summary.h"
#include "weather-config.h"
#include "weather-icon.h"
......@@ -42,7 +41,7 @@
#define UPDATE_INTERVAL 15
#define DATA_MAX_AGE (3 * 3600)
#define BORDER 8
#define CONNECTION_TIMEOUT (10) /* connection timeout in seconds */
#define DATA_AND_UNIT(var, item) \
value = get_data(conditions, data->unit_system, item); \
......@@ -58,6 +57,19 @@
gboolean debug_mode = FALSE;
void
weather_http_queue_request(SoupSession *session,
const gchar *uri,
SoupSessionCallback callback_func,
gpointer user_data)
{
SoupMessage *msg;
msg = soup_message_new("GET", uri);
soup_session_queue_message(session, msg, callback_func, user_data);
}
static const gchar *
get_label_size(const xfceweather_data *data)
{
......@@ -399,7 +411,7 @@ update_weatherdata(xfceweather_data *data)
/* start receive thread */
g_message("getting %s", url);
weather_http_queue_request(url, cb_astro_update, data);
weather_http_queue_request(data->session, url, cb_astro_update, data);
g_free(url);
}
......@@ -413,7 +425,8 @@ update_weatherdata(xfceweather_data *data)
/* start receive thread */
g_message("getting %s", url);
weather_http_queue_request(url, cb_weather_update, data);
weather_http_queue_request(data->session, url,
cb_weather_update, data);
g_free(url);
/* cb_update will deal with everything that follows this
......@@ -896,20 +909,35 @@ static xfceweather_data *
xfceweather_create_control(XfcePanelPlugin *plugin)
{
xfceweather_data *data = g_slice_new0(xfceweather_data);
SoupMessage *msg;
SoupURI *soup_proxy_uri;
const gchar *proxy_uri;
GtkWidget *refresh;
data_types lbl;
GdkPixbuf *icon = NULL;
/* Initialize with sane default values */
data->plugin = plugin;
data->lat = NULL;
data->lon = NULL;
data->location_name = NULL;
data->unit_system = METRIC;
data->weatherdata = NULL;
data->animation_transitions = FALSE;
data->forecast_days = DEFAULT_FORECAST_DAYS;
/* Setup session for HTTP connections */
data->session = soup_session_async_new();
g_object_set(data->session, SOUP_SESSION_TIMEOUT,
CONNECTION_TIMEOUT, NULL);
/* Set the proxy URI from environment */
proxy_uri = g_getenv("HTTP_PROXY");
if (!proxy_uri)
proxy_uri = g_getenv("http_proxy");
if (proxy_uri) {
soup_proxy_uri = soup_uri_new (proxy_uri);
g_object_set(data->session, SOUP_SESSION_PROXY_URI,
soup_proxy_uri, NULL);
soup_uri_free(soup_proxy_uri);
}
data->scrollbox = gtk_scrollbox_new();
data->size = xfce_panel_plugin_get_size(plugin);
......
......@@ -21,6 +21,7 @@
#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4util/libxfce4util.h>
#include <libsoup/soup.h>
#include "weather-icon.h"
#define PLUGIN_WEBSITE "http://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin"
......@@ -32,6 +33,8 @@ G_BEGIN_DECLS
typedef struct {
XfcePanelPlugin *plugin;
SoupSession *session;
GtkWidget *top_vbox;
GtkWidget *top_hbox;
GtkWidget *vbox_center_scrollbox;
......@@ -70,6 +73,15 @@ typedef struct {
extern gboolean debug_mode;
typedef void (*SoupSessionCallback) (SoupSession *session,
SoupMessage *msg,
gpointer user_data);
void weather_http_queue_request(SoupSession *session,
const gchar *uri,
SoupSessionCallback callback_func,
gpointer user_data);
G_END_DECLS
#endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment