printf ( "Found app: %s\n", pnd_box_get_key ( d ) );
}
+ // 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 ( dotdesktoppath, d ) ) {
+ // success; fix up icon path to new one..
+ free ( d -> icon );
+ char buffer [ FILENAME_MAX ];
+ sprintf ( buffer, "%s/%s.png", dotdesktoppath, d -> unique_id );
+ d -> icon = strdup ( buffer );
+ }
+
// create the .desktop file
if ( pnd_emit_dotdesktop ( dotdesktoppath, pndrun, d ) ) {
// add a watch onto the newly created .desktop?
unsigned int bitlen;
FILE *pnd, *target;
- // prelim
+ // prelim .. if a pnd file, and no offset found, discovery code didn't locate icon.. so bail.
if ( ( p -> object_type == pnd_object_type_pnd ) &&
( ! p -> pnd_icon_pos ) )
{
return ( 0 ); // discover code didn't find it, so FAIL
}
- // filenames
+ // determine filename for target
sprintf ( buffer, "%s/%s.png", targetpath, p -> unique_id ); // target
- // first.. are we looking through a pnd file or a dir?
+ /* first.. open the source file, by type of application:
+ * are we looking through a pnd file or a dir?
+ */
if ( p -> object_type == pnd_object_type_directory ) {
- // if we can find icon, copy it in from directory to destination
-
+ sprintf ( from, "%s/%s", p -> object_path, p -> icon );
} else if ( p -> object_type == pnd_object_type_pnd ) {
- // if we can get it from pnd file, copy it into destination
-
- unsigned int len;
-
- sprintf ( from, "%s/%s", p -> object_path, p -> object_filename ); // target
+ sprintf ( from, "%s/%s", p -> object_path, p -> object_filename );
+ }
- pnd = fopen ( from, "r" );
+ pnd = fopen ( from, "r" );
- if ( ! pnd ) {
- return ( 0 );
- }
+ if ( ! pnd ) {
+ return ( 0 );
+ }
- target = fopen ( buffer, "wb" );
+ unsigned int len;
- if ( ! target ) {
- fclose ( pnd );
- return ( 0 );
- }
+ target = fopen ( buffer, "wb" );
- fseek ( pnd, 0, SEEK_END );
- len = ftell ( pnd );
- //fseek ( pnd, 0, SEEK_SET );
+ if ( ! target ) {
+ fclose ( pnd );
+ return ( 0 );
+ }
- fseek ( pnd, p -> pnd_icon_pos, SEEK_SET );
+ fseek ( pnd, 0, SEEK_END );
+ len = ftell ( pnd );
+ //fseek ( pnd, 0, SEEK_SET );
- len -= p -> pnd_icon_pos;
+ fseek ( pnd, p -> pnd_icon_pos, SEEK_SET );
- while ( len ) {
+ len -= p -> pnd_icon_pos;
- if ( len > (8*1024) ) {
- bitlen = (8*1024);
- } else {
- bitlen = len;
- }
+ while ( len ) {
- if ( fread ( bits, bitlen, 1, pnd ) != 1 ) {
- fclose ( pnd );
- fclose ( target );
- unlink ( buffer );
- return ( 0 );
- }
+ if ( len > (8*1024) ) {
+ bitlen = (8*1024);
+ } else {
+ bitlen = len;
+ }
- if ( fwrite ( bits, bitlen, 1, target ) != 1 ) {
- fclose ( pnd );
- fclose ( target );
- unlink ( buffer );
- return ( 0 );
- }
+ if ( fread ( bits, bitlen, 1, pnd ) != 1 ) {
+ fclose ( pnd );
+ fclose ( target );
+ unlink ( buffer );
+ return ( 0 );
+ }
- len -= bitlen;
- } // while
+ if ( fwrite ( bits, bitlen, 1, target ) != 1 ) {
+ fclose ( pnd );
+ fclose ( target );
+ unlink ( buffer );
+ return ( 0 );
+ }
- fclose ( pnd );
- fclose ( target );
+ len -= bitlen;
+ } // while
- }
+ fclose ( pnd );
+ fclose ( target );
return ( 1 );
}
#include <stdio.h> /* for printf, NULL */
#include <stdlib.h> /* for free */
+#include <string.h> /* for strdup */
#include "pnd_conf.h"
#include "pnd_container.h"
printf ( " Clockspeed: %s\n", d -> clockspeed );
}
- if ( do_dotdesktop ) {
- pnd_emit_dotdesktop ( "./testdata/dotdesktop", pndrun, d );
+ if ( do_icon ) {
+ if ( pnd_emit_icon ( "./testdata/dotdesktop", d ) ) {
+ printf ( " -> icon dump succeeded\n" );
+
+ // fix up icon path to new one..
+ free ( d -> icon );
+ char buffer [ FILENAME_MAX ];
+ sprintf ( buffer, "%s/%s.png", "discotest-temp/", d -> unique_id );
+ d -> icon = strdup ( buffer );
+
+ } else {
+ printf ( " -> icon dump failed\n" );
+ }
}
- if ( do_icon ) {
- pnd_emit_icon ( "./testdata/dotdesktop", d );
+ if ( do_dotdesktop ) {
+ if ( pnd_emit_dotdesktop ( "./testdata/dotdesktop", pndrun, d ) ) {
+ printf ( " -> dotdesktop dump succeeded\n" );
+ } else {
+ printf ( " -> dotdesktop dump failed\n" );
+ }
}
// next!