app-manager/app-manager.c
changeset 108 b3d8e196dac8
parent 103 c4b0d5cc34bc
child 109 2947214c450e
     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:09:34 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)