summaryrefslogtreecommitdiffstats
path: root/sync/src/sync-test.c
blob: 49e3114df578d9098f1ce7609edae8327304055e (plain)
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;
}