1.1 --- a/app-manager/app-manager.c Mon Aug 31 07:07:40 2020 +0100
1.2 +++ b/app-manager/app-manager.c Tue Jun 29 10:08:33 2021 +0100
1.3 @@ -211,10 +211,42 @@
1.4 gtk_window_set_default_icon_name(LOGO_NAME);
1.5 }
1.6
1.7 +static gboolean uri_validate(const char *uri)
1.8 +{
1.9 + char *s;
1.10 + s=razor_path_relative_to_uri(uri,".",NULL);
1.11 + free(s);
1.12 + return !!s;
1.13 +}
1.14 +
1.15 +char *uri_from_base(const char *base,gboolean use_paths)
1.16 +{
1.17 + char *retval;
1.18 + if (use_paths)
1.19 + {
1.20 + retval=razor_path_to_uri(base);
1.21 + if (!retval)
1.22 + {
1.23 + g_printerr("%s: Not a valid path\n",base);
1.24 + exit(1);
1.25 + }
1.26 + }
1.27 + else if (!uri_validate(base))
1.28 + {
1.29 + g_printerr("%s: Not a valid URI\n",base);
1.30 + exit(1);
1.31 + }
1.32 + else
1.33 + retval=strdup(base);
1.34 + return retval;
1.35 +}
1.36 +
1.37 int main(int argc,char **argv)
1.38 {
1.39 + gboolean use_paths=FALSE;
1.40 GError *err=0;
1.41 GtkWidget *w;
1.42 + char *uri;
1.43 gchar *s,*database_uri,*contents;
1.44 gchar *database=NULL,*setup_base=NULL,*update_base=NULL;
1.45 gchar *default_action_base=NULL;
1.46 @@ -226,12 +258,14 @@
1.47 GOptionEntry options[]={
1.48 {"database",0,0,G_OPTION_ARG_STRING,&database,
1.49 "Operate on a distribution-local database","vendor/distribution"},
1.50 + {"paths",0,0,G_OPTION_ARG_NONE,&use_paths,
1.51 + "Interpret locations as paths rather than URIs",NULL},
1.52 {"setup",0,0,G_OPTION_ARG_STRING,&setup_base,
1.53 - "Setup from installation media","uri"},
1.54 + "Setup from installation media","location"},
1.55 {"update",0,0,G_OPTION_ARG_STRING,&update_base,
1.56 - "Update from upgrade media","uri"},
1.57 + "Update from upgrade media","location"},
1.58 {"default-action",0,0,G_OPTION_ARG_STRING,&default_action_base,
1.59 - "Install, remove or update from repository","uri"},
1.60 + "Install, remove or update from repository","location"},
1.61 {NULL}
1.62 };
1.63 #ifdef WIN32
1.64 @@ -295,11 +329,23 @@
1.65 gtk_builder_connect_signals(ui,NULL);
1.66 gtk_link_button_set_uri_hook(show_uri,NULL,NULL);
1.67 if (setup_base)
1.68 - started=setup(setup_base);
1.69 + {
1.70 + uri=uri_from_base(setup_base,use_paths);
1.71 + started=setup(uri);
1.72 + free(uri);
1.73 + }
1.74 else if (update_base)
1.75 - started=update(update_base);
1.76 + {
1.77 + uri=uri_from_base(update_base,use_paths);
1.78 + started=update(uri);
1.79 + free(uri);
1.80 + }
1.81 else if (default_action_base)
1.82 - started=default_action(default_action_base);
1.83 + {
1.84 + uri=uri_from_base(default_action_base,use_paths);
1.85 + started=default_action(uri);
1.86 + free(uri);
1.87 + }
1.88 else
1.89 {
1.90 if (database)