static void add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb) { GNode *mlit; struct MLCL_Bits *mb = (struct MLCL_Bits *) _mb; mlit = dmap_structure_add (mb->mlcl, DMAP_CC_MLIT); if (_dmap_share_client_requested (mb->bits, ITEM_KIND)) dmap_structure_add (mlit, DMAP_CC_MIKD, (gchar) DPAP_ITEM_KIND_PHOTO); if (_dmap_share_client_requested (mb->bits, ITEM_ID)) dmap_structure_add (mlit, DMAP_CC_MIID, GPOINTER_TO_UINT (id)); if (_dmap_share_client_requested (mb->bits, ITEM_NAME)) { gchar *filename = NULL; g_object_get (record, "filename", &filename, NULL); if (filename) { dmap_structure_add (mlit, DMAP_CC_MINM, filename); g_free (filename); } else g_debug ("Filename requested but not available"); } if (_dmap_share_client_requested (mb->bits, PERSISTENT_ID)) dmap_structure_add (mlit, DMAP_CC_MPER, GPOINTER_TO_UINT (id)); if (TRUE) { /* dpap-sharp claims iPhoto '08 will not show thumbnails without PASP * and this does seem to be the case when testing. */ gchar *aspect_ratio = NULL; g_object_get (record, "aspect-ratio", &aspect_ratio, NULL); if (aspect_ratio) { dmap_structure_add (mlit, DMAP_CC_PASP, aspect_ratio); g_free (aspect_ratio); } else g_debug ("Aspect ratio requested but not available"); } if (_dmap_share_client_requested (mb->bits, PHOTO_CREATIONDATE)) { gint creation_date = 0; g_object_get (record, "creation-date", &creation_date, NULL); dmap_structure_add (mlit, DMAP_CC_PICD, creation_date); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGEFILENAME)) { gchar *filename = NULL; g_object_get (record, "filename", &filename, NULL); if (filename) { dmap_structure_add (mlit, DMAP_CC_PIMF, filename); g_free (filename); } else g_debug ("Filename requested but not available"); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGEFORMAT)) { gchar *format = NULL; g_object_get (record, "format", &format, NULL); if (format) { dmap_structure_add (mlit, DMAP_CC_PFMT, format); g_free (format); } else g_debug ("Format requested but not available"); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGEFILESIZE)) { GByteArray *thumbnail = NULL; g_object_get (record, "thumbnail", &thumbnail, NULL); dmap_structure_add (mlit, DMAP_CC_PIFS, thumbnail ? thumbnail->len : 0); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGELARGEFILESIZE)) { gint large_filesize = 0; g_object_get (record, "large-filesize", &large_filesize, NULL); dmap_structure_add (mlit, DMAP_CC_PLSZ, large_filesize); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGEPIXELHEIGHT)) { gint pixel_height = 0; g_object_get (record, "pixel-height", &pixel_height, NULL); dmap_structure_add (mlit, DMAP_CC_PHGT, pixel_height); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGEPIXELWIDTH)) { gint pixel_width = 0; g_object_get (record, "pixel-width", &pixel_width, NULL); dmap_structure_add (mlit, DMAP_CC_PWTH, pixel_width); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGERATING)) { gint rating = 0; g_object_get (record, "rating", &rating, NULL); dmap_structure_add (mlit, DMAP_CC_PRAT, rating); } if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGECOMMENTS)) { gchar *comments = NULL; g_object_get (record, "comments", &comments, NULL); if (comments) { dmap_structure_add (mlit, DMAP_CC_PCMT, comments); g_free (comments); } else g_debug ("Comments requested but not available"); } if (_dmap_share_client_requested (mb->bits, PHOTO_FILEDATA)) { size_t size = 0; unsigned char *data = NULL; GByteArray *thumbnail = NULL; if (_dmap_share_client_requested (mb->bits, PHOTO_THUMB)) { g_object_get (record, "thumbnail", &thumbnail, NULL); if (thumbnail) { data = thumbnail->data; size = thumbnail->len; } else { data = NULL; size = 0; } } else { /* Should be PHOTO_HIRES */ char *location = NULL; g_object_get (record, "location", &location, NULL); if (mapped_file) { /* Free any previously mapped image */ g_mapped_file_unref (mapped_file); mapped_file = NULL; } mapped_file = file_to_mmap (location); if (mapped_file == NULL) { g_warning ("Error opening %s", location); data = NULL; size = 0; } else { data = (unsigned char *) g_mapped_file_get_contents (mapped_file); size = g_mapped_file_get_length (mapped_file); } g_free (location); } dmap_structure_add (mlit, DMAP_CC_PFDT, data, size); } }
solution* mmap_solution(char *filename) { solution *sol = (solution*) malloc(sizeof(solution)); char *buffer = file_to_mmap(filename); buffer = load_solution(sol, buffer, 1); return sol; }