/* walk through the directory of the loaded file and add every file matching the current file */ void fileset_add_dir(const char *fname) { WS_DIR *dir; /* scanned directory */ WS_DIRENT *file; /* current file */ const char *name; fileset_entry *entry; GString *dirname; gchar *fname_dup; /* get (convert) directory name, but don't touch the given string */ fname_dup = get_dirname(g_strdup(fname)); dirname = g_string_new(fname_dup); g_free(fname_dup); set.dirname = g_strdup(dirname->str); dirname = g_string_append_c(dirname, G_DIR_SEPARATOR); /* is the current file probably a part of any fileset? */ if(fileset_filename_match_pattern(fname)) { /* yes, go through the files in the directory and check if the file in question is part of the current file set */ if ((dir = ws_dir_open(dirname->str, 0, NULL)) != NULL) { while ((file = ws_dir_read_name(dir)) != NULL) { name = ws_dir_get_name(file); if(fileset_filename_match_pattern(name) && fileset_is_file_in_set(name, get_basename(fname))) { fileset_add_file(dirname->str, name, strcmp(name, get_basename(fname))== 0 /* current */); } } /* while */ ws_dir_close(dir); } /* if */ } else { /* no, this is a "standalone file", just add this one */ entry = fileset_add_file(dirname->str, get_basename(fname), TRUE /* current */); /* don't add the file to the dialog here, this will be done in fileset_update_dlg() below */ } g_string_free(dirname, TRUE /* free_segment */); /* sort entries by creation time */ set.entries = g_list_sort(set.entries, fileset_sort_compare); fileset_update_dlg(); }
/* (the filenames must already be in correct shape) */ gboolean fileset_is_file_in_set(const char *fname1, const char *fname2) { char *pfx1; char *pfx2; char *dup_f1; char *dup_f2; size_t minlen = strlen("_00001_20050418010750"); /* just to be sure ... */ g_assert(fileset_filename_match_pattern(fname1)); g_assert(fileset_filename_match_pattern(fname2)); dup_f1 = g_strdup(fname1); dup_f2 = g_strdup(fname2); pfx1 = strrchr(dup_f1, '.'); pfx2 = strrchr(dup_f2, '.'); /* suffix is optional */ if (!pfx1) pfx1 = dup_f1 + strlen(dup_f1); if (!pfx2) pfx2 = dup_f2 + strlen(dup_f2); /* the optional suffix (file extension) must be equal */ if(strcmp(pfx1, pfx2) != 0) { g_free(dup_f1); g_free(dup_f2); return FALSE; } *(pfx1-minlen) = '\0'; *(pfx2-minlen) = '\0'; if(strcmp(dup_f1, dup_f2) != 0) { g_free(dup_f1); g_free(dup_f2); return FALSE; } g_free(dup_f1); g_free(dup_f2); return TRUE; }
QString FileSetDialog::nameToDate(const char *name) { QString dn; if (!fileset_filename_match_pattern(name)) return NULL; dn = name; dn.remove(QRegExp(".*_")); dn.truncate(14); dn.insert(4, '-'); dn.insert(7, '-'); dn.insert(10, ' '); dn.insert(13, ':'); dn.insert(16, ':'); return dn; }