void MediaFrame::add(const QString &path, AddOption option) { if(isAdded(path)) { qWarning() << "Path" << path << "already added"; return; } QUrl url = QUrl(path); QString localPath = url.toString(QUrl::PreferLocalFile); //qDebug() << "Local path" << localPath << "Path" << path; QStringList paths; QString filePath; if(isDir(localPath)) { if(!isDirEmpty(localPath)) { QDirIterator dirIterator(localPath, m_filters, QDir::Files, (option == AddOption::RECURSIVE ? QDirIterator::Subdirectories | QDirIterator::FollowSymlinks : QDirIterator::NoIteratorFlags)); while (dirIterator.hasNext()) { dirIterator.next(); filePath = dirIterator.filePath(); paths.append(filePath); m_allFiles.append(filePath); //qDebug() << "Appended" << filePath; emit countChanged(); } if(paths.count() > 0) { m_pathMap.insert(path, paths); qDebug() << "Added" << paths.count() << "files from" << path; } else { qWarning() << "No images found in directory" << path; } } else { qWarning() << "Not adding empty directory" << path; } // the pictures have to be sorted before adding them to the list, // because the QDirIterator sorts them in a different way than QDir::entryList //paths.sort(); } else if(isFile(localPath)) { paths.append(path); m_pathMap.insert(path, paths); m_allFiles.append(path); qDebug() << "Added" << paths.count() << "files from" << path; emit countChanged(); } else { if (url.isValid() && !url.isLocalFile()) { qDebug() << "Adding" << url.toString() << "as remote file"; paths.append(path); m_pathMap.insert(path, paths); m_allFiles.append(path); emit countChanged(); } else { qWarning() << "Path" << path << "is not a valid file url or directory"; } } }
/* * adfRemoveEntry * */ RETCODE adfRemoveEntry(struct Volume *vol, SECTNUM pSect, char *name) { struct bEntryBlock parent, previous, entry; SECTNUM nSect2, nSect; int hashVal; BOOL intl; char buf[200]; if (adfReadEntryBlock( vol, pSect, &parent )!=RC_OK) return RC_ERROR; nSect = adfNameToEntryBlk(vol, parent.hashTable, name, &entry, &nSect2); if (nSect==-1) { sprintf(buf, "adfRemoveEntry : entry '%s' not found", name); (*adfEnv.wFct)(buf); return RC_ERROR; } /* if it is a directory, is it empty ? */ if ( entry.secType==ST_DIR && !isDirEmpty((struct bDirBlock*)&entry) ) { sprintf(buf, "adfRemoveEntry : directory '%s' not empty", name); (*adfEnv.wFct)(buf); return RC_ERROR; } /* printf("name=%s nSect2=%ld\n",name, nSect2);*/ /* in parent hashTable */ if (nSect2==0) { intl = isINTL(vol->dosType) || isDIRCACHE(vol->dosType); hashVal = adfGetHashValue( (unsigned char*)name, intl ); /*printf("hashTable=%d nexthash=%d\n",parent.hashTable[hashVal], entry.nextSameHash);*/ parent.hashTable[hashVal] = entry.nextSameHash; if (adfWriteEntryBlock(vol, pSect, &parent)!=RC_OK) return RC_ERROR; } /* in linked list */ else { if (adfReadEntryBlock(vol, nSect2, &previous)!=RC_OK) return RC_ERROR; previous.nextSameHash = entry.nextSameHash; if (adfWriteEntryBlock(vol, nSect2, &previous)!=RC_OK) return RC_ERROR; } if (entry.secType==ST_FILE) { adfFreeFileBlocks(vol, (struct bFileHeaderBlock*)&entry); if (adfEnv.useNotify) (*adfEnv.notifyFct)(pSect,ST_FILE); } else if (entry.secType==ST_DIR) { adfSetBlockFree(vol, nSect); /* free dir cache block : the directory must be empty, so there's only one cache block */ if (isDIRCACHE(vol->dosType)) adfSetBlockFree(vol, entry.extension); if (adfEnv.useNotify) (*adfEnv.notifyFct)(pSect,ST_DIR); } else { sprintf(buf, "adfRemoveEntry : secType %d not supported", entry.secType); (*adfEnv.wFct)(buf); return RC_ERROR; } if (isDIRCACHE(vol->dosType)) adfDelFromCache(vol, &parent, entry.headerKey); adfUpdateBitmap(vol); return RC_OK; }