遠端, 資料夾遍歷
syncFolderPathList(folderPath, rootPath, parentId, pageNum, folderList, callback) {
if(this.stopCreatingFlag){
Logger.log('stop creat download job');
return;
}
let i = 0, length = folderList.length;
let getSubChild = (cb) => {
let folder = folderList[i];
this.addDownloadInfo(folder);
let info = { ...folder, page: 1, pageNum: pageNum || PAGE_NUM }
this.serialFolderPathList(folderPath, rootPath, parentId, info, () => {
i++;
if (i < length) {
getSubChild(cb);
} else {
cb && cb();
}
})
}
if (i < length) {
getSubChild(() => {
callback && callback();
});
}
}
//folder deep walk, serial handle
serialFolderPathList(folderPath, rootPath, parentId, remotePathInfo, callback) {
if (this.stopCreatingFlag) {
Logger.log('stop creat download job');
return;
}
const { path, page, pageNum } = remotePathInfo;
if (Utils.isEmpty(path) || Utils.isEmpty(page)) {
Logger.error('the folderPathList params is error', remotePathInfo);
return;
}
Utils.getPathList(remotePathInfo, (error, data) => {
if (error) {
Logger.error('get path list error:', error);
return;
}
const { pageInfo, folderList, fileList, current } = data;
// Logger.log('folderPathList:', pageInfo, current.pathDisplay);
if (fileList && fileList.length > 0) {
fileList.forEach(file => {
//create the download job
this.addDownloadInfo(file)
}
let getNextPage = () =>{
if (pageInfo && (pageInfo.page < pageInfo.pageTotal)) {
const { page, pageNum } = pageInfo;
let newPage = page + 1;
let info = { ...current, page: newPage, pageNum: pageNum || PAGE_NUM }
this.serialFolderPathList(folderPath, rootPath, parentId, info, callback);
} else {
callback && callback();
}
}
// folder list serial recurrence start
if (folderList && folderList.length > 0) {
this.syncFolderPathList(folderPath, rootPath, parentId, pageNum, folderList, getNextPage);
} else {
getNextPage();
}
// folder list serial recurrence end
})
}
//folder deep walk,parallel handle
parallelFolderPathList(folderPath, rootPath, remotePathInfo, callback) {
if (this.stopCreatingFlag) {
Logger.log('stop creat download job');
return;
}
const { path, page, pageNum } = remotePathInfo;
if (Utils.isEmpty(path) || Utils.isEmpty(page)) {
Logger.log('the folderPathList params is error', remotePathInfo);
return;
}
Utils.getPathList(remotePathInfo, (error, data) => {
if(error){
Logger.log('get path list error:', error);
return;
}
const { pageInfo, folderList, fileList, current } = data;
let pageLoading = false;
let folderLoading = false;
let count = 0;
let checkEnd = () => {
// ++count == folderList.length && callback();
count++;
if(count == folderList.length){
folderLoading = false;
if(!pageLoading) callback();
}
}
let checkPage = () => {
pageLoading = false;
if(!folderLoading) callback();
}
if(fileList && fileList.length > 0){
fileList.forEach(file => {
//create the download job
this.addDownloadInfo(file);
})
}
// folder list parallel start
let completeFlag = false;
if (folderList && folderList.length > 0) {
folderList.forEach(folder => {
//create the download job
folderLoading = true;
this.addDownloadInfo(folder);
let info = { ...folder, page: 1, pageNum: pageNum || PAGE_NUM }
this.parallelFolderPathList(folderPath, rootPath, info, checkEnd);
completeFlag = true;
})
}
if (pageInfo && (pageInfo.page < pageInfo.pageTotal)) {
pageLoading = true;
const { page, pageNum } = pageInfo;
let newPage = page + 1;
let info = { ...current, page: newPage, pageNum: pageNum || PAGE_NUM }
this.parallelFolderPathList(folderPath, rootPath, info, checkPage);
} else {
// no folders, last page invoke callback
if(!completeFlag) {
callback && callback();
}
}
// folder list parallel end
})
}
相關文章
- c++ 遍歷資料夾C++
- Java 資料夾遞迴遍歷Java遞迴
- PHP遞迴遍歷資料夾PHP遞迴
- 遍歷資料夾的幾種方式
- php遍歷資料夾以及子目錄;PHP
- Matlab對資料夾的層次遍歷和深度遍歷Matlab
- C/C++遍歷資料夾和檔案C++
- 【C#】-遍歷資料夾簡約的方式C#
- Python遍歷資料夾常用的兩種方法!Python
- matlab遍歷資料夾下的所有檔案Matlab
- NAS如何掛載遠端資料夾
- 資料遍歷
- indexedDB 遍歷資料Index
- VC++使用FindFirstFile,FindNextFile遍歷一個資料夾C++
- 群暉NAS如何裝載遠端資料夾
- 利用 python 遍歷多級資料夾處理不同檔案Python
- Java遞迴遍歷資料夾及檔案過濾器使用(FileFilter)Java遞迴過濾器Filter
- Java遍歷資料夾的兩種方法(非遞迴和遞迴)Java遞迴
- js資料處理——遍歷JS
- git刪除遠端資料夾或檔案的方法Git
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- ASP.NET 8 AOT 遍歷資料夾獲取檔名稱及時長ASP.NET
- jquery遍歷得到的 Map 資料,jQuery
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 【Git/Github】刪除遠端倉庫中的檔案/資料夾Github
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- ASP.NET Core 中的檔案提供程式 遍歷資料夾讀取檔案資訊ASP.NET
- 寫個批處理指令碼來幫忙幹活---遍歷資料夾&字串處理指令碼字串
- 遞迴遍歷磁碟下的某一資料夾中所有檔案,並copy檔案生成檔案和帶資料夾的檔案遞迴
- 資料結構 二叉樹遍歷資料結構二叉樹
- R語言遍歷資料夾求取其中所有柵格檔案的平均值R語言
- 如何在 Linux 上覆制檔案/資料夾到遠端系統?Linux
- Linux系統複製檔案/資料夾到遠端伺服器Linux伺服器
- MSSQL遍歷資料庫根據列值查詢資料SQL資料庫
- 資料結構之遍歷二叉樹資料結構二叉樹
- js的map遍歷和array遍歷JS
- java去掉陣列中重複的資料和遍歷資料Java陣列
- 資料同步——rsync遠端同步