PXML support for file associations, and spitting out extra .desktop files for them...
[pandora-libraries.git] / include / pnd_pxml.h
index 1cc2df3..d1c8862 100644 (file)
@@ -12,7 +12,10 @@ extern "C" {
 #define PXML_TAGHEAD "<PXML" /* case insensitive; allow for trailing attributes */
 #define PXML_TAGFOOT "</PXML>" /* case insensitive */
 
-#define PXML_MAXAPPS 20 /* max number of <application>'s within a single PXML */
+#define PXML_MAXAPPS 50 /* max number of <application>'s within a single PXML */ /* TODO: make this realloc() and dynamicly grow instead.. */
+
+// for DaveC, we will support same-path-as-.pnd file override, that is simple format and not XML
+#define PXML_SAMEPATH_OVERRIDE_FILEEXT ".ovr" /* ./foo/bar.pnd could have overrides in ./foo/bar.ovr */
 
 // use this handle to interact with PXML; this hides the mechanics of parsing a PXML file so that
 // it can be upgraded with impacting applications
@@ -20,8 +23,8 @@ typedef void* pnd_pxml_handle;
 
 /* pxml_fetch() will return NULL on fail, otherwise a valid handle which may be further queried
  */
-pnd_pxml_handle *pnd_pxml_fetch ( char *fullpath );
-pnd_pxml_handle *pnd_pxml_fetch_buffer ( char *filename, char *buffer );
+pnd_pxml_handle *pnd_pxml_fetch ( char *fullpath );                         // fetch from file
+pnd_pxml_handle *pnd_pxml_fetch_buffer ( char *filename, char *buffer );    // fetch from a buffer
 void pnd_pxml_delete ( pnd_pxml_handle h );
 
 /* overrides() allow for customization of a PXML that persists; ie: An application might be sitting
@@ -40,12 +43,15 @@ signed char pnd_pxml_merge_override ( pnd_pxml_handle h, char *searchpath );
 
 /* these accessor functions will return READ ONLY char*s; do not free them or modify them.
  */
+
+char *pnd_pxml_get_package_id ( pnd_pxml_handle h );
 char *pnd_pxml_get_app_name_en ( pnd_pxml_handle h );
 char *pnd_pxml_get_app_name_de ( pnd_pxml_handle h );
 char *pnd_pxml_get_app_name_it ( pnd_pxml_handle h );
 char *pnd_pxml_get_app_name_fr ( pnd_pxml_handle h );
 char *pnd_pxml_get_app_name ( pnd_pxml_handle h, char *iso_lang );
 char *pnd_pxml_get_unique_id ( pnd_pxml_handle h );
+char *pnd_pxml_get_appdata_dirname ( pnd_pxml_handle h );
 char *pnd_pxml_get_standalone ( pnd_pxml_handle h );
 char *pnd_pxml_get_icon ( pnd_pxml_handle h );
 char *pnd_pxml_get_description_en ( pnd_pxml_handle h );
@@ -76,13 +82,16 @@ char *pnd_pxml_get_osversion_release ( pnd_pxml_handle h );
 char *pnd_pxml_get_osversion_build ( pnd_pxml_handle h );
 char *pnd_pxml_get_associationitem1_name ( pnd_pxml_handle h );
 char *pnd_pxml_get_associationitem1_filetype ( pnd_pxml_handle h );
-char *pnd_pxml_get_associationitem1_parameter ( pnd_pxml_handle h );
+char *pnd_pxml_get_associationitem1_command ( pnd_pxml_handle h );
+char *pnd_pxml_get_associationitem1_args ( pnd_pxml_handle h );
 char *pnd_pxml_get_associationitem2_name ( pnd_pxml_handle h );
 char *pnd_pxml_get_associationitem2_filetype ( pnd_pxml_handle h );
-char *pnd_pxml_get_associationitem2_parameter ( pnd_pxml_handle h );
+char *pnd_pxml_get_associationitem2_command ( pnd_pxml_handle h );
+char *pnd_pxml_get_associationitem2_args ( pnd_pxml_handle h );
 char *pnd_pxml_get_associationitem3_name ( pnd_pxml_handle h );
 char *pnd_pxml_get_associationitem3_filetype ( pnd_pxml_handle h );
-char *pnd_pxml_get_associationitem3_parameter ( pnd_pxml_handle h );
+char *pnd_pxml_get_associationitem3_command ( pnd_pxml_handle h );
+char *pnd_pxml_get_associationitem3_args ( pnd_pxml_handle h );
 char *pnd_pxml_get_clockspeed ( pnd_pxml_handle h );
 char *pnd_pxml_get_background ( pnd_pxml_handle h );
 char *pnd_pxml_get_startdir ( pnd_pxml_handle h );
@@ -90,6 +99,10 @@ char *pnd_pxml_get_mkdir ( pnd_pxml_handle h );
 char *pnd_pxml_get_info_name ( pnd_pxml_handle h );
 char *pnd_pxml_get_info_type ( pnd_pxml_handle h );
 char *pnd_pxml_get_info_src ( pnd_pxml_handle h );
+char *pnd_pxml_get_package_version_major ( pnd_pxml_handle h );
+char *pnd_pxml_get_package_version_minor ( pnd_pxml_handle h );
+char *pnd_pxml_get_package_version_release ( pnd_pxml_handle h );
+char *pnd_pxml_get_package_version_build ( pnd_pxml_handle h );
 
 // for 'set' functions, pass NULL value to delete existing value without setting new one
 void pnd_pxml_set_app_name ( pnd_pxml_handle h, char *v );
@@ -119,6 +132,7 @@ typedef struct
        int titles_c;
        int titles_alloc_c;
        char *unique_id;
+        char *appdata_dirname;       // preferred dir name for appdata; if missing, use unique-id
        char *standalone;
        char *icon;
        pnd_localized_string_t *descriptions;
@@ -146,17 +160,18 @@ typedef struct
        char *osversion_build;
        char *associationitem1_name;
        char *associationitem1_filetype;
-       char *associationitem1_parameter;
+       char *associationitem1_command;
        char *associationitem2_name;
        char *associationitem2_filetype;
-       char *associationitem2_parameter;
+       char *associationitem2_command;
        char *associationitem3_name;
        char *associationitem3_filetype;
-       char *associationitem3_parameter;
+       char *associationitem3_command;
        char *clockspeed;
        char *background;
        char *startdir;
        char *exec_no_x11;
+       char *package_id;
        char *package_name;
        char *package_release_date;
         char *mkdir_sp; // a colon separated list of paths to be mkdir'd (silently fail) when pnd is autodiscovered. path is always relative to the root of the hosting device.
@@ -164,6 +179,13 @@ typedef struct
         char *info_name;      // should be a struct..
         char *info_filename;
         char *info_type;
+        char *package_version_major;
+        char *package_version_minor;
+        char *package_version_release;
+        char *package_version_build;
+        char *associationitem1_args; // wish it could be above, but that would break existing ABI
+        char *associationitem2_args; // wish it could be above, but that would break existing ABI
+        char *associationitem3_args; // wish it could be above, but that would break existing ABI
 
 }  pnd_pxml_t;