unsigned char subapp_number; // # of app within PXML (ie: 0, 1, 2, 3, up to the number of apps within the PXML)
unsigned int object_flags; // see PND_DISCO_ bitmasks above
// strdup'd from PXML -- hey, who was the idiot who thought it was a reat idea not to just re-use the pxml-struct?
+ char *package_id;
char *title_en;
char *desc_en;
char *unique_id;
/* 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 *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.
#define PND_PXML_ENAME_CLOCK "clockspeed"
#define PND_PXML_ATTRNAME_CLOCKFREQ "frequency"
-/* <package name="foo" released="1/1/0001"/> */
+/* <package id="foo-package" name="foo" released="1/1/0001"/> */
#define PND_PXML_ENAME_PACKAGE "package"
+#define PND_PXML_ATTRNAME_PACKAGE_ID "id"
#define PND_PXML_ATTRNAME_PACKAGE_NAME "name"
#define PND_PXML_ATTRNAME_PACKAGE_DATE "released"
static char *disco_overrides = NULL;
void pnd_disco_destroy ( pnd_disco_t *p ) {
-
+ if ( p -> package_id ) { free ( p -> package_id); }
if ( p -> title_en ) { free ( p -> title_en ); }
if ( p -> unique_id ) { free ( p -> unique_id ); }
if ( p -> appdata_dirname ) { free ( p -> appdata_dirname ); }
p -> object_type = valid;
// PXML fields
+ if ( pnd_pxml_get_package_id ( pxmlh ) ) {
+ p -> package_id = strdup ( pnd_pxml_get_package_id ( pxmlh ) );
+ }
if ( pnd_pxml_get_app_name_en ( pxmlh ) ) {
p -> title_en = strdup ( pnd_pxml_get_app_name_en ( pxmlh ) );
}
return ( NULL );
}
+char *pnd_pxml_get_package_id ( pnd_pxml_handle h ) {
+ pnd_pxml_t *p = (pnd_pxml_t*) h;
+ return ( p -> package_id );
+}
+
char *pnd_pxml_get_app_name ( pnd_pxml_handle h, char *iso_lang ) {
pnd_pxml_t *p = (pnd_pxml_t *) h;
return pnd_pxml_get_best_localized_string(p->titles, p->titles_c, iso_lang);
char *pnd_pxml_get_app_name_fr ( pnd_pxml_handle h ) {
return pnd_pxml_get_app_name(h, "fr");
}
-
char *pnd_pxml_get_unique_id ( pnd_pxml_handle h ) {
pnd_pxml_t *p = (pnd_pxml_t*) h;
return ( p -> unique_id );
// is present in PXML line or not; if not, assume application mode?
hRoot = TiXmlHandle(pElem);
+ // workaround for package ID's used by some package managers
+ // get the package ID and store it for each application
+ char* package_id = NULL;
+ pElem = hRoot.FirstChild ( PND_PXML_ENAME_PACKAGE ).Element();
+ if ( pElem ) {
+ package_id = pnd_pxml_get_attribute ( pElem, PND_PXML_ATTRNAME_PACKAGE_ID );
+ }
+
+ // move to applications element then
if ( hRoot.FirstChild(PND_PXML_APP).Element() != NULL ) {
appwrappermode = 1;
appElem = hRoot.FirstChild(PND_PXML_APP).Element();
} else {
app -> subapp_number = 0;
}
+
+ // give application the package id, if there is one
+ app -> package_id = package_id;
//Get unique ID first.
if ( appwrappermode ) {