mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-07 19:08:43 +08:00
87 lines
3.3 KiB
TypeScript
87 lines
3.3 KiB
TypeScript
import HandleContext from "../../data/model/HandleContext";
|
|
import {SyncConfig} from "../model/SyncConfig";
|
|
import DoubanPlugin from "../../../main";
|
|
import {App, moment} from "obsidian";
|
|
import {DoubanSyncHandler} from "./DoubanSyncHandler";
|
|
import {DoubanOtherSyncHandler} from "./DoubanOtherSyncHandler";
|
|
import { DoubanMovieSyncHandler } from "./DoubanMovieSyncHandler";
|
|
import { DoubanMusicSyncHandler } from "./DoubanMusicSyncHandler";
|
|
import { DoubanBookSyncHandler } from "./DoubanBookSyncHandler";
|
|
import {i18nHelper} from "../../../lang/helper";
|
|
import {DoubanTeleplaySyncHandler} from "./DoubanTeleplaySyncHandler";
|
|
|
|
export default class SyncHandler {
|
|
private app: App;
|
|
private plugin: DoubanPlugin;
|
|
private syncConfig: SyncConfig;
|
|
private context: HandleContext;
|
|
private syncHandlers: DoubanSyncHandler[];
|
|
private defaultSyncHandler: DoubanSyncHandler;
|
|
|
|
constructor(app: App, plugin: DoubanPlugin, syncConfig: SyncConfig, context: HandleContext) {
|
|
this.app = app;
|
|
this.plugin = plugin;
|
|
this.syncConfig = syncConfig;
|
|
this.context = context;
|
|
this.defaultSyncHandler = new DoubanOtherSyncHandler(plugin);
|
|
this.syncHandlers =
|
|
[
|
|
new DoubanMovieSyncHandler(plugin),
|
|
new DoubanBookSyncHandler(plugin),
|
|
// new DoubanBroadcastSyncHandler(plugin),
|
|
// new DoubanNoteSyncHandler(plugin),
|
|
new DoubanMusicSyncHandler(plugin),
|
|
new DoubanTeleplaySyncHandler(plugin),
|
|
this.defaultSyncHandler
|
|
];
|
|
}
|
|
|
|
async sync() {
|
|
if (this.syncConfig && this.syncConfig.syncType && this.syncConfig.scope) {
|
|
let syncHandler = this.syncHandlers.find(handler => handler.support(this.syncConfig.syncType));
|
|
if (syncHandler) {
|
|
await syncHandler.sync(this.syncConfig, this.context);
|
|
} else {
|
|
await this.defaultSyncHandler.sync(this.syncConfig, this.context);
|
|
}
|
|
}
|
|
await this.showResult();
|
|
}
|
|
|
|
async showResult() {
|
|
const {syncStatusHolder} = this.context;
|
|
const {syncStatus} = syncStatusHolder;
|
|
const {statusHandleMap} = syncStatus;
|
|
const {syncResultMap} = syncStatus;
|
|
let summary:string
|
|
= `${i18nHelper.getMessage('110053', i18nHelper.getMessage('110050'), i18nHelper.getMessage('110051'), i18nHelper.getMessage('110052'))}
|
|
|-----|----|----------------------------------|
|
|
`;
|
|
summary += `${i18nHelper.getMessage('110053', i18nHelper.getMessage('syncall'), syncStatus.getTotal(), i18nHelper.getMessage('syncall_desc'))}
|
|
`;
|
|
for (const [key, value] of statusHandleMap) {
|
|
// @ts-ignore
|
|
summary+= `${i18nHelper.getMessage('110053', i18nHelper.getMessage(key), value, i18nHelper.getMessage(key + '_desc'))}
|
|
`;
|
|
}
|
|
summary += `${i18nHelper.getMessage('110053', i18nHelper.getMessage('notsync'), syncStatus.getTotal()-syncStatus.getHasHandle(), i18nHelper.getMessage('notsync_desc'))}
|
|
`;
|
|
let details:string = '';
|
|
for (const [key, value] of syncResultMap) {
|
|
if (value.status == 'unHandle') {
|
|
// @ts-ignore
|
|
details+= `${value.id}- ${value.title} : ${i18nHelper.getMessage(value.status)}
|
|
`;
|
|
}else {
|
|
// @ts-ignore
|
|
details+= `${value.id}-[[${value.title}]]: ${i18nHelper.getMessage(value.status)}
|
|
`;
|
|
}
|
|
|
|
}
|
|
const result : string = i18nHelper.getMessage('110037', summary, details);
|
|
const resultFileName = `${i18nHelper.getMessage('110038')}_${moment(new Date()).format('YYYYMMDDHHmmss')}`
|
|
await this.plugin.fileHandler.createNewNoteWithData(`${this.syncConfig.dataFilePath}/${resultFileName}`, result, true);
|
|
}
|
|
}
|