New helper function. (idle_cb): Call it if we have a local shell. Also,
* main.c (attempt_upgrade): New helper function. (idle_cb): Call it if we have a local shell. Also, remove unused variables. * e-shell.c (e_shell_attempt_upgrade): New. * Evolution-Component.idl (Component.upgradeFromeVersion): New. svn path=/trunk/; revision=23403
This commit is contained in:
@ -1,3 +1,13 @@
|
||||
2003-11-17 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* main.c (attempt_upgrade): New helper function.
|
||||
(idle_cb): Call it if we have a local shell. Also, remove unused
|
||||
variables.
|
||||
|
||||
* e-shell.c (e_shell_attempt_upgrade): New.
|
||||
|
||||
* Evolution-Component.idl (Component.upgradeFromeVersion): New.
|
||||
|
||||
2003-11-17 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* e-shell-window-commands.c (command_open_new_window): New,
|
||||
|
@ -29,6 +29,14 @@ module Evolution {
|
||||
exception Failed {};
|
||||
exception UnknownType {};
|
||||
|
||||
|
||||
/*** Upgrade path. ***/
|
||||
|
||||
boolean upgradeFromVersion (in short major, in short minor, in short revision);
|
||||
|
||||
|
||||
/*** Basic functionality. ***/
|
||||
|
||||
/* Create the controls for embedding in the shell. */
|
||||
void createControls (out Bonobo::Control sidebar_control,
|
||||
out Bonobo::Control view_control)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-shell.c
|
||||
*
|
||||
* Copyright (C) 2000, 2001, 2002 Ximian, Inc.
|
||||
* Copyright (C) 2000, 2001, 2002, 2003 Ximian, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
@ -583,6 +583,79 @@ e_shell_new (EShellStartupLineMode startup_line_mode,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* e_shell_attempt_upgrade:
|
||||
* @shell:
|
||||
* @from_version:
|
||||
*
|
||||
* Upgrade config and components from the specified version name.
|
||||
*
|
||||
* Return value: %TRUE If it works, %FALSE if it fails (it should only fail if
|
||||
* upgrade from @from_version is unsupported).
|
||||
**/
|
||||
gboolean
|
||||
e_shell_attempt_upgrade (EShell *shell,
|
||||
const char *from_version)
|
||||
{
|
||||
GSList *component_infos, *p;
|
||||
int major, minor, revision;
|
||||
int current_major, current_minor, current_revision;
|
||||
gboolean success;
|
||||
|
||||
g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
|
||||
g_return_val_if_fail (from_version != NULL, FALSE);
|
||||
|
||||
sscanf (from_version, "%u.%u.%u", &major, &minor, &revision);
|
||||
sscanf (VERSION, "%u.%u.%u", ¤t_major, ¤t_minor, ¤t_revision);
|
||||
|
||||
if (! (current_major > major
|
||||
|| (current_major == major && current_minor > minor)
|
||||
|| (current_minor == current_minor && current_revision > current_revision))) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
success = TRUE;
|
||||
|
||||
component_infos = e_component_registry_peek_list (shell->priv->component_registry);
|
||||
for (p = component_infos; p != NULL; p = p->next) {
|
||||
const EComponentInfo *info = p->data;
|
||||
CORBA_Environment ev;
|
||||
gboolean component_upgraded;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
component_upgraded = GNOME_Evolution_Component_upgradeFromVersion (info->iface, major, minor, revision, &ev);
|
||||
|
||||
if (BONOBO_EX (&ev)) {
|
||||
char *exception_text;
|
||||
|
||||
// Ignore components that do not implement this version, it might just mean that they don't need an
|
||||
// upgrade path.
|
||||
if (strcmp (ev._id, ex_CORBA_NO_IMPLEMENT) == 0) {
|
||||
CORBA_exception_free (&ev);
|
||||
continue;
|
||||
}
|
||||
|
||||
exception_text = bonobo_exception_get_text (&ev);
|
||||
g_warning ("Upgrade of component \"%s\" from version %s failed with exception %s",
|
||||
info->alias, from_version, exception_text);
|
||||
g_free (exception_text);
|
||||
CORBA_exception_free (&ev);
|
||||
success = FALSE;
|
||||
} else {
|
||||
CORBA_exception_free (&ev);
|
||||
if (! component_upgraded) {
|
||||
g_warning ("Component \"%s\" could not upgrade configuration from version \"%s\"",
|
||||
info->alias, from_version);
|
||||
success = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* e_shell_create_window:
|
||||
* @shell: The shell for which to create a new window.
|
||||
|
@ -100,6 +100,9 @@ EShellConstructResult e_shell_construct (EShell *shell,
|
||||
EShell *e_shell_new (EShellStartupLineMode startup_line_mode,
|
||||
EShellConstructResult *construct_result_return);
|
||||
|
||||
gboolean e_shell_attempt_upgrade (EShell *shell,
|
||||
const char *from_version);
|
||||
|
||||
EShellWindow *e_shell_create_window (EShell *shell,
|
||||
const char *component_id,
|
||||
EShellWindow *template_window);
|
||||
|
24
shell/main.c
24
shell/main.c
@ -340,6 +340,25 @@ new_window_created_callback (EShell *shell,
|
||||
#endif /* DEVELOPMENT_WARNING */
|
||||
|
||||
|
||||
static void
|
||||
attempt_upgrade (EShell *shell)
|
||||
{
|
||||
GConfClient *gconf_client = gconf_client_get_default ();
|
||||
char *previous_version = gconf_client_get_string (gconf_client, "/apps/evolution/version", NULL);
|
||||
|
||||
if (previous_version != NULL) {
|
||||
if (! e_shell_attempt_upgrade (shell, previous_version))
|
||||
e_notice (NULL, GTK_MESSAGE_ERROR,
|
||||
_("Warning: Evolution could not upgrade all your data from version %s.\n"
|
||||
"The data hasn't been deleted, but it will not be seen by this version of Evolution.\n"),
|
||||
previous_version);
|
||||
}
|
||||
|
||||
gconf_client_set_string (gconf_client, "/apps/evolution/version", VERSION, NULL);
|
||||
g_object_unref (gconf_client);
|
||||
}
|
||||
|
||||
|
||||
/* This is for doing stuff that requires the GTK+ loop to be running already. */
|
||||
|
||||
static gint
|
||||
@ -352,8 +371,6 @@ idle_cb (void *data)
|
||||
EShellStartupLineMode startup_line_mode;
|
||||
GSList *p;
|
||||
gboolean have_evolution_uri;
|
||||
gboolean display_default;
|
||||
gboolean displayed_any;
|
||||
|
||||
#ifdef KILL_PROCESS_CMD
|
||||
kill_old_dataserver ();
|
||||
@ -408,6 +425,9 @@ idle_cb (void *data)
|
||||
|
||||
}
|
||||
|
||||
if (shell != NULL)
|
||||
attempt_upgrade (shell);
|
||||
|
||||
have_evolution_uri = FALSE;
|
||||
|
||||
if (uri_list == NULL && shell != NULL)
|
||||
|
Reference in New Issue
Block a user