}
}
}
- db->store_frame_file(filename, size, frames_this_file);
+
+ const char *basename = filename.c_str();
+ while (strchr(basename, '/') != nullptr) {
+ basename = strchr(basename, '/');
+ }
+ db->store_frame_file(basename, size, frames_this_file);
}
return frame;
return ret;
}
-void load_frame_file(const char *filename, unsigned filename_idx, DB *db)
+void load_frame_file(const char *filename, const string &basename, unsigned filename_idx, DB *db)
{
struct stat st;
if (stat(filename, &st) == -1) {
exit(1);
}
- vector<DB::FrameOnDiskAndStreamIdx> all_frames = db->load_frame_file(filename, st.st_size, filename_idx);
+ vector<DB::FrameOnDiskAndStreamIdx> all_frames = db->load_frame_file(basename, st.st_size, filename_idx);
if (!all_frames.empty()) {
// We already had this cached in the database, so no need to look in the file.
for (const DB::FrameOnDiskAndStreamIdx &frame : all_frames) {
size_t size = ftell(fp);
fclose(fp);
- db->store_frame_file(filename, size, all_frames);
+ db->store_frame_file(basename, size, all_frames);
}
void load_existing_frames()
return;
}
+ vector<string> frame_basenames;
for ( ;; ) {
errno = 0;
dirent *de = readdir(dir);
break;
}
- if (de->d_type == DT_REG) {
+ if (de->d_type == DT_REG || de->d_type == DT_LNK) {
string filename = frame_dir + "/" + de->d_name;
frame_filenames.push_back(filename);
+ frame_basenames.push_back(de->d_name);
}
if (progress.wasCanceled()) {
progress.setValue(2);
for (size_t i = 0; i < frame_filenames.size(); ++i) {
- load_frame_file(frame_filenames[i].c_str(), i, &db);
+ load_frame_file(frame_filenames[i].c_str(), frame_basenames[i], i, &db);
progress.setValue(i + 3);
if (progress.wasCanceled()) {
exit(1);