Patch from Cloudef to add very basic support for 'package' PXML tags
[pandora-libraries.git] / include / pnd_discovery.h
index 19de2dc..237ef62 100644 (file)
@@ -16,6 +16,7 @@ extern "C" {
  * 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,
@@ -31,28 +32,58 @@ pnd_box_handle pnd_disco_search ( char *searchpath, char *overridespath );
  * 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 :)
+// 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_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
-  char *path_to_object; // full path to the PXML.xml or awesomeapp.pnd file
-  // strdup'd from PXML
+  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 *main_category;
+  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;
 } 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 :)
 
 #ifdef __cplusplus