From cb837c2d51fe511b01367e987099ee5d9837f63e Mon Sep 17 00:00:00 2001 From: Joni Kokko Date: Wed, 14 Jan 2009 12:57:39 +0200 Subject: [PATCH] Created layout loader --- irreco/src/core/irreco_remote_download_dlg.c | 113 +++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/irreco/src/core/irreco_remote_download_dlg.c b/irreco/src/core/irreco_remote_download_dlg.c index b1a1f139..877cf625 100644 --- a/irreco/src/core/irreco_remote_download_dlg.c +++ b/irreco/src/core/irreco_remote_download_dlg.c @@ -1345,6 +1345,9 @@ void irreco_show_remote_download_dlg(IrrecoData *irreco_data, GtkWindow *parent) do { gint response = gtk_dialog_run(GTK_DIALOG(self)); + if (self->loader_func_id != 0) { + continue; + } switch (response) { case IRRECO_REMOTE_REFRESH: IRRECO_DEBUG("IRRECO_REMOTE_REFRESH\n"); @@ -1373,6 +1376,12 @@ void irreco_show_remote_download_dlg(IrrecoData *irreco_data, GtkWindow *parent) IrrecoThemeManager *manager = self->irreco_data->theme_manager; GList *themes; + gint layout_index = 1; + GString *layout_filename = g_string_new(""); + GString *layout_data = NULL; + const gchar *layout_name; + IrrecoButtonLayout *layout; + IRRECO_DEBUG("IRRECO_REMOTE_DOWNLOAD\n"); webdb_cache = irreco_data_get_webdb_cache( self->irreco_data, FALSE); @@ -1424,8 +1433,112 @@ void irreco_show_remote_download_dlg(IrrecoData *irreco_data, GtkWindow *parent) } irreco_theme_manager_update_theme_manager(manager); + /* Download layout */ + + /*Create filename */ + while(1) { + g_string_printf(layout_filename, + "%s/layout%d.conf", + irreco_get_config_dir("irreco"), + layout_index); + if (!irreco_file_exists(layout_filename->str)) { + IRRECO_DEBUG("%s\n", + layout_filename->str); + break; + } + layout_index++; + } + + /* Get layout_data */ + if (!irreco_webdb_cache_get_file(webdb_cache, + remote->file_hash->str, + remote->file_name->str, + &layout_data)) { + irreco_error_dlg(GTK_WINDOW(self), + irreco_webdb_cache_get_error( + webdb_cache)); + goto end; + } + + /* Check if there is same remotename already */ + if (irreco_string_table_exists( + irreco_data->irreco_layout_array, + remote->name->str)) { + gint i = 2; + gboolean run = TRUE; + gchar *new_name; + GKeyFile *keyfile = g_key_file_new(); + GError *error; + GString *cmd; + + /* Create new name */ + while (run) { + new_name = g_strdup_printf("%s_%d", + remote->name->str, i++); + if (!irreco_string_table_exists( + irreco_data->irreco_layout_array, + new_name)) { + run = FALSE; + IRRECO_DEBUG("NEW NAME: %s\n", + new_name); + } else { + g_free(new_name); + } + } + + /* Create key file */ + if (!g_key_file_load_from_data(keyfile, + layout_data->str, layout_data->len, + G_KEY_FILE_KEEP_TRANSLATIONS, &error)) { + IRRECO_DEBUG("%s\n", error->message); + g_error_free(error); + goto end; + } + + /* Set new name for remote */ + g_key_file_set_string(keyfile, "layout", + "name", new_name); + + /* Save keyfile */ + irreco_write_keyfile(keyfile, + layout_filename->str); + + /* Set new name for every button */ + cmd = g_string_new(""); + g_string_printf(cmd, + "cat %s | sed s/^layout=%s$/layout=%s/ > %s", + layout_filename->str, + remote->name->str, new_name, + layout_filename->str); + system(cmd->str); + g_string_free(cmd, FALSE); + + } else if (!irreco_write_file(layout_filename->str, + layout_data->str, layout_data->len)) { + irreco_error_dlg(GTK_WINDOW(self), + "Save file error!"); + goto end; + } + irreco_config_read_layouts_from_files( + self->irreco_data); + irreco_string_table_index( + irreco_data->irreco_layout_array, + layout_index - 1 , &layout_name, + (gpointer *) &layout); + + irreco_window_manager_set_layout( + self->irreco_data->window_manager, + layout); + + irreco_info_dlg(GTK_WINDOW(self), + "Remote downloaded successfully!"); + end: irreco_webdb_remote_print(self->remote); + g_string_free(layout_filename, FALSE); + if (layout_data != NULL) { + g_string_free(layout_data, FALSE); + } break; } case IRRECO_REMOTE_DONE: -- 2.11.4.GIT