mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
133 lines
4.0 KiB
JavaScript
133 lines
4.0 KiB
JavaScript
import { defineStore } from "pinia";
|
|
import {
|
|
emptyBookSource,
|
|
emptyRssSource,
|
|
getSourceUniqueKey,
|
|
convertSourcesToMap,
|
|
} from "@utils/souce";
|
|
|
|
const isBookSource = /bookSource/i.test(location.href);
|
|
const emptySource = isBookSource ? emptyBookSource : emptyRssSource;
|
|
|
|
export const useSourceStore = defineStore("source", {
|
|
state: () => {
|
|
return {
|
|
/** @type {import("@/source").BookSoure[]} */
|
|
bookSources: [], // 临时存放所有书源,
|
|
/** @type {import("@/source").RssSource[]} */
|
|
rssSources: [], // 临时存放所有订阅源
|
|
/** @type {import("@/source").Source[]} */
|
|
savedSources: [], // 批量保存到阅读app成功的源
|
|
/** @type {import("@/source").Source} */
|
|
currentSource: emptySource, // 当前编辑的源
|
|
currentTab: localStorage.getItem("tabName") || "editTab",
|
|
editTabSource: {}, // 生成序列化的json数据
|
|
isDebuging: false,
|
|
};
|
|
},
|
|
getters: {
|
|
sources: (state) => (isBookSource ? state.bookSources : state.rssSources),
|
|
// @ts-ignore
|
|
sourcesMap: (state) => convertSourcesToMap(state.sources),
|
|
savedSourcesMap: (state) => convertSourcesToMap(state.savedSources),
|
|
currentSourceUrl: (state) =>
|
|
isBookSource
|
|
? state.currentSource.bookSourceUrl
|
|
: state.currentSource.sourceUrl,
|
|
searchKey: (state) =>
|
|
isBookSource
|
|
? state.currentSource.ruleSearch.checkKeyWord || "我的"
|
|
: null,
|
|
},
|
|
actions: {
|
|
startDebug() {
|
|
this.currentTab = "editDebug";
|
|
this.isDebuging = true;
|
|
},
|
|
debugFinish() {
|
|
this.isDebuging = false;
|
|
},
|
|
|
|
//拉取源后保存
|
|
saveSources(data) {
|
|
if (isBookSource) {
|
|
this.bookSources = data;
|
|
} else {
|
|
this.rssSources = data;
|
|
}
|
|
},
|
|
//批量推送
|
|
setPushReturnSources(returnSoures) {
|
|
this.savedSources = returnSoures;
|
|
},
|
|
//删除源
|
|
deleteSources(data) {
|
|
let sources = isBookSource ? this.bookSources : this.rssSources;
|
|
data.forEach((source) => {
|
|
let index = sources.indexOf(source);
|
|
if (index > -1) sources.splice(index, 1);
|
|
});
|
|
},
|
|
//保存当前编辑源
|
|
saveCurrentSource() {
|
|
let source = this.currentSource,
|
|
map = this.sourcesMap;
|
|
map.set(getSourceUniqueKey(source), JSON.parse(JSON.stringify(source)));
|
|
this.saveSources(Array.from(map.values()));
|
|
},
|
|
// 更改当前编辑的源qq
|
|
changeCurrentSource(source) {
|
|
this.currentSource = JSON.parse(JSON.stringify(source));
|
|
},
|
|
// update editTab tabName and editTab info
|
|
changeTabName(tabName) {
|
|
this.currentTab = tabName;
|
|
localStorage.setItem("tabName", tabName);
|
|
},
|
|
changeEditTabSource(source) {
|
|
this.editTabSource = JSON.parse(JSON.stringify(source));
|
|
},
|
|
editHistory(history) {
|
|
let historyObj;
|
|
if (localStorage.getItem("history")) {
|
|
historyObj = JSON.parse(localStorage.getItem("history"));
|
|
historyObj.new.push(history);
|
|
if (historyObj.new.length > 50) {
|
|
historyObj.new.shift();
|
|
}
|
|
if (historyObj.old.length > 50) {
|
|
historyObj.old.shift();
|
|
}
|
|
localStorage.setItem("history", JSON.stringify(historyObj));
|
|
} else {
|
|
const arr = { new: [history], old: [] };
|
|
localStorage.setItem("history", JSON.stringify(arr));
|
|
}
|
|
},
|
|
editHistoryUndo() {
|
|
if (localStorage.getItem("history")) {
|
|
let historyObj = JSON.parse(localStorage.getItem("history"));
|
|
historyObj.old.push(this.currentSource);
|
|
if (historyObj.new.length) {
|
|
this.currentSource = historyObj.new.pop();
|
|
}
|
|
localStorage.setItem("history", JSON.stringify(historyObj));
|
|
}
|
|
},
|
|
clearAllHistory() {
|
|
localStorage.setItem("history", JSON.stringify({ new: [], old: [] }));
|
|
},
|
|
clearEdit() {
|
|
this.editTabSource = {};
|
|
this.currentSource = emptySource;
|
|
},
|
|
|
|
// clear all source
|
|
clearAllSource() {
|
|
this.bookSources = [];
|
|
this.rssSources = [];
|
|
this.savedSources = [];
|
|
},
|
|
},
|
|
});
|