55 if(params->film->ref <= 0)
102 params->imagelist = NULL;
129 params->imagelist = NULL;
130 for(
int i = 1;
i < argc;
i++)
133 if(!g_file_test(path, G_FILE_TEST_IS_DIR))
136 params->imagelist = g_list_prepend(params->imagelist, path);
141 GDir *cdir = g_dir_open(path, 0, NULL);
146 const gchar *fname = g_dir_read_name(cdir);
148 if(fname[0] ==
'.')
continue;
149 gchar *fullname = g_build_filename(path, fname, NULL);
151 params->imagelist = g_list_prepend(params->imagelist, fullname);
160 params->imagelist = g_list_reverse(params->imagelist);
169 GDir *cdir = g_dir_open(path, 0, NULL);
178 const gchar *filename = g_dir_read_name(cdir);
182 if(filename[0] ==
'.')
continue;
185 fullname = g_build_filename(path, filename, NULL);
188 if(recursive && g_file_test(fullname, G_FILE_TEST_IS_DIR))
195 *result = g_list_prepend(*result, fullname);
214 g_dir_rewind(cfr->
dir);
215 const gchar *dfn = NULL;
216 while((dfn = g_dir_read_name(cfr->
dir)) != NULL)
219 const size_t len = strlen(dfn);
220 if(strcmp(dfn + len - 4,
".gpx") == 0 || strcmp(dfn + len - 4,
".GPX") == 0)
222 gchar *gpx_file = g_build_path(G_DIR_SEPARATOR_S, cfr->
dirname, dfn, NULL);
237 gchar *a_basename = g_path_get_basename(a);
238 gchar *b_basename = g_path_get_basename(b);
239 const int ret = g_strcmp0(a_basename, b_basename);
255 dt_control_log(_(
"no supported images were found to be imported"));
270 gchar message[512] = { 0 };
272 const guint total = g_list_length(images);
273 g_snprintf(message,
sizeof(message) - 1, ngettext(
"importing %d image",
"importing %d images", total), total);
277 GList *all_imgs = NULL;
284 for(GList *image = images; image; image = g_list_next(image))
286 gchar *cdn = g_path_get_dirname((
const gchar *)image->data);
294 if(cfr && cfr != film)
315 fraction += 1.0 / total;
318 all_imgs = g_list_prepend(all_imgs, GINT_TO_POINTER(imgid));
319 imgs = g_list_append(imgs, GINT_TO_POINTER(imgid));
323 if(pending >= 4 && curr_time - last_update > 0.5)
331 last_update = curr_time;
337 all_imgs = g_list_reverse(all_imgs);
static const dt_aligned_pixel_simd_t const dt_adaptation_t const float p
void dt_collection_load_filmroll(dt_collection_t *collection, const int32_t imgid, gboolean open_single_image)
void dt_collection_update_query(const dt_collection_t *collection, dt_collection_change_t query_change, dt_collection_properties_t changed_property, GList *list)
@ DT_COLLECTION_PROP_UNDEF
@ DT_COLLECTION_CHANGE_RELOAD
int32_t dt_image_import(const int32_t film_id, const char *filename, gboolean raise_signals)
int dt_conf_get_bool(const char *name)
gchar * dt_conf_get_string(const char *name)
void dt_control_log(const char *msg,...)
void dt_control_queue_redraw_center()
request redraw of center window. This redraws the center view within a gdk critical section to preven...
void dt_control_gpx_apply(const gchar *filename, int32_t filmid, const gchar *tz, GList *imgs)
gboolean dt_supported_image(const gchar *filename)
check if file is a supported image
static void dt_free_gpointer(gpointer ptr)
static double dt_get_wtime(void)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
static int dt_pthread_mutex_unlock(dt_pthread_mutex_t *mutex) RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
static int dt_pthread_mutex_lock(dt_pthread_mutex_t *mutex) ACQUIRE(mutex) NO_THREAD_SAFETY_ANALYSIS
void dt_film_init(dt_film_t *film)
gboolean dt_film_is_empty(const int id)
int dt_film_new(dt_film_t *film, const char *directory)
void dt_film_remove(const int id)
void dt_film_cleanup(dt_film_t *film)
dt_job_t * dt_pathlist_import_create(int argc, char *argv[])
static void _film_import1(dt_job_t *job, dt_film_t *film, GList *images)
static void _pathlist_import_cleanup(void *p)
static GList * _film_recursive_get_files(const gchar *path, gboolean recursive, GList **result)
static int _film_filename_cmp(gchar *a, gchar *b)
static int32_t dt_film_import1_run(dt_job_t *job)
dt_job_t * dt_film_import1_create(dt_film_t *film)
static int32_t _pathlist_import_run(dt_job_t *job)
static void _apply_filmroll_gpx(dt_film_t *cfr)
static void dt_film_import1_cleanup(void *p)
void dt_ui_notify_user()
draw user's attention
dt_job_t * dt_control_job_create(dt_job_execute_callback execute, const char *msg,...)
void * dt_control_job_get_params(const _dt_job_t *job)
void dt_control_job_set_progress(dt_job_t *job, double value)
void dt_control_job_add_progress(dt_job_t *job, const char *message, gboolean cancellable)
void dt_control_job_set_progress_message(dt_job_t *job, const char *message)
void dt_control_job_set_params(_dt_job_t *job, void *params, dt_job_destroy_callback callback)
void dt_control_job_dispose(_dt_job_t *job)
#define DT_DEBUG_CONTROL_SIGNAL_RAISE(ctlsig, signal,...)
@ DT_SIGNAL_GEOTAG_CHANGED
This signal is raised when a geotag is added/deleted/changed
struct dt_collection_t * collection
struct dt_control_signal_t * signals
dt_pthread_mutex_t images_mutex
gchar * dt_util_normalize_path(const gchar *_input)