Extend the API
With this, the DeforaOS Panel is closer to complete functionality without relying on additional code handling desktop entries.
This commit is contained in:
parent
a5f12e50f9
commit
08792869b4
|
@ -51,20 +51,28 @@ typedef enum _MimeHandlerType
|
|||
/* functions */
|
||||
MimeHandler * mimehandler_new(void);
|
||||
MimeHandler * mimehandler_new_load(String const * name);
|
||||
MimeHandler * mimehandler_new_open(String const * filename);
|
||||
void mimehandler_delete(MimeHandler * handler);
|
||||
|
||||
/* accessors */
|
||||
int mimehandler_can_display(MimeHandler * handler);
|
||||
int mimehandler_can_execute(MimeHandler * handler);
|
||||
int mimehandler_can_open(MimeHandler * handler);
|
||||
|
||||
String const * mimehandler_get_comment(MimeHandler * handler);
|
||||
String const * mimehandler_get_generic_name(MimeHandler * handler);
|
||||
String const * mimehandler_get_icon(MimeHandler * handler);
|
||||
String const * mimehandler_get_name(MimeHandler * handler);
|
||||
String const * mimehandler_get_path(MimeHandler * handler);
|
||||
String const * mimehandler_get_program(MimeHandler * handler);
|
||||
MimeHandlerType mimehandler_get_type(MimeHandler * handler);
|
||||
String ** mimehandler_get_types(MimeHandler * handler);
|
||||
String const * mimehandler_get_url(MimeHandler * handler);
|
||||
|
||||
int mimehandler_is_hidden(MimeHandler * handler);
|
||||
|
||||
/* useful */
|
||||
int mimehandler_load(MimeHandler * handler, String const * filename);
|
||||
int mimehandler_load_by_name(MimeHandler * handler, String const * name);
|
||||
int mimehandler_save(MimeHandler * handler);
|
||||
|
||||
|
|
|
@ -72,6 +72,22 @@ MimeHandler * mimehandler_new_load(String const * name)
|
|||
}
|
||||
|
||||
|
||||
/* mimehandler_new_open */
|
||||
MimeHandler * mimehandler_new_open(String const * filename)
|
||||
{
|
||||
MimeHandler * handler;
|
||||
|
||||
if((handler = mimehandler_new()) == NULL)
|
||||
return NULL;
|
||||
if(mimehandler_load(handler, filename) != 0)
|
||||
{
|
||||
mimehandler_delete(handler);
|
||||
return NULL;
|
||||
}
|
||||
return handler;
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_delete */
|
||||
void mimehandler_delete(MimeHandler * handler)
|
||||
{
|
||||
|
@ -102,9 +118,10 @@ int mimehandler_can_execute(MimeHandler * handler)
|
|||
|
||||
if(mimehandler_get_type(handler) != MIME_HANDLER_TYPE_APPLICATION)
|
||||
return 0;
|
||||
if((p = config_get(handler, SECTION, "TryExec")) == NULL)
|
||||
return 1;
|
||||
return _can_execute_access(p, X_OK);
|
||||
if((p = config_get(handler, SECTION, "TryExec")) != NULL
|
||||
&& _can_execute_access(p, X_OK) == 0)
|
||||
return 0;
|
||||
return (config_get(handler, SECTION, "Exec") != NULL) ? 1 : 0;
|
||||
}
|
||||
|
||||
static int _can_execute_access(String const * path, int mode)
|
||||
|
@ -141,6 +158,47 @@ static int _can_execute_access_path(String const * path,
|
|||
}
|
||||
|
||||
|
||||
/* mimehandler_can_open */
|
||||
int mimehandler_can_open(MimeHandler * handler)
|
||||
{
|
||||
switch(mimehandler_get_type(handler))
|
||||
{
|
||||
case MIME_HANDLER_TYPE_APPLICATION:
|
||||
return mimehandler_can_execute(handler);
|
||||
case MIME_HANDLER_TYPE_DIRECTORY:
|
||||
/* let errors be handled by the API user */
|
||||
return 1;
|
||||
case MIME_HANDLER_TYPE_URL:
|
||||
/* FIXME implement */
|
||||
return 0;
|
||||
case MIME_HANDLER_TYPE_UNKNOWN:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_get_comment */
|
||||
String const * mimehandler_get_comment(MimeHandler * handler)
|
||||
{
|
||||
return config_get(handler, SECTION, "Comment");
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_get_generic_name */
|
||||
String const * mimehandler_get_generic_name(MimeHandler * handler)
|
||||
{
|
||||
return config_get(handler, SECTION, "GenericName");
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_get_icon */
|
||||
String const * mimehandler_get_icon(MimeHandler * handler)
|
||||
{
|
||||
return config_get(handler, SECTION, "Icon");
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_get_name */
|
||||
String const * mimehandler_get_name(MimeHandler * handler)
|
||||
{
|
||||
|
@ -148,6 +206,20 @@ String const * mimehandler_get_name(MimeHandler * handler)
|
|||
}
|
||||
|
||||
|
||||
/* mimehandler_get_path */
|
||||
String const * mimehandler_get_path(MimeHandler * handler)
|
||||
{
|
||||
switch(mimehandler_get_type(handler))
|
||||
{
|
||||
case MIME_HANDLER_TYPE_APPLICATION:
|
||||
case MIME_HANDLER_TYPE_DIRECTORY:
|
||||
return config_get(handler, SECTION, "Path");
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_get_program */
|
||||
String const * mimehandler_get_program(MimeHandler * handler)
|
||||
{
|
||||
|
@ -235,6 +307,15 @@ String ** mimehandler_get_types(MimeHandler * handler)
|
|||
}
|
||||
|
||||
|
||||
/* mimehandler_get_url */
|
||||
String const * mimehandler_get_url(MimeHandler * handler)
|
||||
{
|
||||
if(mimehandler_get_type(handler) == MIME_HANDLER_TYPE_URL)
|
||||
return config_get(handler, SECTION, "URL");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_is_hidden */
|
||||
int mimehandler_is_hidden(MimeHandler * handler)
|
||||
{
|
||||
|
@ -247,6 +328,19 @@ int mimehandler_is_hidden(MimeHandler * handler)
|
|||
|
||||
|
||||
/* useful */
|
||||
/* mimehandler_load */
|
||||
int mimehandler_load(MimeHandler * handler, String const * filename)
|
||||
{
|
||||
return (config_reset(handler) == 0
|
||||
&& config_load(handler, filename) == 0
|
||||
&& mimehandler_get_type(handler)
|
||||
!= MIME_HANDLER_TYPE_UNKNOWN
|
||||
&& mimehandler_get_name(handler) != NULL
|
||||
&& mimehandler_is_hidden(handler) == 0)
|
||||
? 0 : -1;
|
||||
}
|
||||
|
||||
|
||||
/* mimehandler_load_by_name */
|
||||
static int _load_by_name_path(MimeHandler * handler, String const * name,
|
||||
String const * path);
|
||||
|
@ -292,18 +386,12 @@ static int _load_by_name_path(MimeHandler * handler, String const * name,
|
|||
{
|
||||
int ret;
|
||||
String const applications[] = "/applications/";
|
||||
String * pathname;
|
||||
String * filename;
|
||||
|
||||
if((pathname = string_new_append(path, applications, name, EXTENSION,
|
||||
if((filename = string_new_append(path, applications, name, EXTENSION,
|
||||
NULL)) == NULL)
|
||||
return -1;
|
||||
ret = (config_reset(handler) == 0
|
||||
&& config_load(handler, pathname) == 0
|
||||
&& mimehandler_get_type(handler)
|
||||
!= MIME_HANDLER_TYPE_UNKNOWN
|
||||
&& mimehandler_get_name(handler) != NULL
|
||||
&& mimehandler_is_hidden(handler) == 0)
|
||||
? 0 : -1;
|
||||
string_delete(pathname);
|
||||
ret = mimehandler_load(handler, filename);
|
||||
string_delete(filename);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -62,7 +62,8 @@ int main(void)
|
|||
return 6;
|
||||
}
|
||||
mimehandler_delete(handler);
|
||||
if((handler = mimehandler_new_load("Widget")) == NULL)
|
||||
if((handler = mimehandler_new_open("applications/Widget.desktop"))
|
||||
== NULL)
|
||||
return 7;
|
||||
if((types = mimehandler_get_types(handler)) == NULL
|
||||
|| types[0] != NULL)
|
||||
|
|
Loading…
Reference in New Issue
Block a user