Skip to content

Commit

Permalink
增加清理缓存功能
Browse files Browse the repository at this point in the history
  • Loading branch information
wushuo894 committed Oct 18, 2024
1 parent 2081288 commit 06b854b
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 9 deletions.
2 changes: 1 addition & 1 deletion UPDATE.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
修复默认的自定义集数获取规则错误
增加清理缓存功能
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>ani.rss</groupId>
<artifactId>ani-rss</artifactId>
<version>1.1.139</version>
<version>1.1.140</version>

<properties>
<maven.compiler.source>11</maven.compiler.source>
Expand Down
8 changes: 1 addition & 7 deletions src/main/java/ani/rss/action/AniAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import cn.hutool.http.server.HttpServerRequest;
import cn.hutool.http.server.HttpServerResponse;
Expand Down Expand Up @@ -223,11 +221,7 @@ public void delete() {
for (Ani ani : anis) {
File torrentDir = TorrentUtil.getTorrentDir(ani);
FileUtil.del(torrentDir);
File parentFile = torrentDir.getParentFile();
File[] files = ObjectUtil.defaultIfNull(parentFile.listFiles(), new File[]{});
if (ArrayUtil.isEmpty(files)) {
FileUtil.del(parentFile);
}
ClearCacheAction.clearParentFile(torrentDir);
log.info("删除订阅 {} {} {}", ani.getTitle(), ani.getUrl(), ani.getId());
}
}
Expand Down
86 changes: 86 additions & 0 deletions src/main/java/ani/rss/action/ClearCacheAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package ani.rss.action;

import ani.rss.annotation.Auth;
import ani.rss.annotation.Path;
import ani.rss.entity.Ani;
import ani.rss.util.AniUtil;
import ani.rss.util.ConfigUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.server.HttpServerRequest;
import cn.hutool.http.server.HttpServerResponse;

import java.io.File;
import java.io.IOException;
import java.util.Set;
import java.util.stream.Collectors;

/**
* 缓存清理
*/
@Auth
@Path("/clearCache")
public class ClearCacheAction implements BaseAction {
/**
* 清理父级空文件夹
*
* @param file
*/
public static void clearParentFile(File file) {
if (file.exists()) {
return;
}
File parentFile = file.getParentFile();
String[] list = ObjectUtil.defaultIfNull(parentFile.list(), new String[]{});
if (ArrayUtil.isNotEmpty(list)) {
return;
}
FileUtil.del(parentFile);
clearParentFile(parentFile);
}

@Override
public synchronized void doAction(HttpServerRequest request, HttpServerResponse response) throws IOException {
File configDir = ConfigUtil.getConfigDir();
String configDirStr = configDir.toString().replace("\\", "/");

Set<String> covers = AniUtil.ANI_LIST
.stream()
.map(Ani::getCover)
.map(s -> new File(configDirStr + "/files/" + s).toString().replace("\\", "/"))
.collect(Collectors.toSet());

FileUtil.mkdir(configDirStr + "/files");
FileUtil.mkdir(configDirStr + "/img");

Set<File> files = FileUtil.loopFiles(configDirStr + "/files")
.stream()
.filter(file -> {
String fileName = file.toString().replace("\\", "/");
return !covers.contains(fileName);
}).collect(Collectors.toSet());
long filesSize = files.stream()
.mapToLong(File::length)
.sum();
long imgSize = FileUtil.size(new File(configDirStr + "/img"));

long sumSize = filesSize + imgSize;

if (sumSize < 1) {
resultSuccessMsg("清理完成, 共清理{}MB", 0);
return;
}

for (File file : files) {
FileUtil.del(file);
clearParentFile(file);
}

FileUtil.del(configDirStr + "/img");

resultSuccessMsg("清理完成, 共清理{}MB", NumberUtil.decimalFormat("0.00", sumSize / 1024.0 / 1024.0));
}

}
25 changes: 25 additions & 0 deletions ui/src/config/Basic.vue
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,18 @@
<el-form-item label="DEBUG">
<el-switch v-model:model-value="props.config.debug"/>
</el-form-item>
<el-form-item label="缓存">
<div style="width: 100%;">
<div>
<el-button :loading="clearCacheLoading" bg icon="Delete" text @click="clearCache">清理</el-button>
</div>
<div>
<el-text class="mx-1" size="small">
清理现在不被使用的缓存
</el-text>
</div>
</div>
</el-form-item>
</el-form>
</el-collapse-item>
</el-collapse>
Expand All @@ -224,5 +236,18 @@ let trackersUpdate = () => {
})
}
let clearCacheLoading = ref(false)
let clearCache = () => {
clearCacheLoading.value = true
api.post('api/clearCache')
.then(res => {
ElMessage.success(res.message);
})
.finally(() => {
clearCacheLoading.value = false
})
}
let props = defineProps(['config'])
</script>

0 comments on commit 06b854b

Please sign in to comment.