X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=apps%2Fpndnotifyd.c;h=346ab25405152e4f6f51f75e10173aa563da26cb;hb=69e4615440db2d9d4fe16371bf279cfca72ffa35;hp=134bcc5383d5da9758d184406bea84505dd0a297;hpb=1fa4974a53ee64ab97ca2dfcb5ecc177750ec1e0;p=pandora-libraries.git diff --git a/apps/pndnotifyd.c b/apps/pndnotifyd.c index 134bcc5..346ab25 100644 --- a/apps/pndnotifyd.c +++ b/apps/pndnotifyd.c @@ -28,6 +28,7 @@ #include "pnd_desktop.h" #include "pnd_logger.h" #include "pnd_dbusnotify.h" +#include "pnd_pndfiles.h" // this piece of code was simpler once; but need to grow it a bit and in a rush // moving all these to globals rather than refactor the code a bit; tsk tsk.. @@ -57,6 +58,7 @@ char *desktop_appspath = NULL; char *menu_dotdesktoppath = NULL; char *menu_iconpath = NULL; char *menu_appspath = NULL; +char *info_dotdesktoppath = NULL; // pnd runscript char *run_searchpath; // searchpath to find pnd_run.sh char *run_script; // name of pnd_run.sh script from config @@ -67,6 +69,7 @@ char g_username [ 128 ]; // since we have to wait for login (!!), store username // notifier handle pnd_notify_handle nh = 0; pnd_dbusnotify_handle dbh = 0; +unsigned char g_info_p = 0; // spit out info .desktops // constants #define PNDNOTIFYD_LOGLEVEL "pndnotifyd.loglevel" @@ -229,6 +232,7 @@ int main ( int argc, char *argv[] ) { pnd_log ( pndn_rem, "Apps searchpath is '%s'\n", menu_appspath ); pnd_log ( pndn_rem, ".desktop files emit to '%s'\n", menu_dotdesktoppath ); pnd_log ( pndn_rem, ".desktop icon files emit to '%s'\n", menu_iconpath ); + pnd_log ( pndn_rem, ".desktop info files emit to '%s'\n", info_dotdesktoppath ? info_dotdesktoppath : "n/a" ); /* set up signal handler */ @@ -401,6 +405,7 @@ void consume_configuration ( void ) { desktop_dotdesktoppath = pnd_conf_get_as_char ( desktoph, PND_DESKTOP_DOTDESKTOP_PATH_KEY ); desktop_iconpath = pnd_conf_get_as_char ( desktoph, PND_DESKTOP_ICONS_PATH_KEY ); desktop_appspath = pnd_conf_get_as_char ( desktoph, PND_DESKTOP_SEARCH_KEY ); + info_dotdesktoppath = pnd_conf_get_as_char ( desktoph, "info.dotdesktoppath" ); } if ( ! desktop_dotdesktoppath ) { @@ -422,6 +427,11 @@ void consume_configuration ( void ) { menu_appspath = pnd_conf_get_as_char ( desktoph, PND_MENU_SEARCH_KEY ); } + // info + if ( desktoph ) { + g_info_p = pnd_conf_get_as_int_d ( desktoph, "info.emit_info", 0 ); + } + /* try to locate a runscript and optional hupscript */ @@ -557,6 +567,11 @@ void consume_configuration ( void ) { mkdir ( desktop_dotdesktoppath, 0777 ); mkdir ( desktop_iconpath, 0777 ); + if ( info_dotdesktoppath ) { + info_dotdesktoppath = pnd_expand_tilde ( strdup ( info_dotdesktoppath ) ); + mkdir ( info_dotdesktoppath, 0777 ); + } + if ( menu_dotdesktoppath ) { menu_dotdesktoppath = pnd_expand_tilde ( strdup ( menu_dotdesktoppath ) ); mkdir ( menu_dotdesktoppath, 0777 ); @@ -679,17 +694,37 @@ void process_discoveries ( pnd_box_handle applist, char *emitdesktoppath, char * pnd_log ( pndn_debug, " Icon not already present, so trying to write it! %s\n", existingpath ); + // handle same-path icon override for davec :) + char ovrfile [ PATH_MAX ]; + char *fixpxml; + sprintf ( ovrfile, "%s/%s", d -> object_path, d -> object_filename ); + fixpxml = strcasestr ( ovrfile, PND_PACKAGE_FILEEXT ); + if ( fixpxml ) { + strcpy ( fixpxml, ".png" ); + fixpxml = NULL; + struct stat statbuf; + if ( stat ( ovrfile, &statbuf ) == 0 ) { + d -> icon = strdup ( ovrfile ); + fixpxml = ovrfile; // !NULL will be the trigger to skip emittinf desktop from .pnd + } // stat + } // ovr? + // attempt to create icon files; if successful, alter the disco struct to contain new // path, otherwise leave it alone (since it could be a generic icon reference..) - if ( pnd_emit_icon ( emiticonpath, d ) ) { - // success; fix up icon path to new one.. - if ( d -> icon ) { - free ( d -> icon ); + if ( fixpxml == NULL ) { + // don't have an same-path override icon, so go fetch something from pnd file + + if ( pnd_emit_icon ( emiticonpath, d ) ) { + // success; fix up icon path to new one.. + if ( d -> icon ) { + free ( d -> icon ); + } + d -> icon = strdup ( existingpath ); + } else { + pnd_log ( pndn_debug, " WARN: Couldn't write out icon %s\n", existingpath ); } - d -> icon = strdup ( existingpath ); - } else { - pnd_log ( pndn_debug, " WARN: Couldn't write out icon %s\n", existingpath ); - } + + } // got ovr icon already? } // icon already exists? @@ -705,6 +740,15 @@ void process_discoveries ( pnd_box_handle applist, char *emitdesktoppath, char * pnd_log ( pndn_rem, "ERROR: Error creating .desktop file for app: %s\n", pnd_box_get_key ( d ) ); } + // info .desktop + if ( g_info_p && info_dotdesktoppath ) { + if ( pnd_emit_dotinfo ( info_dotdesktoppath, pndrun, d ) ) { + // nada + } else { + pnd_log ( pndn_rem, "ERROR: Error creating info .desktop file for app: %s\n", pnd_box_get_key ( d ) ); + } + } + // does this object request any mkdir's? if ( d -> mkdir_sp ) {