gchar *unique_filename_simple(const gchar *path) { gchar *unique; const gchar *name; const gchar *ext; if (!path) return NULL; name = filename_from_path(path); if (!name) return NULL; ext = extension_from_path(name); if (!ext) { unique = unique_filename(path, NULL, "_", TRUE); } else { gchar *base; base = remove_extension_from_path(path); unique = unique_filename(base, ext, "_", TRUE); g_free(base); } return unique; }
const char * content_type_from_path(char *path) { const char *ext; const char **entry; size_t i; ext = extension_from_path(path); if (ext != NULL) { for (i = 0; (entry = extension_table[i]); i++) { if (strcmp(entry[0], ext) == 0) { return entry[1]; } } } return "text/plain"; /* if there's no extension, assume it's text. */ }
gboolean metadata_write_perform(FileData *fd) { gboolean success; ExifData *exif; g_assert(fd->change); if (fd->change->dest && strcmp(extension_from_path(fd->change->dest), GQ_CACHE_EXT_METADATA) == 0) { success = metadata_legacy_write(fd); if (success) metadata_legacy_delete(fd, fd->change->dest); return success; } /* write via exiv2 */ /* we can either use cached metadata which have fd->modified_xmp already applied or read metadata from file and apply fd->modified_xmp metadata are read also if the file was modified meanwhile */ exif = exif_read_fd(fd); if (!exif) return FALSE; success = (fd->change->dest) ? exif_write_sidecar(exif, fd->change->dest) : exif_write(exif); /* write modified metadata */ exif_free_fd(fd, exif); if (fd->change->dest) /* this will create a FileData for the sidecar and link it to the main file (we can't wait until the sidecar is discovered by directory scanning because exif_read_fd is called before that and it would read the main file only and store the metadata in the cache) FIXME: this does not catch new sidecars created by independent external programs */ file_data_unref(file_data_new_simple(fd->change->dest)); if (success) metadata_legacy_delete(fd, fd->change->dest); return success; }