gtk-ui: show status "waiting" with a progress spinner
This commit is contained in:
parent
e6a69ce45a
commit
1944d14256
|
@ -211,6 +211,10 @@ syncevo_session_status_from_string (const char *status_str)
|
|||
status = SYNCEVO_STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
if (status_str && strstr (status_str, ";waiting")) {
|
||||
status |= SYNCEVO_STATUS_WAITING;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -239,26 +243,26 @@ syncevo_sync_mode_from_string (const char *mode_str)
|
|||
}
|
||||
}
|
||||
|
||||
static SyncevoSourceStatus
|
||||
static SyncevoSessionStatus
|
||||
syncevo_source_status_from_string (const char *status_str)
|
||||
{
|
||||
SyncevoSourceStatus status;
|
||||
SyncevoSessionStatus status;
|
||||
|
||||
if (!status_str) {
|
||||
status = SYNCEVO_SOURCE_UNKNOWN;
|
||||
status = SYNCEVO_STATUS_UNKNOWN;
|
||||
} else if (g_str_has_prefix (status_str, "idle")) {
|
||||
status = SYNCEVO_SOURCE_IDLE;
|
||||
status = SYNCEVO_STATUS_IDLE;
|
||||
} else if (g_str_has_prefix (status_str, "running")) {
|
||||
status = SYNCEVO_SOURCE_RUNNING;
|
||||
status = SYNCEVO_STATUS_RUNNING;
|
||||
} else if (g_str_has_prefix (status_str, "done")) {
|
||||
status = SYNCEVO_SOURCE_DONE;
|
||||
status = SYNCEVO_STATUS_DONE;
|
||||
} else {
|
||||
status = SYNCEVO_SOURCE_UNKNOWN;
|
||||
status = SYNCEVO_STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
/* check modifiers */
|
||||
if (status_str && strstr (status_str, ";waiting")) {
|
||||
status |= SYNCEVO_SOURCE_WAITING;
|
||||
status |= SYNCEVO_STATUS_WAITING;
|
||||
}
|
||||
|
||||
return status;
|
||||
|
@ -281,7 +285,7 @@ syncevo_source_statuses_foreach (SyncevoSourceStatuses *source_statuses,
|
|||
const char *mode_str;
|
||||
const char *status_str;
|
||||
SyncevoSyncMode mode;
|
||||
SyncevoSourceStatus status;
|
||||
SyncevoSessionStatus status;
|
||||
guint error_code;
|
||||
|
||||
mode_str = g_value_get_string (g_value_array_get_nth (source_status, 0));
|
||||
|
|
|
@ -40,28 +40,20 @@ typedef enum {
|
|||
SYNCEVO_SYNC_ONE_WAY_FROM_SERVER,
|
||||
} SyncevoSyncMode;
|
||||
|
||||
/* SyncevoSessionStatus is a bitfield, although most value are exclusive */
|
||||
typedef enum {
|
||||
SYNCEVO_STATUS_UNKNOWN,
|
||||
SYNCEVO_STATUS_QUEUEING,
|
||||
SYNCEVO_STATUS_IDLE,
|
||||
SYNCEVO_STATUS_RUNNING,
|
||||
SYNCEVO_STATUS_ABORTING,
|
||||
SYNCEVO_STATUS_SUSPENDING,
|
||||
SYNCEVO_STATUS_DONE,
|
||||
} SyncevoSessionStatus;
|
||||
|
||||
|
||||
/* SyncevoSourceStatus is a bitfield, but only one of four first values
|
||||
* will be present */
|
||||
typedef enum {
|
||||
SYNCEVO_SOURCE_UNKNOWN = 0,
|
||||
SYNCEVO_SOURCE_IDLE = 1 << 0,
|
||||
SYNCEVO_SOURCE_RUNNING = 1 << 1,
|
||||
SYNCEVO_SOURCE_DONE = 1 << 2,
|
||||
SYNCEVO_STATUS_UNKNOWN = 0,
|
||||
SYNCEVO_STATUS_QUEUEING = 1 << 0,
|
||||
SYNCEVO_STATUS_IDLE = 1 << 1,
|
||||
SYNCEVO_STATUS_RUNNING = 1 << 2,
|
||||
SYNCEVO_STATUS_ABORTING = 1 << 3,
|
||||
SYNCEVO_STATUS_SUSPENDING = 1 << 4,
|
||||
SYNCEVO_STATUS_DONE = 1 << 5,
|
||||
|
||||
/* the ones below are modifiers */
|
||||
SYNCEVO_SOURCE_WAITING = 1 << 3,
|
||||
} SyncevoSourceStatus;
|
||||
SYNCEVO_STATUS_WAITING = 1 << 6
|
||||
} SyncevoSessionStatus;
|
||||
|
||||
|
||||
typedef enum {
|
||||
SYNCEVO_PHASE_NONE,
|
||||
|
@ -126,7 +118,7 @@ SyncevoSessionStatus syncevo_session_status_from_string (const char *status_str)
|
|||
|
||||
typedef void (*SourceStatusFunc) (char *name,
|
||||
SyncevoSyncMode mode,
|
||||
SyncevoSourceStatus status,
|
||||
SyncevoSessionStatus status,
|
||||
guint error_code,
|
||||
gpointer user_data);
|
||||
void
|
||||
|
|
|
@ -24,6 +24,7 @@ themercdir = $(datadir)/syncevolution/
|
|||
themerc_DATA = \
|
||||
close.png close_hover.png settings.png settings_hover.png \
|
||||
sync-generic.png \
|
||||
sync-spinner.gif \
|
||||
sync-ui.rc
|
||||
|
||||
desktopdir = $(datadir)/applications
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
|
@ -83,6 +83,7 @@ struct _app_data {
|
|||
GtkWidget *offline_label;
|
||||
GtkWidget *progress;
|
||||
GtkWidget *sync_status_label;
|
||||
GtkWidget *spinner_image;
|
||||
GtkWidget *sync_btn;
|
||||
GtkWidget *change_service_btn;
|
||||
GtkWidget *emergency_btn;
|
||||
|
@ -223,42 +224,6 @@ get_pretty_source_name (const char *source_name)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
static void
|
||||
add_error_info (app_data *data, const char *message, const char *external_reason)
|
||||
{
|
||||
GtkWidget *lbl;
|
||||
GList *l, *children;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (data->service_error_box));
|
||||
for (l = children; l; l = l->next) {
|
||||
GtkLabel *old_lbl = GTK_LABEL (l->data);
|
||||
|
||||
if (strcmp (message, gtk_label_get_text (old_lbl)) == 0) {
|
||||
g_list_free (children);
|
||||
return;
|
||||
}
|
||||
}
|
||||
g_list_free (children);
|
||||
|
||||
gtk_widget_show (data->errors_box);
|
||||
|
||||
lbl = gtk_label_new (message);
|
||||
gtk_label_set_line_wrap (GTK_LABEL (lbl), TRUE);
|
||||
|
||||
gtk_widget_set_size_request (lbl, 160, -1);
|
||||
gtk_widget_show (lbl);
|
||||
gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5);
|
||||
gtk_box_pack_start (GTK_BOX (data->service_error_box), lbl, FALSE, FALSE, 0);
|
||||
|
||||
if (external_reason) {
|
||||
g_warning ("%s: %s", message, external_reason);
|
||||
} else {
|
||||
g_warning ("%s", message);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
static void
|
||||
reload_config (app_data *data, const char *server)
|
||||
{
|
||||
|
@ -869,6 +834,10 @@ init_ui (app_data *data)
|
|||
data->emergency_btn = GTK_WIDGET (gtk_builder_get_object (builder, "emergency_btn"));
|
||||
data->sync_btn = GTK_WIDGET (gtk_builder_get_object (builder, "sync_btn"));
|
||||
data->sync_status_label = GTK_WIDGET (gtk_builder_get_object (builder, "sync_status_label"));
|
||||
data->spinner_image = GTK_WIDGET (gtk_builder_get_object (builder, "spinner_image"));
|
||||
gtk_image_set_from_file (GTK_IMAGE (data->spinner_image), THEMEDIR "sync-spinner.gif");
|
||||
gtk_widget_set_no_show_all (data->spinner_image, TRUE);
|
||||
gtk_widget_hide (data->spinner_image);
|
||||
|
||||
data->server_label = GTK_WIDGET (gtk_builder_get_object (builder, "sync_service_label"));
|
||||
data->last_synced_label = GTK_WIDGET (gtk_builder_get_object (builder, "last_synced_label"));
|
||||
|
@ -1746,55 +1715,25 @@ get_config_for_main_win_cb (SyncevoServer *server,
|
|||
static void
|
||||
set_running_session_status (app_data *data, SyncevoSessionStatus status)
|
||||
{
|
||||
switch (status) {
|
||||
case SYNCEVO_STATUS_QUEUEING:
|
||||
if (status & SYNCEVO_STATUS_QUEUEING) {
|
||||
g_warning ("Running session is queued, this shouldn't happen...");
|
||||
break;
|
||||
case SYNCEVO_STATUS_IDLE:
|
||||
} else if (status & SYNCEVO_STATUS_IDLE) {
|
||||
set_app_state (data, SYNC_UI_STATE_SERVER_OK);
|
||||
break;
|
||||
case SYNCEVO_STATUS_RUNNING:
|
||||
case SYNCEVO_STATUS_SUSPENDING:
|
||||
case SYNCEVO_STATUS_ABORTING:
|
||||
set_app_state (data, SYNC_UI_STATE_SYNCING);
|
||||
break;
|
||||
case SYNCEVO_STATUS_DONE:
|
||||
} else if (status & SYNCEVO_STATUS_DONE) {
|
||||
gtk_label_set_text (GTK_LABEL (data->sync_status_label),
|
||||
_("Sync complete"));
|
||||
set_app_state (data, SYNC_UI_STATE_SERVER_OK);
|
||||
set_sync_progress (data, 1.0, "");
|
||||
|
||||
break;
|
||||
default:
|
||||
g_warning ("unknown session status %d used!", status);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
update_source_status (char *name,
|
||||
SyncevoSyncMode mode,
|
||||
SyncevoSourceStatus status,
|
||||
guint error_code,
|
||||
app_data *data)
|
||||
{
|
||||
char *error;
|
||||
static char *waiting_source = NULL;
|
||||
|
||||
error = get_error_string_for_code (error_code, NULL);
|
||||
if (error) {
|
||||
/* TODO show sync error in UI -- but not duplicates */
|
||||
g_warning ("Source '%s' error: %s", name, error);
|
||||
g_free (error);
|
||||
} else if (status & SYNCEVO_STATUS_RUNNING ||
|
||||
status & SYNCEVO_STATUS_SUSPENDING ||
|
||||
status & SYNCEVO_STATUS_ABORTING) {
|
||||
set_app_state (data, SYNC_UI_STATE_SYNCING);
|
||||
}
|
||||
|
||||
if (status & SYNCEVO_SOURCE_WAITING) {
|
||||
g_free (waiting_source);
|
||||
waiting_source = g_strdup (name);
|
||||
/* TODO: start spinner */
|
||||
} else if (waiting_source && strcmp (waiting_source, name) == 0) {
|
||||
g_free (waiting_source);
|
||||
waiting_source = NULL;
|
||||
/* TODO: stop spinner */
|
||||
if (status & SYNCEVO_STATUS_WAITING) {
|
||||
gtk_widget_show (data->spinner_image);
|
||||
} else {
|
||||
gtk_widget_hide (data->spinner_image);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1806,10 +1745,6 @@ running_session_status_changed_cb (SyncevoSession *session,
|
|||
app_data *data)
|
||||
{
|
||||
set_running_session_status (data, status);
|
||||
|
||||
syncevo_source_statuses_foreach (source_statuses,
|
||||
(SourceStatusFunc)update_source_status,
|
||||
data);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -238,23 +238,26 @@
|
|||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="padding">6</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkImage" id="spinner_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox8">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -265,19 +268,6 @@
|
|||
<child>
|
||||
<widget class="GtkHBox" id="hbox20">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox19">
|
||||
<property name="height_request">30</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkVBox" id="info_box">
|
||||
<property name="visible">True</property>
|
||||
|
@ -292,46 +282,11 @@
|
|||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkHBox" id="errors_box">
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<widget class="GtkImage" id="error_img">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0</property>
|
||||
<property name="stock">gtk-dialog-error</property>
|
||||
<property name="icon-size">5</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkVBox" id="error_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="padding">5</property>
|
||||
<property name="position">1</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
|
|
Loading…
Reference in New Issue