Also implement opening URLs and directories
This commit is contained in:
parent
e101d4d002
commit
4380c1a796
|
@ -38,6 +38,9 @@
|
||||||
#ifndef PREFIX
|
#ifndef PREFIX
|
||||||
# define PREFIX "/usr/local"
|
# define PREFIX "/usr/local"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef BINDIR
|
||||||
|
# define BINDIR PREFIX "/bin"
|
||||||
|
#endif
|
||||||
#ifndef DATADIR
|
#ifndef DATADIR
|
||||||
# define DATADIR PREFIX "/share"
|
# define DATADIR PREFIX "/share"
|
||||||
#endif
|
#endif
|
||||||
|
@ -201,8 +204,7 @@ int mimehandler_can_open(MimeHandler * handler)
|
||||||
/* let errors be handled by the API user */
|
/* let errors be handled by the API user */
|
||||||
return 1;
|
return 1;
|
||||||
case MIMEHANDLER_TYPE_URL:
|
case MIMEHANDLER_TYPE_URL:
|
||||||
/* FIXME implement */
|
return 1;
|
||||||
return 0;
|
|
||||||
case MIMEHANDLER_TYPE_UNKNOWN:
|
case MIMEHANDLER_TYPE_UNKNOWN:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -504,9 +506,29 @@ static int _load_by_name_path(MimeHandler * handler, String const * name,
|
||||||
|
|
||||||
|
|
||||||
/* mimehandler_open */
|
/* mimehandler_open */
|
||||||
|
static int _open_application(MimeHandler * handler, String const * filename);
|
||||||
|
static int _open_directory(MimeHandler * handler, String const * filename);
|
||||||
|
static int _open_url(MimeHandler * handler, String const * filename);
|
||||||
|
|
||||||
int mimehandler_open(MimeHandler * handler, String const * filename)
|
int mimehandler_open(MimeHandler * handler, String const * filename)
|
||||||
{
|
{
|
||||||
/* FIXME implement filename */
|
switch(mimehandler_get_type(handler))
|
||||||
|
{
|
||||||
|
case MIMEHANDLER_TYPE_APPLICATION:
|
||||||
|
return _open_application(handler, filename);
|
||||||
|
case MIMEHANDLER_TYPE_DIRECTORY:
|
||||||
|
return _open_directory(handler, filename);
|
||||||
|
case MIMEHANDLER_TYPE_URL:
|
||||||
|
return _open_url(handler, filename);
|
||||||
|
case MIMEHANDLER_TYPE_UNKNOWN:
|
||||||
|
/* XXX report error */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return error_set_code(-ENOSYS, "%s", strerror(ENOSYS));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _open_application(MimeHandler * handler, String const * filename)
|
||||||
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
String * program;
|
String * program;
|
||||||
String * p;
|
String * p;
|
||||||
|
@ -514,6 +536,7 @@ int mimehandler_open(MimeHandler * handler, String const * filename)
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
GError * error = NULL;
|
GError * error = NULL;
|
||||||
|
|
||||||
|
/* FIXME implement filename */
|
||||||
if((q = config_get(handler->config, SECTION, "Exec")) == NULL)
|
if((q = config_get(handler->config, SECTION, "Exec")) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if((program = string_new(q)) == NULL)
|
if((program = string_new(q)) == NULL)
|
||||||
|
@ -555,6 +578,59 @@ int mimehandler_open(MimeHandler * handler, String const * filename)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _open_directory(MimeHandler * handler, String const * filename)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
String const * directory;
|
||||||
|
/* XXX open with the default file manager instead */
|
||||||
|
char * argv[] = { "browser", "--", NULL, NULL };
|
||||||
|
const unsigned int flags = G_SPAWN_SEARCH_PATH;
|
||||||
|
GError * error = NULL;
|
||||||
|
|
||||||
|
if(filename != NULL)
|
||||||
|
return error_set_code(-EINVAL, "%s", strerror(EINVAL));
|
||||||
|
/* XXX this may not be the correct key */
|
||||||
|
if((directory = mimehandler_get_path(handler)) == NULL)
|
||||||
|
/* XXX report an error? */
|
||||||
|
return 0;
|
||||||
|
if((argv[2] = string_new(directory)) == NULL)
|
||||||
|
return -1;
|
||||||
|
else if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
|
||||||
|
!= TRUE)
|
||||||
|
{
|
||||||
|
ret = -error_set_code(1, "%s: %s", directory, error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
}
|
||||||
|
string_delete(argv[2]);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _open_url(MimeHandler * handler, String const * filename)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
String const * url;
|
||||||
|
/* XXX open with the default web browser instead */
|
||||||
|
char * argv[] = { BINDIR "/htmlapp", "--", NULL, NULL };
|
||||||
|
unsigned int flags = 0;
|
||||||
|
GError * error = NULL;
|
||||||
|
|
||||||
|
if(filename != NULL)
|
||||||
|
return error_set_code(-EINVAL, "%s", strerror(EINVAL));
|
||||||
|
if((url = mimehandler_get_url(handler)) == NULL)
|
||||||
|
/* XXX report an error? */
|
||||||
|
return 0;
|
||||||
|
if((argv[2] = string_new(url)) == NULL)
|
||||||
|
return -1;
|
||||||
|
else if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
|
||||||
|
!= TRUE)
|
||||||
|
{
|
||||||
|
ret = -error_set_code(1, "%s: %s", url, error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
}
|
||||||
|
string_delete(argv[2]);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* private */
|
/* private */
|
||||||
/* mimehandler_cache_invalidate */
|
/* mimehandler_cache_invalidate */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user