Also allow executables for generic types
This commit is contained in:
parent
5203dd4d43
commit
05ef48e935
40
src/mime.c
40
src/mime.c
|
@ -226,6 +226,9 @@ void mime_delete(Mime * mime)
|
||||||
|
|
||||||
/* accessors */
|
/* accessors */
|
||||||
/* mime_get_handler */
|
/* mime_get_handler */
|
||||||
|
static MimeHandler * _get_handler_executable(char const * type,
|
||||||
|
char const * program);
|
||||||
|
|
||||||
MimeHandler * mime_get_handler(Mime * mime, char const * type,
|
MimeHandler * mime_get_handler(Mime * mime, char const * type,
|
||||||
char const * action)
|
char const * action)
|
||||||
{
|
{
|
||||||
|
@ -244,21 +247,9 @@ MimeHandler * mime_get_handler(Mime * mime, char const * type,
|
||||||
}
|
}
|
||||||
if((program = config_get(mime->config, type, action)) != NULL)
|
if((program = config_get(mime->config, type, action)) != NULL)
|
||||||
{
|
{
|
||||||
if(program[0] == '/' && (handler = mimehandler_new()) != NULL)
|
if(program[0] == '/')
|
||||||
{
|
|
||||||
/* open with a specific executable */
|
/* open with a specific executable */
|
||||||
if(mimehandler_set(handler, "Type", "Application") != 0
|
return _get_handler_executable(type, program);
|
||||||
|| mimehandler_set(handler, "Name",
|
|
||||||
program) != 0
|
|
||||||
|| mimehandler_set(handler, "Exec",
|
|
||||||
program) != 0)
|
|
||||||
{
|
|
||||||
mimehandler_delete(handler);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return handler;
|
|
||||||
}
|
|
||||||
if((handler = mimehandler_new_load_by_name(program)) != NULL)
|
if((handler = mimehandler_new_load_by_name(program)) != NULL)
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
|
@ -274,9 +265,30 @@ MimeHandler * mime_get_handler(Mime * mime, char const * type,
|
||||||
string_delete(p);
|
string_delete(p);
|
||||||
if(program == NULL)
|
if(program == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
if(program[0] == '/')
|
||||||
|
/* open with a specific executable */
|
||||||
|
return _get_handler_executable(type, program);
|
||||||
return mimehandler_new_load_by_name(program);
|
return mimehandler_new_load_by_name(program);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MimeHandler * _get_handler_executable(char const * type,
|
||||||
|
char const * program)
|
||||||
|
{
|
||||||
|
MimeHandler * handler;
|
||||||
|
|
||||||
|
if((handler = mimehandler_new()) == NULL)
|
||||||
|
return NULL;
|
||||||
|
if(mimehandler_set(handler, "Type", "Application") != 0
|
||||||
|
|| mimehandler_set(handler, "Name", program) != 0
|
||||||
|
|| mimehandler_set(handler, "MimeType", type) != 0
|
||||||
|
|| mimehandler_set(handler, "Exec", program) != 0)
|
||||||
|
{
|
||||||
|
mimehandler_delete(handler);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* mime_set_handler */
|
/* mime_set_handler */
|
||||||
int mime_set_handler(Mime * mime, char const * type, char const * action,
|
int mime_set_handler(Mime * mime, char const * type, char const * action,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user