app-manager/update.c
author J. Ali Harlow <ali@juiblex.co.uk>
Tue Apr 25 17:41:00 2023 +0100 (2023-04-25)
changeset 109 2947214c450e
parent 98 71127797ca73
permissions -rw-r--r--
Partial fix for #5537
     1 /*
     2  * Copyright (C) 2014, 2016  J. Ali Harlow <ali@juiblex.co.uk>
     3  *
     4  * This program is free software; you can redistribute it and/or modify
     5  * it under the terms of the GNU General Public License as published by
     6  * the Free Software Foundation; either version 2 of the License, or
     7  * (at your option) any later version.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License along
    15  * with this program; if not, write to the Free Software Foundation, Inc.,
    16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    17  */
    18 
    19 #include "config.h"
    20 #include <stdlib.h>
    21 #include <string.h>
    22 #include <errno.h>
    23 #include <glib.h>
    24 #include <gio/gio.h>
    25 #include <gtk/gtk.h>
    26 #include <plover/plover.h>
    27 #include <plover/transaction.h>
    28 #include <plover/packageset.h>
    29 #include <plover-gtk/transactionhelper.h>
    30 #include "app-manager.h"
    31 
    32 
    33 gboolean update(const char *base)
    34 {
    35     gchar *s;
    36     const char *prefix;
    37     GError *error=NULL;
    38     static PloverTransactionHelper *helper=NULL;
    39     if (!helper)
    40     {
    41 	helper=plover_transaction_helper_new(ui);
    42 	plover_transaction_helper_set_base_uri(helper,base);
    43 	prefix=plover_transaction_helper_get_prefix(helper,&error);
    44 	if (error)
    45 	    g_clear_error(&error);
    46 	else
    47 	{
    48 	    s=g_strconcat(prefix?prefix:"","/var/log/update",NULL);
    49 	    plover_log_open(s);
    50 	    g_free(s);
    51 	}
    52 	plover_transaction_helper_set_check_vendor(helper,TRUE);
    53 	g_signal_connect(helper,"close",G_CALLBACK(gtk_main_quit),NULL);
    54     }
    55     if (!plover_transaction_helper_get_visible(helper))
    56     {
    57 	if (!plover_transaction_helper_update(helper,&error))
    58 	{
    59 	    if (g_error_matches(error,PLOVER_GENERAL_ERROR,
    60 	      PLOVER_GENERAL_ERROR_NO_WORK))
    61 	    {
    62 		g_error_free(error);
    63 		error=g_error_new_literal(PLOVER_GENERAL_ERROR,
    64 		  PLOVER_GENERAL_ERROR_NO_WORK,
    65 		  "All relevant updates already applied");
    66 		plover_transaction_helper_set_error(helper,error,
    67 		  "Software update");
    68 	    }
    69 	    else if (g_error_matches(error,PLOVER_GENERAL_ERROR,
    70 	      PLOVER_GENERAL_ERROR_REQUIREMENTS_NOT_MET))
    71 	    {
    72 		g_error_free(error);
    73 		error=g_error_new_literal(PLOVER_GENERAL_ERROR,
    74 		  PLOVER_GENERAL_ERROR_REQUIREMENTS_NOT_MET,
    75 		  "Updates cannot be applied because some earlier updates are "
    76 		  "missing. Installing updates in sequence should resolve this "
    77 		  "problem");
    78 		plover_transaction_helper_set_error(helper,error,
    79 		  "Software update failed");
    80 	    }
    81 	    else
    82 		plover_transaction_helper_set_error(helper,error,
    83 		  "Software update failed");
    84 	    g_error_free(error);
    85 	}
    86     }
    87     plover_transaction_helper_present(helper);
    88     return TRUE;
    89 }