예제 #1
0
//
// handle_folder
//
void Library_Importer::handle_folder (Folder & folder)
{
  // Update the id for the folder element.
  this->handle_import_common (folder, this->idgen_->generate_folder_id ());

  // Update the children in this folder.
  std::vector <Folder> child_folders;
  folder.children (child_folders);

  for (auto folder : child_folders)
    this->handle_folder (folder);

  // Handle all the imported FCOs.
  std::vector <FCO> child_fcos;
  folder.children (child_fcos);

  for (auto child : child_fcos)
    this->handle_import_fco (child);
}
void FileSystemScanner::rescanFolders(QPtrList<Folder>* folders, bool forceEXIF, bool fast)
{
    Folder* folder = 0;
    for (folder = folders->first(); folder; folder = folders->next()) {
        QString currentFolderPath = folder->dir()->absPath();

        tracer->sdebug(__func__) << "rescanning folder: " << folder->id() << ": " << currentFolderPath << endl;

        if (folder->dir()->exists()) {

            folder->setFound(true);

            if (!fast) {
                rescanFolder(folder, forceEXIF);
                if (m_cancel) {
                    return;
                }
            }

            if (folder->children() && folder->children()->count()) {
                rescanFolders(folder->children(), forceEXIF, fast);
            }

            // scan the filesystem for new folders
            if (!fast && folder->recursive()) {
                delete m_loopDetectionHelper;
                m_loopDetectionHelper = new QPtrList<QString>;
                m_loopDetectionHelper->setAutoDelete(true);
                m_loopDetectionHelper->append(new QString(folder->dir()->canonicalPath()));

                addFolders(folder);
            }
        } else {
            folder->setFound(false);

            tracer->sdebug(__func__) << "folder: " << folder->id() << ": '" << currentFolderPath << "' not found" << endl;
            emit(progress_folderNotFound(currentFolderPath));
        }
    }
}