GthCatalog * catalogs__gth_catalog_load_from_data_cb (const void *buffer) { if ((buffer == NULL) || (strcmp (buffer, "") == 0) || (strncmp (buffer, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<catalog ", 48) == 0)) { return gth_catalog_new (); } else return NULL; }
void gth_organize_task_set_singletons_catalog (GthOrganizeTask *self, const char *catalog_name) { GFile *file; _g_object_unref (self->priv->singletons_catalog); self->priv->singletons_catalog = NULL; if (catalog_name == NULL) return; self->priv->singletons_catalog = gth_catalog_new (); file = _g_file_new_for_display_name ("catalog:///", catalog_name, ".catalog"); gth_catalog_set_file (self->priv->singletons_catalog, file); gth_catalog_set_name (self->priv->singletons_catalog, catalog_name); g_object_unref (file); }
GFile * catalogs__command_line_files_cb (GList *files) { GFile *file; GthCatalog *catalog; GList *scan; if (g_list_length (files) <= 1) return NULL; file = _g_file_new_for_display_name ("catalog:///", _("Command Line"), ".catalog"); catalog = gth_catalog_new (); gth_catalog_set_file (catalog, file); gth_catalog_set_name (catalog, _("Command Line")); for (scan = files; scan; scan = scan->next) gth_catalog_insert_file (catalog, (GFile *) scan->data, -1); gth_catalog_save (catalog); g_object_unref (catalog); return file; }
static void for_each_file_func (GFile *file, GFileInfo *info, gpointer user_data) { GthOrganizeTask *self = user_data; GthFileData *file_data; char *key; GTimeVal timeval; GthCatalog *catalog; if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR) return; key = NULL; file_data = gth_file_data_new (file, info); switch (self->priv->group_policy) { case GTH_GROUP_POLICY_DIGITALIZED_DATE: { GObject *metadata; metadata = g_file_info_get_attribute_object (info, "Embedded::Photo::DateTimeOriginal"); if (metadata != NULL) { if (_g_time_val_from_exif_date (gth_metadata_get_raw (GTH_METADATA (metadata)), &timeval)) key = _g_time_val_strftime (&timeval, KEY_FORMAT); } } break; case GTH_GROUP_POLICY_MODIFIED_DATE: timeval = *gth_file_data_get_modification_time (file_data); key = _g_time_val_strftime (&timeval, KEY_FORMAT); break; } if (key == NULL) return; catalog = g_hash_table_lookup (self->priv->catalogs, key); if (catalog == NULL) { GthDateTime *date_time; GFile *catalog_file; char *name; GtkTreeIter iter; date_time = gth_datetime_new (); gth_datetime_from_timeval (date_time, &timeval); catalog_file = gth_catalog_get_file_for_date (date_time); catalog = gth_catalog_load_from_file (catalog_file); if (catalog == NULL) catalog = gth_catalog_new (); gth_catalog_set_for_date (catalog, date_time); g_hash_table_insert (self->priv->catalogs, g_strdup (key), catalog); name = gth_datetime_strftime (date_time, "%x"); gtk_list_store_append (self->priv->results_liststore, &iter); gtk_list_store_set (self->priv->results_liststore, &iter, KEY_COLUMN, key, NAME_COLUMN, name, CARDINALITY_COLUMN, 0, CREATE_CATALOG_COLUMN, TRUE, ICON_COLUMN, self->priv->icon_pixbuf, -1); self->priv->n_catalogs++; g_free (name); g_object_unref (catalog_file); gth_datetime_free (date_time); } if (catalog != NULL) { GtkTreeIter iter; int n = 0; if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->priv->results_liststore), &iter)) { do { char *k; gtk_tree_model_get (GTK_TREE_MODEL (self->priv->results_liststore), &iter, KEY_COLUMN, &k, CARDINALITY_COLUMN, &n, -1); if (g_strcmp0 (k, key) == 0) { gtk_list_store_set (self->priv->results_liststore, &iter, CARDINALITY_COLUMN, n + 1, -1); self->priv->n_files++; g_free (k); break; } g_free (k); } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (self->priv->results_liststore), &iter)); } gth_catalog_insert_file (catalog, file_data->file, -1); } g_object_unref (file_data); g_free (key); }