Browse Source

files counter for all dirs improved

master
filesite 1 month ago
parent
commit
b2746502f0
  1. 72
      themes/beauty/controller/CommandController.php

72
themes/beauty/controller/CommandController.php

@ -152,6 +152,26 @@ eof; @@ -152,6 +152,26 @@ eof;
Common::setCache($this->allFilesCacheKey, array());
}
protected function getParentDir($dirpath) {
$rootDir = __DIR__ . '/../../../www/' . FSC::$app['config']['content_directory'];
$rootDir = realpath($rootDir);
if (strpos($dirpath, $rootDir) !== false) {
$dirs = str_replace($rootDir, '', $dirpath);
$dirs = preg_replace('/\/$/', '', $dirs);
$arr = explode('/', $dirs);
$num = count($arr);
if ($num >= 2) {
$left = array_slice($arr, 0, $num-1);
return realpath( $rootDir . '/' . implode('/', $left) );
}else {
return $rootDir;
}
}
return '';
}
//扫描媒体文件:图片、视频、音乐
//TODO: 把它们按年份、月份归类,并缓存到/runtime/cache/目录,方便前端展示读取
//把当前扫描进度保存到单独的缓存文件,便于用户随时获取
@ -173,14 +193,16 @@ eof; @@ -173,14 +193,16 @@ eof;
$maxScanDeep = 0; //最大扫描目录级数
$dirTree = $scanner->scan($dirpath, $maxScanDeep);
//统计文件数量
$dirId = $scanner->getId($dirpath);
$parentDir = $this->getParentDir($dirpath);
$parentId = $scanner->getId($parentDir);
$this->updateAllDirTreeCache($dirId, $parentId, $dirTree);
$scanResults = $scanner->getScanResults();
echo 'Total directories or files: ' . count($scanResults);
echo "\n";
//统计文件数量
$dirId = $scanner->getId($dirpath);
$this->updateAllDirTreeCache($dirId, $scanResults);
$supportedImageExts = FSC::$app['config']['supportedImageExts'];
$supportedVideoExts = FSC::$app['config']['supportedVideoExts'];
$supportedAudioExts = FSC::$app['config']['supportedAudioExts'];
@ -412,7 +434,7 @@ eof; @@ -412,7 +434,7 @@ eof;
return true;
}
protected function updateAllDirTreeCache($dirId, $dirTree) {
protected function updateAllDirTreeCache($dirId, $parentId, $dirTree) {
$cacheKey = $this->allDirTreeCacheKey;
$cacheData = Common::getCache($cacheKey);
if (empty($cacheData)) {
@ -431,37 +453,22 @@ eof; @@ -431,37 +453,22 @@ eof;
foreach ($dirTree as $id => $item) {
if (empty($item['pid'])) {
echo "Ignored file no pid: {$id}\n";
print_r($item);
echo "\n";
//print_r($item);
//echo "\n";
continue;
}
//TODO: 递归更新所有父目录
$pid = $item['pid'];
if (!isset($cacheData[$pid]['image_total'])) {
$cacheData[$pid]['image_total'] = 0;
}
if (!isset($cacheData[$pid]['video_total'])) {
$cacheData[$pid]['video_total'] = 0;
}
if (!isset($cacheData[$pid]['audio_total'])) {
$cacheData[$pid]['audio_total'] = 0;
}
if (
!empty($item['filename']) && in_array($item['extension'], $supportedImageExts)
) {
$cacheData[$pid]['image_total'] ++;
$imgNum ++;
}else if (
!empty($item['filename']) && in_array($item['extension'], $supportedVideoExts)
) {
$cacheData[$pid]['video_total'] ++;
$videoNum ++;
}else if (
!empty($item['filename']) && in_array($item['extension'], $supportedAudioExts)
) {
$cacheData[$pid]['audio_total'] ++;
$audioNum ++;
}
}
@ -471,6 +478,27 @@ eof; @@ -471,6 +478,27 @@ eof;
$cacheData[$dirId]['audio_total'] = $audioNum;
echo "File total: {$dirId}: image {$imgNum}, video {$videoNum}, audio {$audioNum}\n";
//更新父目录数据
if (!empty($cacheData[$parentId])) {
if (isset($cacheData[$parentId]['image_total'])) {
$cacheData[$parentId]['image_total'] += $imgNum;
}else {
$cacheData[$parentId]['image_total'] = $imgNum;
}
if (isset($cacheData[$parentId]['video_total'])) {
$cacheData[$parentId]['video_total'] += $videoNum;
}else {
$cacheData[$parentId]['video_total'] = $videoNum;
}
if (isset($cacheData[$parentId]['audio_total'])) {
$cacheData[$parentId]['audio_total'] += $audioNum;
}else {
$cacheData[$parentId]['audio_total'] = $audioNum;
}
}
return Common::setCache($cacheKey, $cacheData);
}

Loading…
Cancel
Save