5
* Copyright (C) 2009-2011 Darran Kartaschew
7
* This file is part of the gMTP package.
9
* gMTP is free software; you can redistribute it and/or modify
10
* it under the terms of the BSD License as included within the
11
* file 'COPYING' located in the root directory
16
#include <glib/gprintf.h>
17
#include <glib/gi18n.h>
19
#include <gconf/gconf.h>
20
#include <gconf/gconf-client.h>
25
#include "interface.h"
26
#include "callbacks.h"
30
Preferences_Struct Preferences;
31
GConfClient *gconfconnect = NULL;
32
guint gconf_callback_id;
34
void setupPreferences(){
35
// We setup default Preferences.
36
Preferences.ask_download_path = TRUE;
37
Preferences.attemptDeviceConnectOnStart = TRUE;
39
Preferences.fileSystemDownloadPath = g_string_new(g_getenv("HOMEPATH"));
40
Preferences.fileSystemUploadPath = g_string_new(g_getenv("HOMEPATH"));
42
Preferences.fileSystemDownloadPath = g_string_new(g_getenv("HOME"));
43
Preferences.fileSystemUploadPath = g_string_new(g_getenv("HOME"));
45
// Now setup our gconf callbacks;
46
if(gconfconnect == NULL)
47
gconfconnect = gconf_client_get_default();
48
if(gconf_client_dir_exists(gconfconnect, "/apps/gMTP", NULL) == TRUE) {
49
gconf_client_add_dir(gconfconnect, "/apps/gMTP", GCONF_CLIENT_PRELOAD_ONELEVEL , NULL );
50
gconf_callback_id = gconf_client_notify_add(gconfconnect, "/apps/gMTP", (GConfClientNotifyFunc) gconf_callback_func, NULL, NULL, NULL) ;
52
// Now attempt to read the config file from the user config folder.
54
// Now print our preferences
55
//g_printf("Upload Path = %s\nDownload Path = %s\nDownloadPrompt = %x\nAutoConnect = %x\n",
56
// Preferences.fileSystemUploadPath->str, Preferences.fileSystemDownloadPath->str,
57
// Preferences.ask_download_path, Preferences.attemptDeviceConnectOnStart);
60
gboolean loadPreferences(){
62
if(gconf_client_dir_exists(gconfconnect, "/apps/gMTP", NULL) == TRUE) {
63
gconf_client_preload(gconfconnect, "/apps/gMTP", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
64
Preferences.ask_download_path = gconf_client_get_bool (gconfconnect, "/apps/gMTP/promptDownloadPath", NULL);
65
Preferences.confirm_file_delete_op = gconf_client_get_bool (gconfconnect, "/apps/gMTP/confirmFileDelete", NULL);
66
Preferences.prompt_overwrite_file_op = gconf_client_get_bool (gconfconnect, "/apps/gMTP/promptOverwriteFile", NULL);
67
Preferences.attemptDeviceConnectOnStart = gconf_client_get_bool (gconfconnect, "/apps/gMTP/autoconnectdevice", NULL);
68
Preferences.fileSystemDownloadPath = g_string_new(gconf_client_get_string(gconfconnect, "/apps/gMTP/DownloadPath", NULL));
69
Preferences.fileSystemUploadPath = g_string_new(gconf_client_get_string(gconfconnect, "/apps/gMTP/UploadPath", NULL));
70
Preferences.view_size = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewFileSize", NULL);
71
Preferences.view_type = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewFileType", NULL);
72
Preferences.view_track_number = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewTrackNumber", NULL);
73
Preferences.view_title = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewTitle", NULL);
74
Preferences.view_artist = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewArtist", NULL);
75
Preferences.view_album = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewAlbum", NULL);
76
Preferences.view_year = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewYear", NULL);
77
Preferences.view_genre = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewGenre", NULL);
78
Preferences.view_duration = gconf_client_get_bool (gconfconnect, "/apps/gMTP/viewDuration", NULL);
79
//g_print("Settings loaded\n");
81
g_fprintf(stderr, _("WARNING: gconf schema invalid, reverting to defaults. Please ensure schema is loaded in gconf database.\n"));
83
gconf_client_clear_cache(gconfconnect);
84
// Set some menu options and view states.
85
gtk_tree_view_column_set_visible(column_Size, Preferences.view_size);
86
gtk_tree_view_column_set_visible(column_Type, Preferences.view_type);
87
gtk_tree_view_column_set_visible(column_Track_Number, Preferences.view_track_number);
88
gtk_tree_view_column_set_visible(column_Title, Preferences.view_title);
89
gtk_tree_view_column_set_visible(column_Artist, Preferences.view_artist);
90
gtk_tree_view_column_set_visible(column_Album, Preferences.view_album);
91
gtk_tree_view_column_set_visible(column_Year, Preferences.view_year);
92
gtk_tree_view_column_set_visible(column_Genre, Preferences.view_genre);
93
gtk_tree_view_column_set_visible(column_Duration, Preferences.view_duration);
95
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_filesize), Preferences.view_size);
96
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_filetype), Preferences.view_type);
97
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_track_number), Preferences.view_track_number);
98
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_title), Preferences.view_title);
99
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_artist), Preferences.view_artist);
100
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_album), Preferences.view_album);
101
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_year), Preferences.view_year);
102
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_genre), Preferences.view_genre);
103
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_duration), Preferences.view_duration);
108
gboolean savePreferences(){
109
//GConfClient *gconfconnect;
110
//gconfconnect = gconf_client_get_default();
111
if(gconf_client_dir_exists(gconfconnect, "/apps/gMTP", NULL) == TRUE) {
112
gconf_client_preload(gconfconnect, "/apps/gMTP", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
113
gconf_client_set_bool (gconfconnect, "/apps/gMTP/promptDownloadPath", Preferences.ask_download_path, NULL);
114
gconf_client_set_bool (gconfconnect, "/apps/gMTP/autoconnectdevice", Preferences.attemptDeviceConnectOnStart, NULL);
115
gconf_client_set_bool (gconfconnect, "/apps/gMTP/promptOverwriteFile", Preferences.prompt_overwrite_file_op, NULL);
116
gconf_client_set_bool (gconfconnect, "/apps/gMTP/confirmFileDelete", Preferences.confirm_file_delete_op, NULL);
117
gconf_client_set_string(gconfconnect, "/apps/gMTP/DownloadPath",Preferences.fileSystemDownloadPath->str, NULL);
118
gconf_client_set_string(gconfconnect, "/apps/gMTP/UploadPath", Preferences.fileSystemUploadPath->str, NULL);
119
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewFileSize", Preferences.view_size, NULL);
120
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewFileType", Preferences.view_type, NULL);
121
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewTrackNumber", Preferences.view_track_number, NULL);
122
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewTitle", Preferences.view_title, NULL);
123
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewArtist", Preferences.view_artist, NULL);
124
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewAlbum", Preferences.view_album, NULL);
125
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewYear", Preferences.view_year, NULL);
126
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewGenre", Preferences.view_genre, NULL);
127
gconf_client_set_bool (gconfconnect, "/apps/gMTP/viewDuration", Preferences.view_duration, NULL);
128
//g_print("Settings saved\n");
130
g_fprintf(stderr, _("WARNING: gconf schema invalid, unable to save! Please ensure schema is loaded in gconf database.\n"));
132
gconf_client_suggest_sync(gconfconnect, NULL);
133
gconf_client_clear_cache(gconfconnect);
137
void gconf_callback_func(GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data){
138
//g_printf("Gconf callback - %s\n", entry->key);
139
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/promptDownloadPath") == 0){
140
//set our promptDownloadPath in Preferences
141
Preferences.ask_download_path = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
142
//g_printf("/apps/gMTP/promptDownloadPath = %d\n", Preferences.ask_download_path );
143
if(windowPrefsDialog != NULL) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbuttonDownloadPath), Preferences.ask_download_path);
146
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/autoconnectdevice") == 0){
147
//set our promptDownloadPath in Preferences
148
Preferences.attemptDeviceConnectOnStart = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
149
//g_printf("/apps/gMTP/autoconnectdevice = %d\n", Preferences.attemptDeviceConnectOnStart );
150
if(windowPrefsDialog != NULL) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbuttonDeviceConnect), Preferences.attemptDeviceConnectOnStart);
153
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/promptOverwriteFile") == 0){
154
//set our promptDownloadPath in Preferences
155
Preferences.prompt_overwrite_file_op = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
156
//g_printf("/apps/gMTP/promptOverwriteFile = %d\n", Preferences.prompt_overwrite_file_op );
157
if(windowPrefsDialog != NULL) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbuttonConfirmOverWriteFileOp), Preferences.prompt_overwrite_file_op);
160
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/confirmFileDelete") == 0){
161
//set our promptDownloadPath in Preferences
162
Preferences.confirm_file_delete_op = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
163
//g_printf("/apps/gMTP/confirmFileDelete = %d\n", Preferences.confirm_file_delete_op );
164
if(windowPrefsDialog != NULL) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbuttonConfirmFileOp), Preferences.confirm_file_delete_op);
167
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/DownloadPath") == 0){
168
//set our promptDownloadPath in Preferences
169
Preferences.fileSystemDownloadPath = g_string_assign(Preferences.fileSystemDownloadPath, gconf_value_to_string((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry)));
170
//g_printf("/apps/gMTP/DownloadPath = %s\n", Preferences.fileSystemDownloadPath->str );
171
if(windowPrefsDialog != NULL) gtk_entry_set_text(GTK_ENTRY(entryDownloadPath), Preferences.fileSystemDownloadPath->str);
174
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/UploadPath") == 0){
175
//set our promptDownloadPath in Preferences
176
Preferences.fileSystemUploadPath = g_string_assign(Preferences.fileSystemUploadPath, gconf_value_to_string((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry)));
177
//g_printf("/apps/gMTP/UploadPath = %s\n", Preferences.fileSystemUploadPath->str );
178
if(windowPrefsDialog != NULL) gtk_entry_set_text(GTK_ENTRY(entryUploadPath), Preferences.fileSystemUploadPath->str);
181
// View menu Options.
182
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewFileSize") == 0){
183
//set our promptDownloadPath in Preferences
184
Preferences.view_size = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
185
gtk_tree_view_column_set_visible(column_Size, Preferences.view_size);
186
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_filesize), Preferences.view_size);
189
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewFileType") == 0){
190
//set our promptDownloadPath in Preferences
191
Preferences.view_type = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
192
gtk_tree_view_column_set_visible(column_Type, Preferences.view_type);
193
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_filetype), Preferences.view_type);
196
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewTrackNumber") == 0){
197
//set our promptDownloadPath in Preferences
198
Preferences.view_track_number = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
199
gtk_tree_view_column_set_visible(column_Track_Number, Preferences.view_track_number);
200
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_track_number), Preferences.view_track_number);
203
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewTitle") == 0){
204
//set our promptDownloadPath in Preferences
205
Preferences.view_title = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
206
gtk_tree_view_column_set_visible(column_Title, Preferences.view_title);
207
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_title), Preferences.view_title);
210
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewArtist") == 0){
211
//set our promptDownloadPath in Preferences
212
Preferences.view_artist = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
213
gtk_tree_view_column_set_visible(column_Artist, Preferences.view_artist);
214
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_artist), Preferences.view_artist);
217
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewAlbum") == 0){
218
//set our promptDownloadPath in Preferences
219
Preferences.view_album = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
220
gtk_tree_view_column_set_visible(column_Album, Preferences.view_album);
221
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_album), Preferences.view_album);
224
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewYear") == 0){
225
//set our promptDownloadPath in Preferences
226
Preferences.view_year = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
227
gtk_tree_view_column_set_visible(column_Year, Preferences.view_year);
228
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_year), Preferences.view_year);
231
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewGenre") == 0){
232
//set our promptDownloadPath in Preferences
233
Preferences.view_genre = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
234
gtk_tree_view_column_set_visible(column_Genre, Preferences.view_genre);
235
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_genre), Preferences.view_genre);
238
if(g_ascii_strcasecmp(entry->key, "/apps/gMTP/viewDuration") == 0){
239
//set our promptDownloadPath in Preferences
240
Preferences.view_duration = (gboolean) gconf_value_get_bool((const GConfValue*)gconf_entry_get_value((const GConfEntry*)entry));
241
gtk_tree_view_column_set_visible(column_Duration, Preferences.view_duration);
242
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_view_duration), Preferences.view_duration);
245
g_fprintf(stderr, _("WARNING: gconf_callback_func() failed - we got a callback for a key thats not ours?\n"));