* overridespath may be NULL if you do not wish to search for pxml overrides
*/
pnd_box_handle pnd_disco_search ( char *searchpath, char *overridespath );
+pnd_box_handle pnd_disco_file ( char *path, char *filename ); // should you wish to 'discover' one .pnd-file
/* pnd_disco_t describes a given entry found by the discovery code; ie: the containers key is the path to
* the PXML file (since this is relatively unique), with the fields below detailing the executable path,
* confusion.. it is not displayed. So no big deal.
*/
+typedef enum {
+ pnd_object_type_unknown = 0,
+ pnd_object_type_directory,
+ pnd_object_type_pnd,
+ pnd_object_type_max
+} pnd_object_type_t;
+
// another struct? Have always intended discovery_t to have minimal members.. just enough to lead to an
// application (PXML, xecutable, name); if the apps want more details, they can use the pnd_pxml code to
// fetch the full PXML and get all the details. But I think we got out of control here :)
-typedef struct
-{
- char *title_en;
- char *title_de;
- char *title_it;
- char *title_fr;
- char *unique_id;
- char *standalone;
- char *icon;
- char *description_en;
- char *description_de;
- char *description_it;
- char *description_fr;
- char *previewpic1;
- char *previewpic2;
- char *author_name;
- char *author_website;
- char *version_major;
- char *version_minor;
- char *version_release;
- char *version_build;
- char *exec;
- char *main_category;
- char *subcategory1;
- char *subcategory2;
- char *altcategory;
- char *altsubcategory1;
- char *altsubcategory2;
- char *osversion_major;
- char *osversion_minor;
- char *osversion_release;
- char *osversion_build;
- char *associationitem1_name;
- char *associationitem1_filetype;
- char *associationitem1_parameter;
- char *associationitem2_name;
- char *associationitem2_filetype;
- char *associationitem2_parameter;
- char *associationitem3_name;
- char *associationitem3_filetype;
- char *associationitem3_parameter;
- char *clockspeed;
- char *background;
- char *startdir;
+// NOTE: We really need to rework disco-t so it can include non-english titles/desc; perhaps more info as optional,
+// or a name/value pairing system so it can have extra data in it, without a complex structure.
+#define PND_DISCO_FLAG_OVR 1 // An ovr file was found for this app (not per subapp, just per .pnd)
+#define PND_DISCO_GENERATED 2 // This disco is 'faux', made up and not reflecting a real 'pnd file'
+#define PND_DISCO_LIBPND_DD 4 // This disco is from libpnd .desktop parsing
+#define PND_DISCO_CUSTOM1 (1<<30) // An app may make use of this bitflag safely
+#define PND_DISCO_CUSTOM2 (1<<31) // An app may make use of this bitflag safely
+typedef struct {
+ // base
+ unsigned char object_type; // see enum above
+ char *object_path; // directory containing pnd or PXML.xml (does not include filename)
+ char *object_filename; // filename within object_path of the app: the PXML.xml or awesomeapp.pnd file itself
+ unsigned int pnd_icon_pos; // offset to the byte after end of PXML in a pnd file (should be icon if present)
+ 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;
+ char *appdata_dirname; // preferred dir name for appdata; if missing, use unique-id
+ char *icon;
+ char *exec;
+ char *execargs;
+ char *clockspeed;
+ char *startdir;
+ char *option_no_x11;
+ char *main_category;
+ char *main_category1;
+ char *main_category2;
+ char *alt_category;
+ char *alt_category1;
+ char *alt_category2;
+ char *preview_pic1;
+ char *preview_pic2;
+ char *mkdir_sp;
+ char *info_name; // should be a struct..
+ char *info_filename;
+ char *info_type;
+ char *version_major;
+ char *version_minor;
+ char *version_release;
+ char *version_build;
+ char *package_version_major;
+ char *package_version_minor;
+ char *package_version_release;
+ char *package_version_build;
+ // why are we not using typedef'd arrays here? :/ in the name of consistency with
+ // existing above, lets just copy from pxml and use a list of [123] members..
+ char *associationitem1_name;
+ char *associationitem1_filetype;
+ char *exec_dashdash_args;
} pnd_disco_t;
void pnd_disco_destroy ( pnd_disco_t *p ); // a function name that simply could not be avoided
-// emit_dotdesktop() will determine a filename and create a FILENAME.desktop file in the targetpath
-// TODO: Copy the icon into this directory as well, if its source is a .pnd or info is in the dico struct
-unsigned char pnd_emit_dotdesktop ( char *targetpath, pnd_disco_t *p );
-
// TODO: A way to release the disco-lists and reclaim RAM :)
-// TODO: A way to determine the list of excess .desktop files and remove them (ie: after poo.pnd is removed, ditch the .desktop)
#ifdef __cplusplus
} /* "C" */