[evolution-patches] patch for showin the progress indication while loading the calendar items from eds [calendar]
- From: chenthill <pchenthill novell com>
- To: "evolution-patches lists ximian com" <evolution-patches lists ximian com>
- Subject: [evolution-patches] patch for showin the progress indication while loading the calendar items from eds [calendar]
- Date: Fri, 01 Jul 2005 17:18:56 +0530
Hi,
Have attached the patch.
thanks, chenthill.
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/ChangeLog,v
retrieving revision 1.470
diff -u -p -r1.470 ChangeLog
--- ChangeLog 23 Jun 2005 05:39:02 -0000 1.470
+++ ChangeLog 1 Jul 2005 11:29:35 -0000
@@ -1,3 +1,30 @@
+2005-07-01 Chenthill Palanisamy <pchenthill novell com>
+
+ * backends/groupwise/e-cal-backend-groupwise.c
+ (populate_cache): Send the progress notification.
+ (set_container_id_with_count), (connect_to_server): Get
+ the number of items present in the calendar folder from
+ the server.
+ * idl/Evolution-DataServer-Calendar.idl: Changed the type of
+ percent to double from int.
+ * libecal/e-cal-marshal.list: Added a new item to marshal arg's
+ string, double.
+ * libedata-cal/e-data-cal-view.c:
+ (e_data_cal_view_notify_progress):
+ * libedata-cal/e-data-cal-view.h:
+ * libecal/e-cal-view-listener.c (impl_notifyQueryProgress),
+ (e_cal_view_listener_class_init):
+ * libecal/e-cal-view-listener.h:
+ * libecal/e-cal-view.c (view_progress_cb),
+ (e_cal_view_class_init):
+ * libecal/e-cal-view.h:Changed the percent element
+ to double.
+ * libedata-cal/e-cal-backend.h:
+ * libedata-cal/e-cal-backend.c:
+ (e_cal_backend_notify_view_progress),
+ (e_cal_backend_notify_view_done): Added the new function to notify the
+ progress information.
+
2005-06-23 Chenthill Palanisamy <pchenthill novell com>
* backends/http/Makefile.am: Removed unnecessary
Index: backends/groupwise/e-cal-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise.c,v
retrieving revision 1.146
diff -u -p -r1.146 e-cal-backend-groupwise.c
--- backends/groupwise/e-cal-backend-groupwise.c 20 Jun 2005 16:41:17 -0000 1.146
+++ backends/groupwise/e-cal-backend-groupwise.c 1 Jul 2005 11:29:38 -0000
@@ -61,6 +61,9 @@ struct _ECalBackendGroupwisePrivate {
GHashTable *categories_by_id;
GHashTable *categories_by_name;
+ /* number of calendar items in the folder */
+ guint32 total_count;
+
/* fields for storing info while offline */
char *user_email;
char *local_attachments_store;
@@ -128,11 +131,15 @@ populate_cache (ECalBackendGroupwise *cb
GList *list = NULL, *l;
gboolean done = FALSE;
int cursor = 0;
+ guint32 total, num = 0;
+ double progress = 0;
const char *position = E_GW_CURSOR_POSITION_END;
icalcomponent_kind kind;
+ const char *type;
priv = cbgw->priv;
kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
+ total = priv->total_count;
if (!mutex) {
mutex = g_mutex_new ();
@@ -140,6 +147,10 @@ populate_cache (ECalBackendGroupwise *cb
g_mutex_lock (mutex);
+ if (kind == ICAL_VEVENT_COMPONENT)
+ type = "Calendar";
+ else
+ type = "Task";
status = e_gw_connection_create_cursor (priv->cnc,
priv->container_id,
@@ -160,10 +171,18 @@ populate_cache (ECalBackendGroupwise *cb
}
for (l = list; l != NULL; l = g_list_next(l)) {
EGwItem *item;
+ char *progress_string = NULL;
+ num++;
item = E_GW_ITEM (l->data);
comp = e_gw_item_to_cal_component (item, cbgw);
g_object_unref (item);
+
+ /* Show the progress information */
+ progress = ((double) num/total);
+ progress_string = g_strdup_printf (_("Loading %s items"), type);
+ e_cal_backend_notify_view_progress (E_CAL_BACKEND (cbgw), progress_string, progress);
+
if (E_IS_CAL_COMPONENT (comp)) {
char *comp_str;
@@ -176,6 +195,7 @@ populate_cache (ECalBackendGroupwise *cb
e_cal_backend_cache_put_component (priv->cache, comp);
g_object_unref (comp);
}
+ g_free (progress_string);
}
if (!list || g_list_length (list) == 0)
@@ -185,6 +205,7 @@ populate_cache (ECalBackendGroupwise *cb
position = E_GW_CURSOR_POSITION_CURRENT;
}
e_gw_connection_destroy_cursor (priv->cnc, priv->container_id, cursor);
+ e_cal_backend_notify_view_done (E_CAL_BACKEND (cbgw), GNOME_Evolution_Calendar_Success);
g_mutex_unlock (mutex);
@@ -553,6 +574,55 @@ cache_init (ECalBackendGroupwise *cbgw)
}
static ECalBackendSyncStatus
+set_container_id_with_count (ECalBackendGroupwise *cbgw)
+{
+ ECalBackendGroupwisePrivate *priv;
+ EGwContainer *our_container;
+ GList *container_list = NULL, *l;
+ EGwConnectionStatus status;
+ icalcomponent_kind kind;
+
+ priv = cbgw->priv;
+
+ kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
+
+ switch (kind) {
+ case ICAL_VEVENT_COMPONENT:
+ case ICAL_VTODO_COMPONENT:
+ e_source_set_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
+ break;
+ default:
+ priv->container_id = NULL;
+ return GNOME_Evolution_Calendar_UnsupportedMethod;
+ }
+
+ status = e_gw_connection_get_container_list (priv->cnc, "folders", &container_list);
+
+ if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION)
+ status = e_gw_connection_get_container_list (priv->cnc, "folders", &container_list);
+
+ if (status != E_GW_CONNECTION_STATUS_OK)
+ return GNOME_Evolution_Calendar_OtherError;
+
+ for (l = container_list; l != NULL; l = l->next) {
+ EGwContainer *container = E_GW_CONTAINER (l->data);
+ const char *name = e_gw_container_get_name (container);
+
+ if (name && strcmp (name, "Calendar") == 0) {
+ our_container = container;
+ break;
+ }
+ }
+
+ priv->container_id = g_strdup (e_gw_container_get_id (our_container));
+ priv->total_count = e_gw_container_get_total_count (our_container);
+
+ e_gw_connection_free_container_list (container_list);
+
+ return GNOME_Evolution_Calendar_Success;
+}
+
+static ECalBackendSyncStatus
connect_to_server (ECalBackendGroupwise *cbgw)
{
char *real_uri;
@@ -614,23 +684,15 @@ connect_to_server (ECalBackendGroupwise
priv->mode_changed = FALSE;
if (E_IS_GW_CONNECTION (priv->cnc)) {
- icalcomponent_kind kind;
-
+ ECalBackendSyncStatus status;
/* get the ID for the container */
if (priv->container_id)
g_free (priv->container_id);
- kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
-
- if (kind == ICAL_VEVENT_COMPONENT) {
- priv->container_id = g_strdup (e_gw_connection_get_container_id (priv->cnc, "Calendar"));
- e_source_set_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
- } else if (kind == ICAL_VTODO_COMPONENT) {
- priv->container_id = g_strdup (e_gw_connection_get_container_id (priv->cnc, "Calendar"));
- e_source_set_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
- } else
- priv->container_id = NULL;
-
+ if ((status = set_container_id_with_count (cbgw)) != GNOME_Evolution_Calendar_Success) {
+ return status;
+ }
+
priv->cache = e_cal_backend_cache_new (e_cal_backend_get_uri (E_CAL_BACKEND (cbgw)));
if (!priv->cache) {
g_mutex_unlock (priv->mutex);
Index: idl/Evolution-DataServer-Calendar.idl
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/idl/Evolution-DataServer-Calendar.idl,v
retrieving revision 1.10
diff -u -p -r1.10 Evolution-DataServer-Calendar.idl
--- idl/Evolution-DataServer-Calendar.idl 3 Feb 2005 13:27:54 -0000 1.10
+++ idl/Evolution-DataServer-Calendar.idl 1 Jul 2005 11:29:38 -0000
@@ -53,6 +53,8 @@ module Calendar {
const CalObjType TYPE_JOURNAL = 1 << 2;
const CalObjType TYPE_ANY = 0x07;
+ typedef double CalProgress;
+
/* Flags for getting UID sequences */
typedef long CalObjModType;
const CalObjModType MOD_THIS = 1 << 0;
@@ -146,7 +148,7 @@ module Calendar {
oneway void notifyObjectsAdded (in stringlist objects);
oneway void notifyObjectsModified (in stringlist objects);
oneway void notifyObjectsRemoved (in CalObjUIDSeq uids);
- oneway void notifyQueryProgress (in string message, in short percent);
+ oneway void notifyQueryProgress (in string message, in CalProgress progress);
oneway void notifyQueryDone (in CallStatus status);
};
Index: libecal/e-cal-marshal.list
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libecal/e-cal-marshal.list,v
retrieving revision 1.5
diff -u -p -r1.5 e-cal-marshal.list
--- libecal/e-cal-marshal.list 23 Dec 2004 17:16:33 -0000 1.5
+++ libecal/e-cal-marshal.list 1 Jul 2005 11:29:38 -0000
@@ -16,3 +16,4 @@ NONE:STRING,STRING,STRING
NONE:POINTER,ENUM
NONE:POINTER,STRING
NONE:POINTER,POINTER
+NONE:STRING,DOUBLE
Index: libecal/e-cal-view-listener.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libecal/e-cal-view-listener.c,v
retrieving revision 1.5
diff -u -p -r1.5 e-cal-view-listener.c
--- libecal/e-cal-view-listener.c 6 May 2005 05:19:57 -0000 1.5
+++ libecal/e-cal-view-listener.c 1 Jul 2005 11:29:39 -0000
@@ -175,7 +175,7 @@ impl_notifyObjectsRemoved (PortableServe
static void
impl_notifyQueryProgress (PortableServer_Servant servant,
const CORBA_char *message,
- const CORBA_short percent,
+ const CORBA_double progress,
CORBA_Environment *ev)
{
ECalViewListener *ql;
@@ -184,7 +184,7 @@ impl_notifyQueryProgress (PortableServer
ql = E_CAL_VIEW_LISTENER (bonobo_object_from_servant (servant));
priv = ql->priv;
- g_signal_emit (G_OBJECT (ql), signals[VIEW_PROGRESS], 0, message, percent);
+ g_signal_emit (G_OBJECT (ql), signals[VIEW_PROGRESS], 0, message, progress);
}
static void
@@ -278,8 +278,8 @@ e_cal_view_listener_class_init (ECalView
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (ECalViewListenerClass, view_progress),
NULL, NULL,
- e_cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_INT);
+ e_cal_marshal_VOID__STRING_DOUBLE,
+ G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_DOUBLE);
signals[VIEW_DONE] =
g_signal_new ("view_done",
G_TYPE_FROM_CLASS (klass),
Index: libecal/e-cal-view-listener.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libecal/e-cal-view-listener.h,v
retrieving revision 1.4
diff -u -p -r1.4 e-cal-view-listener.h
--- libecal/e-cal-view-listener.h 11 Nov 2003 01:34:46 -0000 1.4
+++ libecal/e-cal-view-listener.h 1 Jul 2005 11:29:39 -0000
@@ -53,7 +53,7 @@ struct _ECalViewListenerClass {
void (*objects_added) (ECalViewListener *listener, GList *objects);
void (*objects_modified) (ECalViewListener *listener, GList *objects);
void (*objects_removed) (ECalViewListener *listener, GList *uids);
- void (*view_progress) (ECalViewListener *listener, const char *message, int percent);
+ void (*view_progress) (ECalViewListener *listener, const char *message, double progress);
void (*view_done) (ECalViewListener *listener, ECalendarStatus status);
};
Index: libecal/e-cal-view.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libecal/e-cal-view.c,v
retrieving revision 1.5
diff -u -p -r1.5 e-cal-view.c
--- libecal/e-cal-view.c 6 May 2005 05:19:57 -0000 1.5
+++ libecal/e-cal-view.c 1 Jul 2005 11:29:39 -0000
@@ -104,13 +104,13 @@ objects_removed_cb (ECalViewListener *li
}
static void
-view_progress_cb (ECalViewListener *listener, const char *message, int percent, gpointer data)
+view_progress_cb (ECalViewListener *listener, const char *message, double progress, gpointer data)
{
ECalView *view;
view = E_CAL_VIEW (data);
- g_signal_emit (G_OBJECT (view), signals[VIEW_PROGRESS], 0, message, percent);
+ g_signal_emit (G_OBJECT (view), signals[VIEW_PROGRESS], 0, message, progress);
}
static void
@@ -287,8 +287,8 @@ e_cal_view_class_init (ECalViewClass *kl
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (ECalViewClass, view_progress),
NULL, NULL,
- e_cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_INT);
+ e_cal_marshal_VOID__STRING_DOUBLE,
+ G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_DOUBLE);
signals[VIEW_DONE] =
g_signal_new ("view_done",
G_TYPE_FROM_CLASS (klass),
Index: libecal/e-cal-view.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libecal/e-cal-view.h,v
retrieving revision 1.3
diff -u -p -r1.3 e-cal-view.h
--- libecal/e-cal-view.h 11 Nov 2003 01:34:46 -0000 1.3
+++ libecal/e-cal-view.h 1 Jul 2005 11:29:40 -0000
@@ -53,7 +53,7 @@ struct _ECalViewClass {
void (* objects_added) (ECalView *view, GList *objects);
void (* objects_modified) (ECalView *view, GList *objects);
void (* objects_removed) (ECalView *view, GList *uids);
- void (* view_progress) (ECalView *view, char *message, int percent);
+ void (* view_progress) (ECalView *view, char *message, double progress);
void (* view_done) (ECalView *view, ECalendarStatus status);
};
Index: libedata-cal/e-cal-backend.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-cal-backend.c,v
retrieving revision 1.16
diff -u -p -r1.16 e-cal-backend.c
--- libedata-cal/e-cal-backend.c 13 May 2005 07:13:30 -0000 1.16
+++ libedata-cal/e-cal-backend.c 1 Jul 2005 11:29:41 -0000
@@ -1101,6 +1101,85 @@ match_query_and_notify (EDataCalView *qu
}
/**
+ * e_cal_backend_notify_view_progress:
+ * @backend: A calendar backend.
+ * @message: the UID of the removed object
+ * @progress: send the decimal part of the progress information
+ *
+ * Notifies each of the backend's listeners about the view_progress in downloading the items.
+ **/
+void
+e_cal_backend_notify_view_progress (ECalBackend *backend, const char *message, double progress)
+{
+ ECalBackendPrivate *priv;
+ EList *queries;
+ EIterator *iter;
+ EDataCalView *query;
+
+ priv = backend->priv;
+
+ if (priv->notification_proxy) {
+ e_cal_backend_notify_view_progress (priv->notification_proxy, message, progress);
+ return;
+ }
+
+ queries = e_cal_backend_get_queries (backend);
+ iter = e_list_get_iterator (queries);
+
+ while (e_iterator_is_valid (iter)) {
+ query = QUERY (e_iterator_get (iter));
+
+ bonobo_object_ref (query);
+
+ e_data_cal_view_notify_progress (query, message, progress);
+
+ bonobo_object_unref (query);
+
+ e_iterator_next (iter);
+ }
+ g_object_unref (iter);
+}
+
+/**
+ * e_cal_backend_notify_view_done:
+ * @backend: A calendar backend.
+ * @status: returns the status once the view is fully populated.
+ *
+ * Notifies each of the backend's listeners about the view_done in downloading the items.
+ **/
+void
+e_cal_backend_notify_view_done (ECalBackend *backend, GNOME_Evolution_Calendar_CallStatus status)
+{
+ ECalBackendPrivate *priv;
+ EList *queries;
+ EIterator *iter;
+ EDataCalView *query;
+
+ priv = backend->priv;
+
+ if (priv->notification_proxy) {
+ e_cal_backend_notify_view_done (priv->notification_proxy, status);
+ return;
+ }
+
+ queries = e_cal_backend_get_queries (backend);
+ iter = e_list_get_iterator (queries);
+
+ while (e_iterator_is_valid (iter)) {
+ query = QUERY (e_iterator_get (iter));
+
+ bonobo_object_ref (query);
+
+ e_data_cal_view_notify_done (query, status);
+
+ bonobo_object_unref (query);
+
+ e_iterator_next (iter);
+ }
+ g_object_unref (iter);
+}
+
+/**
* e_cal_backend_notify_object_modified:
* @backend: A calendar backend.
* @old_object: iCalendar representation of the original form of the object
Index: libedata-cal/e-cal-backend.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-cal-backend.h,v
retrieving revision 1.10
diff -u -p -r1.10 e-cal-backend.h
--- libedata-cal/e-cal-backend.h 28 Jan 2005 13:17:37 -0000 1.10
+++ libedata-cal/e-cal-backend.h 1 Jul 2005 11:29:41 -0000
@@ -173,6 +173,9 @@ void e_cal_backend_notify_mode (ECa
void e_cal_backend_notify_auth_required (ECalBackend *backend);
void e_cal_backend_notify_error (ECalBackend *backend, const char *message);
+void e_cal_backend_notify_view_done (ECalBackend *backend, GNOME_Evolution_Calendar_CallStatus status);
+void e_cal_backend_notify_view_progress (ECalBackend *backend, const char *message, double percent);
+
G_END_DECLS
Index: libedata-cal/e-data-cal-view.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-data-cal-view.c,v
retrieving revision 1.5
diff -u -p -r1.5 e-data-cal-view.c
--- libedata-cal/e-data-cal-view.c 16 May 2005 09:05:51 -0000 1.5
+++ libedata-cal/e-data-cal-view.c 1 Jul 2005 11:29:41 -0000
@@ -845,12 +845,12 @@ e_data_cal_view_notify_objects_removed_1
* e_data_cal_view_notify_progress:
* @query: A query object.
* @message: Progress message to send to listeners.
- * @percent: Percentage completed.
+ * @progress: Percentage completed.
*
* Notifies all query listeners of progress messages.
*/
void
-e_data_cal_view_notify_progress (EDataCalView *query, const char *message, int percent)
+e_data_cal_view_notify_progress (EDataCalView *query, const char *message, double progress)
{
EDataCalViewPrivate *priv;
CORBA_Environment ev;
@@ -867,7 +867,7 @@ e_data_cal_view_notify_progress (EDataCa
CORBA_exception_init (&ev);
- GNOME_Evolution_Calendar_CalViewListener_notifyQueryProgress (ld->listener, message, percent, &ev);
+ GNOME_Evolution_Calendar_CalViewListener_notifyQueryProgress (ld->listener, message, progress, &ev);
if (BONOBO_EX (&ev))
g_warning (G_STRLOC ": could not notify the listener of query progress");
Index: libedata-cal/e-data-cal-view.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-data-cal-view.h,v
retrieving revision 1.4
diff -u -p -r1.4 e-data-cal-view.h
--- libedata-cal/e-data-cal-view.h 23 Sep 2004 21:06:46 -0000 1.4
+++ libedata-cal/e-data-cal-view.h 1 Jul 2005 11:29:41 -0000
@@ -79,7 +79,7 @@ void e_data_cal_view_no
const char *uid);
void e_data_cal_view_notify_progress (EDataCalView *query,
const char *message,
- int percent);
+ double percent);
void e_data_cal_view_notify_done (EDataCalView *query,
GNOME_Evolution_Calendar_CallStatus status);
? 272114.diff
? 274188.diff
? award.pdf
? calendar.error
? calendar_tcd.xls
? evo_progress
? freebusy_patch.diff
? hey
? patch
? progress
? temp
? temp0
? test
? ui
? gui/apps_evolution_calendar-2.4.schemas
? gui/e-meeting-attendee.h_bak
? gui/dialogs/event-page.gladep
? gui/dialogs/meeting-page.gladep
? gui/dialogs/temp
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/calendar/ChangeLog,v
retrieving revision 1.2754
diff -u -p -r1.2754 ChangeLog
--- ChangeLog 1 Jul 2005 09:49:31 -0000 1.2754
+++ ChangeLog 1 Jul 2005 11:26:18 -0000
@@ -1,3 +1,28 @@
+2005-07-01 Chenthill Palanisamy <pchenthill novell com>
+
+ * gui/e-cal-model.c: (e_cal_model_class_init),
+ (e_cal_view_progress_cb), (e_cal_view_done_cb):
+ * gui/e-cal-model.h: Added two new signals to notify
+ the progress information from the model to UI.
+ * gui/e-calendar-marshal.list: Added a new item to marshal
+ the string,double,int arguments.
+ * gui/e-calendar-table.c: (delete_selected_components),
+ (clipboard_get_text_cb), (e_calendar_table_set_status_message):
+ * gui/e-calendar-table.h:
+ * gui/e-calendar-view.c: (e_calendar_view_set_status_message),
+ (e_calendar_view_cut_clipboard), (clipboard_get_text_cb),
+ (transfer_selected_items):
+ * gui/e-calendar-view.h:
+ * gui/e-tasks.c: (view_progress_cb), (view_done_cb),
+ (setup_widgets), (set_status_message), (backend_died_cb):
+ * gui/gnome-cal.c: (update_query), (view_progress_cb),
+ (view_done_cb), (setup_widgets), (client_cal_opened_cb),
+ (default_client_cal_opened_cb), (open_ecal), (backend_died_cb),
+ (gnome_calendar_purge): Added a new variable to
+ e_calendar_view_set_status_message and
+ e_calendar_table_set_status_message methods to show the progress
+ information.
+
2005-07-01 Praveen Kumar <kpraveen novell com>
* gui/e-cal-config.h : Added the source type field in
Index: gui/e-cal-model.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-cal-model.c,v
retrieving revision 1.58
diff -u -p -r1.58 e-cal-model.c
--- gui/e-cal-model.c 6 May 2005 04:26:38 -0000 1.58
+++ gui/e-cal-model.c 1 Jul 2005 11:26:18 -0000
@@ -100,6 +100,8 @@ static void remove_client (ECalModel *mo
enum {
TIME_RANGE_CHANGED,
ROW_APPENDED,
+ CAL_VIEW_PROGRESS,
+ CAL_VIEW_DONE,
LAST_SIGNAL
};
@@ -148,6 +150,23 @@ e_cal_model_class_init (ECalModelClass *
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals[CAL_VIEW_PROGRESS] =
+ g_signal_new ("cal_view_progress",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalModelClass, cal_view_progress),
+ NULL, NULL,
+ e_calendar_marshal_VOID__STRING_DOUBLE_INT,
+ G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_INT);
+ signals[CAL_VIEW_DONE] =
+ g_signal_new ("cal_view_done",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalModelClass, cal_view_done),
+ NULL, NULL,
+ e_calendar_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+
}
static void
@@ -1414,23 +1433,28 @@ e_cal_view_objects_removed_cb (ECalView
}
static void
-e_cal_view_progress_cb (ECalView *query, const char *message, int percent, gpointer user_data)
+e_cal_view_progress_cb (ECalView *query, const char *message, double progress, gpointer user_data)
{
ECalModel *model = (ECalModel *) user_data;
+ ECal *client = e_cal_view_get_client (query);
g_return_if_fail (E_IS_CAL_MODEL (model));
- /* FIXME Update status bar */
+ g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_PROGRESS], 0, message,
+ progress, e_cal_get_source_type (client));
}
static void
e_cal_view_done_cb (ECalView *query, ECalendarStatus status, gpointer user_data)
{
ECalModel *model = (ECalModel *) user_data;
+ ECal *client = e_cal_view_get_client (query);
g_return_if_fail (E_IS_CAL_MODEL (model));
- /* FIXME Clear status bar */
+ /* emit the signal on the model and let the view catch it to display */
+ g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_DONE], 0, status,
+ e_cal_get_source_type (client));
}
static void
Index: gui/e-cal-model.h
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-cal-model.h,v
retrieving revision 1.15
diff -u -p -r1.15 e-cal-model.h
--- gui/e-cal-model.h 17 Jun 2005 15:20:27 -0000 1.15
+++ gui/e-cal-model.h 1 Jul 2005 11:26:18 -0000
@@ -92,6 +92,8 @@ typedef struct {
/* Signals */
void (* time_range_changed) (ECalModel *model, time_t start, time_t end);
void (* row_appended) (ECalModel *model);
+ void (* cal_view_progress) (ECalModel *model, const char *message, double progress, ECalSourceType type);
+ void (* cal_view_done) (ECalModel *model, ECalendarStatus status, ECalSourceType type);
} ECalModelClass;
GType e_cal_model_get_type (void);
Index: gui/e-calendar-marshal.list
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-marshal.list,v
retrieving revision 1.4
diff -u -p -r1.4 e-calendar-marshal.list
--- gui/e-calendar-marshal.list 23 Feb 2005 01:28:20 -0000 1.4
+++ gui/e-calendar-marshal.list 1 Jul 2005 11:26:18 -0000
@@ -17,3 +17,4 @@ NONE:POINTER,ENUM
NONE:POINTER,STRING
NONE:POINTER,POINTER
NONE:LONG,LONG
+NONE:STRING,DOUBLE,INT
Index: gui/e-calendar-table.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-table.c,v
retrieving revision 1.134
diff -u -p -r1.134 e-calendar-table.c
--- gui/e-calendar-table.c 23 Jun 2005 09:11:05 -0000 1.134
+++ gui/e-calendar-table.c 1 Jul 2005 11:26:19 -0000
@@ -691,7 +691,7 @@ delete_selected_components (ECalendarTab
objs = get_selected_objects (cal_table);
- e_calendar_table_set_status_message (cal_table, _("Deleting selected objects"));
+ e_calendar_table_set_status_message (cal_table, _("Deleting selected objects"), -1.0);
for (l = objs; l; l = l->next) {
ECalModelComponent *comp_data = (ECalModelComponent *) l->data;
@@ -703,7 +703,7 @@ delete_selected_components (ECalendarTab
g_clear_error (&error);
}
- e_calendar_table_set_status_message (cal_table, NULL);
+ e_calendar_table_set_status_message (cal_table, NULL, -1.0);
g_slist_free (objs);
}
@@ -870,7 +870,7 @@ clipboard_get_text_cb (GtkClipboard *cli
client = e_cal_model_get_default_client (cal_table->model);
- e_calendar_table_set_status_message (cal_table, _("Updating objects"));
+ e_calendar_table_set_status_message (cal_table, _("Updating objects"), -1.0);
if (kind == ICAL_VCALENDAR_COMPONENT) {
icalcomponent_kind child_kind;
@@ -916,7 +916,7 @@ clipboard_get_text_cb (GtkClipboard *cli
g_object_unref (comp);
}
- e_calendar_table_set_status_message (cal_table, NULL);
+ e_calendar_table_set_status_message (cal_table, NULL, -1.0);
}
/**
@@ -1343,7 +1343,7 @@ e_calendar_table_set_activity_handler (E
}
void
-e_calendar_table_set_status_message (ECalendarTable *cal_table, const gchar *message)
+e_calendar_table_set_status_message (ECalendarTable *cal_table, const gchar *message, double progress)
{
g_return_if_fail (E_IS_CALENDAR_TABLE (cal_table));
@@ -1366,6 +1366,6 @@ e_calendar_table_set_status_message (ECa
g_free (client_id);
} else {
- e_activity_handler_operation_progressing (cal_table->activity_handler, cal_table->activity_id, message, -1.0);
+ e_activity_handler_operation_progressing (cal_table->activity_handler, cal_table->activity_id, message, progress);
}
}
Index: gui/e-calendar-table.h
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-table.h,v
retrieving revision 1.26
diff -u -p -r1.26 e-calendar-table.h
--- gui/e-calendar-table.h 23 Jun 2005 09:11:05 -0000 1.26
+++ gui/e-calendar-table.h 1 Jul 2005 11:26:19 -0000
@@ -102,7 +102,8 @@ void e_calendar_table_save_state (EC
void e_calendar_table_set_activity_handler (ECalendarTable *cal_table,
EActivityHandler *activity_handler);
void e_calendar_table_set_status_message (ECalendarTable *cal_table,
- const gchar *message);
+ const gchar *message,
+ double progress);
G_END_DECLS
Index: gui/e-calendar-view.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-view.c,v
retrieving revision 1.83
diff -u -p -r1.83 e-calendar-view.c
--- gui/e-calendar-view.c 22 Jun 2005 14:32:35 -0000 1.83
+++ gui/e-calendar-view.c 1 Jul 2005 11:26:20 -0000
@@ -550,7 +550,7 @@ e_calendar_view_set_activity_handler (EC
}
void
-e_calendar_view_set_status_message (ECalendarView *cal_view, const gchar *message)
+e_calendar_view_set_status_message (ECalendarView *cal_view, const gchar *message, double progress)
{
ECalendarViewPrivate *priv;
@@ -576,7 +576,7 @@ e_calendar_view_set_status_message (ECal
g_free (client_id);
} else {
- e_activity_handler_operation_progressing (priv->activity_handler, priv->activity_id, message, -1.0);
+ e_activity_handler_operation_progressing (priv->activity_handler, priv->activity_id, message, progress);
}
}
@@ -650,7 +650,7 @@ e_calendar_view_cut_clipboard (ECalendar
if (!selected)
return;
- e_calendar_view_set_status_message (cal_view, _("Deleting selected objects"));
+ e_calendar_view_set_status_message (cal_view, _("Deleting selected objects"), -1.0);
e_calendar_view_copy_clipboard (cal_view);
for (l = selected; l != NULL; l = l->next) {
@@ -693,7 +693,7 @@ e_calendar_view_cut_clipboard (ECalendar
g_object_unref (comp);
}
- e_calendar_view_set_status_message (cal_view, NULL);
+ e_calendar_view_set_status_message (cal_view, NULL, -1.0);
g_list_free (selected);
}
@@ -777,7 +777,7 @@ clipboard_get_text_cb (GtkClipboard *cli
if (kind != ICAL_VCALENDAR_COMPONENT && kind != ICAL_VEVENT_COMPONENT)
return;
- e_calendar_view_set_status_message (cal_view, _("Updating objects"));
+ e_calendar_view_set_status_message (cal_view, _("Updating objects"), -1.0);
e_calendar_view_get_selected_time_range (cal_view, &selected_time_start, &selected_time_end);
if ((selected_time_end - selected_time_start) == 60 * 60 * 24)
@@ -816,7 +816,7 @@ clipboard_get_text_cb (GtkClipboard *cli
e_calendar_view_add_event (cal_view, client, selected_time_start, default_zone, icalcomp, in_top_canvas);
}
- e_calendar_view_set_status_message (cal_view, NULL);
+ e_calendar_view_set_status_message (cal_view, NULL, -1.0);
}
void
@@ -1201,14 +1201,14 @@ transfer_selected_items (ECalendarView *
/* process all selected events */
if (remove_item)
- e_calendar_view_set_status_message (cal_view, _("Moving items"));
+ e_calendar_view_set_status_message (cal_view, _("Moving items"), -1.0);
else
- e_calendar_view_set_status_message (cal_view, _("Copying items"));
+ e_calendar_view_set_status_message (cal_view, _("Copying items"), -1.0);
for (l = selected; l != NULL; l = l->next)
transfer_item_to ((ECalendarViewEvent *) l->data, dest_client, remove_item);
- e_calendar_view_set_status_message (cal_view, NULL);
+ e_calendar_view_set_status_message (cal_view, NULL, -1.0);
/* free memory */
g_object_unref (destination_source);
Index: gui/e-calendar-view.h
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-view.h,v
retrieving revision 1.27
diff -u -p -r1.27 e-calendar-view.h
--- gui/e-calendar-view.h 7 Oct 2004 21:03:36 -0000 1.27
+++ gui/e-calendar-view.h 1 Jul 2005 11:26:20 -0000
@@ -113,7 +113,7 @@ gboolean e_calendar_view_get_use_2
void e_calendar_view_set_use_24_hour_format (ECalendarView *view, gboolean use_24_hour);
void e_calendar_view_set_activity_handler (ECalendarView *cal_view, EActivityHandler *activity_handler);
-void e_calendar_view_set_status_message (ECalendarView *cal_view, const gchar *message);
+void e_calendar_view_set_status_message (ECalendarView *cal_view, const gchar *message, double percent);
GList *e_calendar_view_get_selected_events (ECalendarView *cal_view);
gboolean e_calendar_view_get_selected_time_range (ECalendarView *cal_view, time_t *start_time, time_t *end_time);
Index: gui/e-tasks.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-tasks.c,v
retrieving revision 1.115
diff -u -p -r1.115 e-tasks.c
--- gui/e-tasks.c 17 Jun 2005 15:20:27 -0000 1.115
+++ gui/e-tasks.c 1 Jul 2005 11:26:20 -0000
@@ -330,6 +330,21 @@ model_row_changed_cb (ETableModel *etm,
}
static void
+view_progress_cb (ECalModel *model, const char *message, double progress, ECalSourceType type, ETasks *tasks)
+{
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (e_tasks_get_calendar_table (tasks)),
+ message, progress);
+}
+
+static void
+view_done_cb (ECalModel *model, ECalendarStatus status, ECalSourceType type, ETasks *tasks)
+{
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (e_tasks_get_calendar_table (tasks)),
+ NULL, -1.0);
+
+}
+
+static void
setup_config (ETasks *tasks)
{
ETasksPrivate *priv;
@@ -540,6 +555,11 @@ setup_widgets (ETasks *tasks)
model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->tasks_view));
g_signal_connect (G_OBJECT (model), "model_row_changed",
G_CALLBACK (model_row_changed_cb), tasks);
+
+ g_signal_connect (G_OBJECT (model), "cal_view_progress",
+ G_CALLBACK (view_progress_cb), tasks);
+ g_signal_connect (G_OBJECT (model), "cal_view_done",
+ G_CALLBACK (view_done_cb), tasks);
}
/* Class initialization function for the gnome calendar */
@@ -744,7 +764,7 @@ set_status_message (ETasks *tasks, const
priv = tasks->priv;
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->tasks_view), msg_string);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->tasks_view), msg_string, -1.0);
}
/* Callback from the calendar client when an error occurs in the backend */
@@ -784,7 +804,7 @@ backend_died_cb (ECal *client, gpointer
gtk_signal_emit (GTK_OBJECT (tasks), e_tasks_signals[SOURCE_REMOVED], source);
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (e_tasks_get_calendar_table (tasks)), NULL);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (e_tasks_get_calendar_table (tasks)), NULL, -1.0);
e_error_run (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tasks))),
"calendar:tasks-crashed", NULL);
Index: gui/gnome-cal.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/gnome-cal.c,v
retrieving revision 1.379
diff -u -p -r1.379 gnome-cal.c
--- gui/gnome-cal.c 27 Jun 2005 00:43:07 -0000 1.379
+++ gui/gnome-cal.c 1 Jul 2005 11:26:22 -0000
@@ -719,7 +719,7 @@ update_query (GnomeCalendar *gcal)
if (priv->updating == TRUE) {
return;
}
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), _("Updating query"));
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), _("Updating query"), -1.0);
e_calendar_item_clear_marks (priv->date_navigator->calitem);
priv->updating = TRUE;
@@ -741,7 +741,7 @@ update_query (GnomeCalendar *gcal)
real_sexp = adjust_e_cal_view_sexp (gcal, priv->sexp);
if (!real_sexp) {
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
priv->updating = FALSE;
return; /* No time range is set, so don't start a query */
}
@@ -776,7 +776,7 @@ update_query (GnomeCalendar *gcal)
/* free memory */
priv->updating = FALSE;
g_free (real_sexp);
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
update_todo_view (gcal);
}
@@ -1226,6 +1226,28 @@ config_categories_changed_cb (EConfigLis
g_ptr_array_free (cat_array, TRUE);
}
+
+static void
+view_progress_cb (ECalModel *model, const char *message, double progress, ECalSourceType type, GnomeCalendar *gcal)
+{
+ if (type == E_CAL_SOURCE_TYPE_EVENT) {
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (gcal->priv->week_view), message, progress);
+ } else if (type == E_CAL_SOURCE_TYPE_TODO) {
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (gcal->priv->todo), message, progress);
+ }
+}
+
+static void
+view_done_cb (ECalModel *model, ECalendarStatus status, ECalSourceType type, GnomeCalendar *gcal)
+{
+ if (type == E_CAL_SOURCE_TYPE_EVENT) {
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (gcal->priv->week_view), NULL, -1.0);
+ } else if (type == E_CAL_SOURCE_TYPE_TODO) {
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (gcal->priv->todo), NULL, -1.0);
+ }
+
+}
+
static void
setup_widgets (GnomeCalendar *gcal)
{
@@ -1234,6 +1256,7 @@ setup_widgets (GnomeCalendar *gcal)
gchar *filename;
ETable *etable;
GtkAdjustment *adjustment;
+ ECalModel *w_model;
int i;
priv = gcal->priv;
@@ -1313,6 +1336,11 @@ setup_widgets (GnomeCalendar *gcal)
g_signal_connect (etable, "selection_change",
G_CALLBACK (table_selection_change_cb), gcal);
+
+ g_signal_connect (e_calendar_table_get_model (priv->todo), "cal_view_progress",
+ G_CALLBACK (view_progress_cb), gcal);
+ g_signal_connect (e_calendar_table_get_model (priv->todo), "cal_view_done",
+ G_CALLBACK (view_done_cb), gcal);
/* Timeout check to hide completed items */
priv->update_timeout = g_timeout_add_full (G_PRIORITY_LOW, 60000, (GSourceFunc) update_todo_view_cb, gcal, NULL);
@@ -1350,6 +1378,11 @@ setup_widgets (GnomeCalendar *gcal)
g_signal_connect (adjustment, "value_changed",
G_CALLBACK (week_view_adjustment_changed_cb),
gcal);
+ w_model = e_calendar_view_get_model (priv->week_view);
+ g_signal_connect (w_model, "cal_view_progress",
+ G_CALLBACK (view_progress_cb), gcal);
+ g_signal_connect (w_model, "cal_view_done",
+ G_CALLBACK (view_done_cb), gcal);
/* The Month View. */
priv->month_view = e_week_view_new ();
@@ -1366,7 +1399,7 @@ setup_widgets (GnomeCalendar *gcal)
g_signal_connect (adjustment, "value_changed",
G_CALLBACK (month_view_adjustment_changed_cb),
gcal);
-
+
/* The List View. */
priv->list_view = e_cal_list_view_new ();
@@ -2212,10 +2245,10 @@ client_cal_opened_cb (ECal *ecal, ECalen
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT:
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
break;
case E_CAL_SOURCE_TYPE_TODO:
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL, -1.0);
break;
default:
break;
@@ -2255,7 +2288,7 @@ client_cal_opened_cb (ECal *ecal, ECalen
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT :
msg = g_strdup_printf (_("Loading appointments at %s"), e_cal_get_uri (ecal));
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), msg);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), msg, -1.0);
g_free (msg);
/* add client to the views */
@@ -2269,17 +2302,17 @@ client_cal_opened_cb (ECal *ecal, ECalen
/* update date navigator query */
update_query (gcal);
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
break;
case E_CAL_SOURCE_TYPE_TODO :
msg = g_strdup_printf (_("Loading tasks at %s"), e_cal_get_uri (ecal));
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), msg);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), msg, -1.0);
g_free (msg);
e_cal_model_add_client (e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo)), ecal);
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL, -1.0);
break;
default:
@@ -2305,10 +2338,10 @@ default_client_cal_opened_cb (ECal *ecal
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT:
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
break;
case E_CAL_SOURCE_TYPE_TODO:
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL, -1.0);
break;
default:
break;
@@ -2377,10 +2410,10 @@ open_ecal (GnomeCalendar *gcal, ECal *ca
msg = g_strdup_printf (_("Opening %s"), e_cal_get_uri (cal));
switch (e_cal_get_source_type (cal)) {
case E_CAL_SOURCE_TYPE_EVENT :
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), msg);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), msg, -1.0);
break;
case E_CAL_SOURCE_TYPE_TODO :
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), msg);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), msg, -1.0);
break;
default:
g_assert_not_reached ();
@@ -2440,7 +2473,7 @@ backend_died_cb (ECal *ecal, gpointer da
case E_CAL_SOURCE_TYPE_EVENT:
id = "calendar:calendar-crashed";
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
gtk_signal_emit (GTK_OBJECT (gcal), gnome_calendar_signals[SOURCE_REMOVED], source_type, source);
break;
@@ -2448,7 +2481,7 @@ backend_died_cb (ECal *ecal, gpointer da
case E_CAL_SOURCE_TYPE_TODO:
id = "calendar:tasks-crashed";
- e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL, -1.0);
gtk_signal_emit (GTK_OBJECT (gcal), gnome_calendar_signals[SOURCE_REMOVED], source_type, source);
break;
@@ -3264,7 +3297,7 @@ gnome_calendar_purge (GnomeCalendar *gca
" (make-time \"%s\"))",
start, end);
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), _("Purging"));
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), _("Purging"), -1.0);
/* FIXME Confirm expunge */
for (l = priv->clients_list[E_CAL_SOURCE_TYPE_EVENT]; l != NULL; l = l->next) {
@@ -3301,7 +3334,7 @@ gnome_calendar_purge (GnomeCalendar *gca
g_list_free (objects);
}
- e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL);
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1.0);
g_free (sexp);
g_free (start);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]