app-manager/app-manager.c
changeset 99 0121592e2512
parent 38 a29623b68ca2
child 103 c4b0d5cc34bc
     1.1 --- a/app-manager/app-manager.c	Mon Jun 13 12:18:42 2016 +0100
     1.2 +++ b/app-manager/app-manager.c	Thu Jul 16 19:54:45 2020 +0100
     1.3 @@ -215,17 +215,20 @@
     1.4  {
     1.5      GError *err=0;
     1.6      GtkWidget *w;
     1.7 -    gchar *s,*contents;
     1.8 -    gchar *setup_base=NULL,*update_base=NULL;
     1.9 +    gchar *s,*database_uri,*contents;
    1.10 +    gchar *database=NULL,*setup_base=NULL,*update_base=NULL;
    1.11      gsize len;
    1.12 -    PloverPackageSet *set;
    1.13 +    struct comps *comps;
    1.14 +    PloverPackageSet *set=NULL;
    1.15      GSList *objects,*lnk;
    1.16      gboolean started;
    1.17      GOptionEntry options[]={
    1.18 -	{"setup",0,0,G_OPTION_ARG_FILENAME,&setup_base,
    1.19 -	  "Setup from installation media","path"},
    1.20 -	{"update",0,0,G_OPTION_ARG_FILENAME,&update_base,
    1.21 -	  "Update from upgrade media","path"},
    1.22 +	{"database",0,0,G_OPTION_ARG_STRING,&database,
    1.23 +	  "Operate on a distribution-local database","vendor/distribution"},
    1.24 +	{"setup",0,0,G_OPTION_ARG_STRING,&setup_base,
    1.25 +	  "Setup from installation media","uri"},
    1.26 +	{"update",0,0,G_OPTION_ARG_STRING,&update_base,
    1.27 +	  "Update from upgrade media","uri"},
    1.28  	{NULL}
    1.29      };
    1.30  #ifdef WIN32
    1.31 @@ -285,30 +288,52 @@
    1.32  	g_error("%s",err->message);
    1.33  	exit(0);
    1.34      }
    1.35 -    if (prefix)
    1.36 -    {
    1.37 -	relocations=razor_relocations_create();
    1.38 -	razor_relocations_add(relocations,"/usr",prefix);
    1.39 -    }
    1.40      gtk_builder_connect_signals(ui,NULL);
    1.41      gtk_link_button_set_uri_hook(show_uri,NULL,NULL);
    1.42 -    installed=GTK_TREE_MODEL(plover_package_store_new());
    1.43 -    set=plover_package_set_new();
    1.44 -    (void)plover_package_set_open(set,"",TRUE,NULL);
    1.45 -    plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set);
    1.46 -    if (plover_package_set_get_no_details(set))
    1.47 -    {
    1.48 -	w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles"));
    1.49 -	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE);
    1.50 -    }
    1.51 -    applications=plover_applications_model_new(installed);
    1.52 -    set_package_model(applications);
    1.53      if (setup_base)
    1.54 -	started=setup(set,setup_base);
    1.55 +	started=setup(setup_base);
    1.56      else if (update_base)
    1.57 -	started=update(set,update_base);
    1.58 +	started=update(update_base);
    1.59      else
    1.60      {
    1.61 +	if (database)
    1.62 +	{
    1.63 +	    g_free(prefix);
    1.64 +	    prefix=NULL;
    1.65 +	    s=strchr(database,'/');
    1.66 +	    if (*s)
    1.67 +		*s++='\0';
    1.68 +	    comps=plover_comps_new();
    1.69 +	    plover_comps_set_vendor(comps,database);
    1.70 +	    if (s)
    1.71 +	    {
    1.72 +		plover_comps_set_distribution(comps,s);
    1.73 +		*--s='/';
    1.74 +	    }
    1.75 +	    prefix=plover_comps_get_default_prefix(comps);
    1.76 +	    plover_comps_free(comps);
    1.77 +	    s=g_strconcat(prefix,"/var/lib/razor",NULL);
    1.78 +	    database_uri=razor_path_to_uri(s);
    1.79 +	    g_free(s);
    1.80 +	    razor_set_database_uri(database_uri);
    1.81 +	    g_free(database_uri);
    1.82 +	}
    1.83 +	if (prefix)
    1.84 +	{
    1.85 +	    relocations=razor_relocations_create();
    1.86 +	    razor_relocations_add(relocations,"/usr",prefix);
    1.87 +	}
    1.88 +	installed=GTK_TREE_MODEL(plover_package_store_new());
    1.89 +	set=plover_package_set_new();
    1.90 +	(void)plover_package_set_open(set,"",TRUE,NULL);
    1.91 +	plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set);
    1.92 +	if (plover_package_set_get_no_details(set))
    1.93 +	{
    1.94 +	    w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles"));
    1.95 +	    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE);
    1.96 +	}
    1.97 +	applications=plover_applications_model_new(installed);
    1.98 +	set_package_model(applications);
    1.99  	w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow"));
   1.100  	gtk_widget_show(w);
   1.101  	started=TRUE;
   1.102 @@ -332,6 +357,7 @@
   1.103      g_free(prefix);
   1.104      g_free(setup_base);
   1.105      g_free(update_base);
   1.106 +    g_free(database);
   1.107      exit(0);
   1.108  }
   1.109