X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blobdiff_plain;f=apps%2Fpndnotifyd.c;h=fd1c1a11e475cd5b7399f644206dd0992bffaaee;hp=b9b350e8080397ffa30bbfd8ac05d343b7fca9fd;hb=4b7531ad98d318b8071d595ce3e0d4113ee06f93;hpb=000de7c3e6b28dc7dbe040dd5d931bd8f7e80ee6 diff --git a/apps/pndnotifyd.c b/apps/pndnotifyd.c index b9b350e..fd1c1a1 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" @@ -113,7 +116,7 @@ int main ( int argc, char *argv[] ) { } } else { - printf ( "%s [-d] [##]\n", argv [ 0 ] ); + printf ( "%s [-d] [-l] [##]\n", argv [ 0 ] ); printf ( "-d\tDaemon mode; detach from terminal, chdir to /tmp, suppress output. Optional.\n" ); printf ( "-n\tDo not scan on launch; default is to run a scan for apps when %s is invoked.\n", argv [ 0 ] ); printf ( "-l#\tLog-it; -l is 0-and-up (or all), and -l2 means 2-and-up (not all); l[0-3] for now. Log goes to /tmp/pndnotifyd.log\n" ); @@ -194,7 +197,7 @@ int main ( int argc, char *argv[] ) { // umask umask ( 022 ); // emitted files can be rwxr-xr-x - + } // set up daemon // wait for a user to be logged in - we should probably get hupped when a user logs in, so we can handle @@ -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 ); @@ -661,7 +676,7 @@ void process_discoveries ( pnd_box_handle applist, char *emitdesktoppath, char * // check if icon already exists (from a previous extraction say); if so, we needn't // do it again char existingpath [ FILENAME_MAX ]; - sprintf ( existingpath, "%s/%s.png", emiticonpath, d -> unique_id ); + sprintf ( existingpath, "%s/%s.png", emiticonpath, d -> unique_id /*, d -> subapp_number */ ); struct stat dirs; if ( stat ( existingpath, &dirs ) == 0 ) { @@ -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 ) {