1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#include <gtk/gtk.h>
#include <sync/sync_group.h>
#include <sync/sync_item.h>
#include <sync/sync_evo2_item.h>
#include <sync/sync_gcal_item.h>
static GtkWidget *window, *button, *progress, *scrollview, *textview, *vbox;
static void
finished_cb (SyncGroup *group) {
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), "Success");
gtk_widget_set_sensitive (button, TRUE);
}
static void
failed_cb (SyncGroup *group, const gchar *error)
{
finished_cb (group);
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), "Failed");
gtk_text_buffer_set_text (gtk_text_view_get_buffer (
GTK_TEXT_VIEW (textview)), error, -1);
gtk_widget_show (scrollview);
}
static void
clicked_cb (GtkButton *button, SyncGroup *group) {
gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), "Preparing...");
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), 0);
sync_group_start (group);
gtk_widget_hide (scrollview);
}
static void
started_cb (SyncGroup *group)
{
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress),
"Synchronising...");
}
static void
progress_cb (SyncGroup *group, gdouble fraction)
{
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), fraction);
}
int
main (int argc, char **argv) {
SyncItem *item1, *item2;
SyncGroup *group;
GOptionContext *context;
static gchar *user = NULL;
static gchar *pass = NULL;
static GOptionEntry entries[] = {
{ "user", 'u', 0, G_OPTION_ARG_STRING, &user,
"GMail user-name", NULL },
{ "password", 'p', 0, G_OPTION_ARG_STRING, &pass,
"GMail password", NULL },
{ NULL }
};
context = g_option_context_new (
" - A Google calendar synchronisation tool");
g_option_context_add_main_entries (context, entries, NULL);
g_option_context_add_group (context, gtk_get_option_group (TRUE));
g_option_context_parse (context, &argc, &argv, NULL);
if ((!user) || (!pass)) {
g_error ("No username or password specified");
return 1;
}
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
vbox = gtk_vbox_new (FALSE, 6);
button = gtk_button_new_with_label ("Synchronise");
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
progress = gtk_progress_bar_new ();
gtk_box_pack_start (GTK_BOX (vbox), progress, FALSE, TRUE, 0);
scrollview = gtk_scrolled_window_new (NULL, NULL);
textview = gtk_text_view_new ();
gtk_container_add (GTK_CONTAINER (scrollview), textview);
gtk_box_pack_start (GTK_BOX (vbox), scrollview, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
item1 = sync_evo2_item_new ("Local", NULL, NULL, NULL);
item2 = sync_gcal_item_new ("GCal", user, pass);
group = sync_group_new_with_items (item1, item2);
gtk_widget_show_all (window);
gtk_widget_hide (scrollview);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (clicked_cb), group);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (G_OBJECT (group), "started",
G_CALLBACK (started_cb), NULL);
g_signal_connect (G_OBJECT (group), "progress",
G_CALLBACK (progress_cb), NULL);
g_signal_connect (G_OBJECT (group), "finished",
G_CALLBACK (finished_cb), NULL);
g_signal_connect (G_OBJECT (group), "failed",
G_CALLBACK (failed_cb), NULL);
gtk_main ();
return 0;
}
|