use loglevel everywhere
This commit is contained in:
parent
3b195f33c8
commit
8671ba4660
|
@ -12,64 +12,64 @@ No professional designers are here. Thus the following steps involve many progra
|
|||
|
||||
1. use excalidraw and export png and svg.
|
||||
|
||||
```bash
|
||||
# results
|
||||
logo.excalidraw
|
||||
logo.png
|
||||
logo.svg
|
||||
```
|
||||
```bash
|
||||
# results
|
||||
logo.excalidraw
|
||||
logo.png
|
||||
logo.svg
|
||||
```
|
||||
|
||||
2. manually edit the `logo.svg` and make background transparent.
|
||||
|
||||
```bash
|
||||
# results
|
||||
logo-transparent.svg
|
||||
```
|
||||
```bash
|
||||
# results
|
||||
logo-transparent.svg
|
||||
```
|
||||
|
||||
3. use python library [`svgutils`](https://github.com/btel/svg_utils) to make a strictly square figure. The [doc](https://svgutils.readthedocs.io/en/latest/tutorials/composing_multipanel_figures.html) is very useful.
|
||||
|
||||
```python
|
||||
from svgutils.compose import *
|
||||
def get_standard_300x300(file_name):
|
||||
fig = Figure(300, 300,
|
||||
Panel(
|
||||
SVG(file_name),
|
||||
).move(-3, 12),
|
||||
)
|
||||
return fig
|
||||
```python
|
||||
from svgutils.compose import *
|
||||
def get_standard_300x300(file_name):
|
||||
fig = Figure(300, 300,
|
||||
Panel(
|
||||
SVG(file_name),
|
||||
).move(-3, 12),
|
||||
)
|
||||
return fig
|
||||
|
||||
get_standard_300x300('logo-transparent.svg').save('300x300.svg')
|
||||
get_standard_300x300('logo-transparent.svg').save('300x300.svg')
|
||||
|
||||
# def get_other_size_from_standard(file_name, px):
|
||||
# fig = Figure(px, px,
|
||||
# Panel(
|
||||
# SVG(file_name).scale(px/300.0),
|
||||
# ).move(-3*px/300.0, 12*px/300.0),
|
||||
# )
|
||||
# return fig
|
||||
# def get_other_size_from_standard(file_name, px):
|
||||
# fig = Figure(px, px,
|
||||
# Panel(
|
||||
# SVG(file_name).scale(px/300.0),
|
||||
# ).move(-3*px/300.0, 12*px/300.0),
|
||||
# )
|
||||
# return fig
|
||||
|
||||
# get_other_size_from_standard('logo.svg',256).save('256x256.svg')
|
||||
```
|
||||
# get_other_size_from_standard('logo.svg',256).save('256x256.svg')
|
||||
```
|
||||
|
||||
```bash
|
||||
# results
|
||||
300x300.svg
|
||||
```
|
||||
```bash
|
||||
# results
|
||||
300x300.svg
|
||||
```
|
||||
|
||||
4. use `inkscape` command line to get different sizes' `.png` files.
|
||||
|
||||
```bash
|
||||
inkscape 300x300.svg -o 300x300.png
|
||||
```bash
|
||||
inkscape 300x300.svg -o 300x300.png
|
||||
|
||||
inkscape 300x300.svg -o 50x50.png -w 50 -h 50
|
||||
|
||||
inkscape 300x300.svg -o 64x64.png -w 64 -h 64
|
||||
inkscape 300x300.svg -o 256x256.png -w 256 -h 256
|
||||
```
|
||||
inkscape 300x300.svg -o 50x50.png -w 50 -h 50
|
||||
|
||||
```bash
|
||||
# results
|
||||
50x50.png
|
||||
64x64.png
|
||||
256x256.png
|
||||
```
|
||||
inkscape 300x300.svg -o 64x64.png -w 64 -h 64
|
||||
inkscape 300x300.svg -o 256x256.png -w 256 -h 256
|
||||
```
|
||||
|
||||
```bash
|
||||
# results
|
||||
50x50.png
|
||||
64x64.png
|
||||
256x256.png
|
||||
```
|
||||
|
|
|
@ -62,6 +62,7 @@
|
|||
"dropbox": "^10.22.0",
|
||||
"localforage": "^1.10.0",
|
||||
"lodash": "^4.17.21",
|
||||
"loglevel": "^1.8.0",
|
||||
"mime-types": "^2.1.33",
|
||||
"obsidian": "^0.12.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
|
|
|
@ -52,6 +52,7 @@ export interface RemotelySavePluginSettings {
|
|||
onedrive: OnedriveConfig;
|
||||
password: string;
|
||||
serviceType: SUPPORTED_SERVICES_TYPE;
|
||||
currLogLevel?: string;
|
||||
}
|
||||
|
||||
export interface RemoteItem {
|
||||
|
|
|
@ -5,11 +5,14 @@ import { readAllSyncPlanRecordTexts } from "./localdb";
|
|||
import type { InternalDBs } from "./localdb";
|
||||
import { mkdirpInVault } from "./misc";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
const DEFAULT_DEBUG_FOLDER = "_debug_remotely_save/";
|
||||
const DEFAULT_SYNC_PLANS_HISTORY_FILE_PREFIX = "sync_plans_hist_exported_on_";
|
||||
|
||||
export const exportSyncPlansToFiles = async (db: InternalDBs, vault: Vault) => {
|
||||
console.log("exporting");
|
||||
log.info("exporting");
|
||||
await mkdirpInVault(DEFAULT_DEBUG_FOLDER, vault);
|
||||
const records = await readAllSyncPlanRecordTexts(db);
|
||||
let md = "";
|
||||
|
@ -25,5 +28,5 @@ export const exportSyncPlansToFiles = async (db: InternalDBs, vault: Vault) => {
|
|||
await vault.create(filePath, md, {
|
||||
mtime: ts,
|
||||
});
|
||||
console.log("finish exporting");
|
||||
log.info("finish exporting");
|
||||
};
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
import { base32, base64url } from "rfc4648";
|
||||
import { bufferToArrayBuffer, hexStringToTypedArray } from "./misc";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
const DEFAULT_ITER = 20000;
|
||||
|
||||
// base32.stringify(Buffer.from('Salted__'))
|
||||
|
|
|
@ -7,6 +7,9 @@ import {
|
|||
RemotelySavePluginSettings,
|
||||
} from "./baseTypes";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
export const exportQrCodeUri = async (
|
||||
settings: RemotelySavePluginSettings,
|
||||
currentVaultName: string,
|
||||
|
@ -19,7 +22,7 @@ export const exportQrCodeUri = async (
|
|||
const vault = encodeURIComponent(currentVaultName);
|
||||
const version = encodeURIComponent(pluginVersion);
|
||||
const rawUri = `obsidian://${COMMAND_URI}?func=settings&version=${version}&vault=${vault}&data=${data}`;
|
||||
// console.log(uri)
|
||||
// log.info(uri)
|
||||
const imgUri = await QRCode.toDataURL(rawUri);
|
||||
return {
|
||||
rawUri,
|
||||
|
|
|
@ -6,6 +6,9 @@ import type { SyncPlanType } from "./sync";
|
|||
|
||||
export type LocalForage = typeof localforage;
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
export const DEFAULT_DB_VERSION_NUMBER: number = 20211114;
|
||||
export const DEFAULT_DB_NAME = "remotelysavedb";
|
||||
export const DEFAULT_TBL_VERSION = "schemaversion";
|
||||
|
@ -78,7 +81,7 @@ export const prepareDBs = async () => {
|
|||
await migrateDBs(db, originalVersion, DEFAULT_DB_VERSION_NUMBER);
|
||||
}
|
||||
|
||||
console.log("db connected");
|
||||
log.info("db connected");
|
||||
return db;
|
||||
};
|
||||
|
||||
|
@ -86,10 +89,10 @@ export const destroyDBs = async () => {
|
|||
// await localforage.dropInstance({
|
||||
// name: DEFAULT_DB_NAME,
|
||||
// });
|
||||
// console.log("db deleted");
|
||||
// log.info("db deleted");
|
||||
const req = indexedDB.deleteDatabase(DEFAULT_DB_NAME);
|
||||
req.onsuccess = (event) => {
|
||||
console.log("db deleted");
|
||||
log.info("db deleted");
|
||||
};
|
||||
req.onblocked = (event) => {
|
||||
console.warn("trying to delete db but it was blocked");
|
||||
|
@ -128,7 +131,7 @@ export const insertDeleteRecord = async (
|
|||
db: InternalDBs,
|
||||
fileOrFolder: TAbstractFile
|
||||
) => {
|
||||
// console.log(fileOrFolder);
|
||||
// log.info(fileOrFolder);
|
||||
let k: FileFolderHistoryRecord;
|
||||
if (fileOrFolder instanceof TFile) {
|
||||
k = {
|
||||
|
@ -165,7 +168,7 @@ export const insertRenameRecord = async (
|
|||
fileOrFolder: TAbstractFile,
|
||||
oldPath: string
|
||||
) => {
|
||||
// console.log(fileOrFolder);
|
||||
// log.info(fileOrFolder);
|
||||
let k: FileFolderHistoryRecord;
|
||||
if (fileOrFolder instanceof TFile) {
|
||||
k = {
|
||||
|
|
32
src/main.ts
32
src/main.ts
|
@ -35,6 +35,9 @@ import { RemotelySaveSettingTab } from "./settings";
|
|||
import type { SyncStatusType } from "./sync";
|
||||
import { doActualSync, getSyncPlan, isPasswordOk } from "./sync";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
const DEFAULT_SETTINGS: RemotelySavePluginSettings = {
|
||||
s3: DEFAULT_S3_CONFIG,
|
||||
webdav: DEFAULT_WEBDAV_CONFIG,
|
||||
|
@ -42,6 +45,7 @@ const DEFAULT_SETTINGS: RemotelySavePluginSettings = {
|
|||
onedrive: DEFAULT_ONEDRIVE_CONFIG,
|
||||
password: "",
|
||||
serviceType: "s3",
|
||||
currLogLevel: "info",
|
||||
};
|
||||
|
||||
interface OAuth2Info {
|
||||
|
@ -58,9 +62,10 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
db: InternalDBs;
|
||||
syncStatus: SyncStatusType;
|
||||
oauth2Info: OAuth2Info;
|
||||
currLogLevel: string;
|
||||
|
||||
async onload() {
|
||||
console.log(`loading plugin ${this.manifest.id}`);
|
||||
log.info(`loading plugin ${this.manifest.id}`);
|
||||
|
||||
this.oauth2Info = {
|
||||
verifier: "",
|
||||
|
@ -71,6 +76,11 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
}; // init
|
||||
|
||||
await this.loadSettings();
|
||||
|
||||
if (this.settings.currLogLevel !== undefined) {
|
||||
log.setLevel(this.settings.currLogLevel as any);
|
||||
}
|
||||
|
||||
await this.checkIfOauthExpires();
|
||||
|
||||
await this.prepareDB();
|
||||
|
@ -275,7 +285,7 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
}
|
||||
|
||||
try {
|
||||
//console.log(`huh ${this.settings.password}`)
|
||||
//log.info(`huh ${this.settings.password}`)
|
||||
new Notice(
|
||||
`1/7 Remotely Save Sync Preparing (${this.settings.serviceType})`
|
||||
);
|
||||
|
@ -294,14 +304,14 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
() => self.saveSettings()
|
||||
);
|
||||
const remoteRsp = await client.listFromRemote();
|
||||
// console.log(remoteRsp);
|
||||
// log.info(remoteRsp);
|
||||
|
||||
new Notice("3/7 Starting to fetch local meta data.");
|
||||
this.syncStatus = "getting_local_meta";
|
||||
const local = this.app.vault.getAllLoadedFiles();
|
||||
const localHistory = await loadDeleteRenameHistoryTable(this.db);
|
||||
// console.log(local);
|
||||
// console.log(localHistory);
|
||||
// log.info(local);
|
||||
// log.info(localHistory);
|
||||
|
||||
new Notice("4/7 Checking password correct or not.");
|
||||
this.syncStatus = "checking_password";
|
||||
|
@ -324,7 +334,7 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
client.serviceType,
|
||||
this.settings.password
|
||||
);
|
||||
console.log(syncPlan.mixedStates); // for debugging
|
||||
log.info(syncPlan.mixedStates); // for debugging
|
||||
await insertSyncPlanRecord(this.db, syncPlan);
|
||||
|
||||
// The operations above are read only and kind of safe.
|
||||
|
@ -346,8 +356,8 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
this.syncStatus = "idle";
|
||||
} catch (error) {
|
||||
const msg = `Remotely Save error while ${this.syncStatus}`;
|
||||
console.log(msg);
|
||||
console.log(error);
|
||||
log.info(msg);
|
||||
log.info(error);
|
||||
new Notice(msg);
|
||||
new Notice(error.message);
|
||||
this.syncStatus = "idle";
|
||||
|
@ -357,16 +367,16 @@ export default class RemotelySavePlugin extends Plugin {
|
|||
this.addSettingTab(new RemotelySaveSettingTab(this.app, this));
|
||||
|
||||
// this.registerDomEvent(document, "click", (evt: MouseEvent) => {
|
||||
// console.log("click", evt);
|
||||
// log.info("click", evt);
|
||||
// });
|
||||
|
||||
// this.registerInterval(
|
||||
// window.setInterval(() => console.log("setInterval"), 5 * 60 * 1000)
|
||||
// window.setInterval(() => log.info("setInterval"), 5 * 60 * 1000)
|
||||
// );
|
||||
}
|
||||
|
||||
onunload() {
|
||||
console.log(`unloading plugin ${this.manifest.id}`);
|
||||
log.info(`unloading plugin ${this.manifest.id}`);
|
||||
this.destroyDBs();
|
||||
}
|
||||
|
||||
|
|
13
src/misc.ts
13
src/misc.ts
|
@ -4,6 +4,9 @@ import * as path from "path";
|
|||
import { base32, base64url } from "rfc4648";
|
||||
import XRegExp from "xregexp";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
/**
|
||||
* If any part of the file starts with '.' or '_' then it's a hidden file.
|
||||
* @param item
|
||||
|
@ -13,7 +16,7 @@ import XRegExp from "xregexp";
|
|||
export const isHiddenPath = (item: string, loose: boolean = true) => {
|
||||
const k = path.posix.normalize(item); // TODO: only unix path now
|
||||
const k2 = k.split("/"); // TODO: only unix path now
|
||||
// console.log(k2)
|
||||
// log.info(k2)
|
||||
for (const singlePart of k2) {
|
||||
if (singlePart === "." || singlePart === ".." || singlePart === "") {
|
||||
continue;
|
||||
|
@ -54,14 +57,14 @@ export const getFolderLevels = (x: string) => {
|
|||
};
|
||||
|
||||
export const mkdirpInVault = async (thePath: string, vault: Vault) => {
|
||||
// console.log(thePath);
|
||||
// log.info(thePath);
|
||||
const foldersToBuild = getFolderLevels(thePath);
|
||||
// console.log(foldersToBuild);
|
||||
// log.info(foldersToBuild);
|
||||
for (const folder of foldersToBuild) {
|
||||
const r = await vault.adapter.exists(folder);
|
||||
// console.log(r);
|
||||
// log.info(r);
|
||||
if (!r) {
|
||||
console.log(`mkdir ${folder}`);
|
||||
log.info(`mkdir ${folder}`);
|
||||
await vault.adapter.mkdir(folder);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,9 @@ import * as onedrive from "./remoteForOnedrive";
|
|||
import * as s3 from "./remoteForS3";
|
||||
import * as webdav from "./remoteForWebdav";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
export class RemoteClient {
|
||||
readonly serviceType: SUPPORTED_SERVICES_TYPE;
|
||||
readonly s3Client?: s3.S3Client;
|
||||
|
|
|
@ -12,6 +12,9 @@ import { bufferToArrayBuffer, getFolderLevels, mkdirpInVault } from "./misc";
|
|||
|
||||
export { Dropbox } from "dropbox";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
export const DEFAULT_DROPBOX_CONFIG: DropboxConfig = {
|
||||
accessToken: "",
|
||||
clientID: process.env.DEFAULT_DROPBOX_APP_KEY,
|
||||
|
@ -208,7 +211,7 @@ export const sendRefreshTokenReq = async (
|
|||
appKey: string,
|
||||
refreshToken: string
|
||||
) => {
|
||||
console.log("start auto getting refreshed Dropbox access token.");
|
||||
log.info("start auto getting refreshed Dropbox access token.");
|
||||
const resp1 = await fetch("https://api.dropboxapi.com/oauth2/token", {
|
||||
method: "POST",
|
||||
body: new URLSearchParams({
|
||||
|
@ -218,7 +221,7 @@ export const sendRefreshTokenReq = async (
|
|||
}),
|
||||
});
|
||||
const resp2 = (await resp1.json()) as DropboxSuccessAuthRes;
|
||||
console.log("finish auto getting refreshed Dropbox access token.");
|
||||
log.info("finish auto getting refreshed Dropbox access token.");
|
||||
return resp2;
|
||||
};
|
||||
|
||||
|
@ -227,7 +230,7 @@ export const setConfigBySuccessfullAuthInplace = async (
|
|||
authRes: DropboxSuccessAuthRes,
|
||||
saveUpdatedConfigFunc: () => Promise<any> | undefined
|
||||
) => {
|
||||
console.log("start updating local info of Dropbox token");
|
||||
log.info("start updating local info of Dropbox token");
|
||||
|
||||
config.accessToken = authRes.access_token;
|
||||
config.accessTokenExpiresInSeconds = parseInt(authRes.expires_in);
|
||||
|
@ -249,7 +252,7 @@ export const setConfigBySuccessfullAuthInplace = async (
|
|||
await saveUpdatedConfigFunc();
|
||||
}
|
||||
|
||||
console.log("finish updating local info of Dropbox token");
|
||||
log.info("finish updating local info of Dropbox token");
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -308,9 +311,9 @@ export class WrappedDropboxClient {
|
|||
}
|
||||
|
||||
// check vault folder
|
||||
// console.log(`checking remote has folder /${this.vaultName}`);
|
||||
// log.info(`checking remote has folder /${this.vaultName}`);
|
||||
if (this.vaultFolderExists) {
|
||||
// console.log(`already checked, /${this.vaultName} exist before`)
|
||||
// log.info(`already checked, /${this.vaultName} exist before`)
|
||||
} else {
|
||||
const res = await this.dropbox.filesListFolder({
|
||||
path: "",
|
||||
|
@ -323,14 +326,14 @@ export class WrappedDropboxClient {
|
|||
}
|
||||
}
|
||||
if (!this.vaultFolderExists) {
|
||||
console.log(`remote does not have folder /${this.vaultName}`);
|
||||
log.info(`remote does not have folder /${this.vaultName}`);
|
||||
await this.dropbox.filesCreateFolderV2({
|
||||
path: `/${this.vaultName}`,
|
||||
});
|
||||
console.log(`remote folder /${this.vaultName} created`);
|
||||
log.info(`remote folder /${this.vaultName} created`);
|
||||
this.vaultFolderExists = true;
|
||||
} else {
|
||||
// console.log(`remote folder /${this.vaultName} exists`);
|
||||
// log.info(`remote folder /${this.vaultName} exists`);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -489,7 +492,7 @@ export const listFromRemote = async (
|
|||
if (res.status !== 200) {
|
||||
throw Error(JSON.stringify(res));
|
||||
}
|
||||
// console.log(res);
|
||||
// log.info(res);
|
||||
|
||||
const contents = res.result.entries;
|
||||
const unifiedContents = contents
|
||||
|
|
|
@ -28,6 +28,9 @@ import {
|
|||
mkdirpInVault,
|
||||
} from "./misc";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
const SCOPES = ["User.Read", "Files.ReadWrite.AppFolder", "offline_access"];
|
||||
const REDIRECT_URI = `obsidian://${COMMAND_CALLBACK_ONEDRIVE}`;
|
||||
|
||||
|
@ -117,8 +120,8 @@ export const sendAuthReq = async (
|
|||
// code: authCode,
|
||||
// codeVerifier: verifier, // PKCE Code Verifier
|
||||
// });
|
||||
// console.log('authResponse')
|
||||
// console.log(authResponse)
|
||||
// log.info('authResponse')
|
||||
// log.info(authResponse)
|
||||
// return authResponse;
|
||||
|
||||
// Because of the CORS problem,
|
||||
|
@ -142,7 +145,7 @@ export const sendAuthReq = async (
|
|||
});
|
||||
|
||||
const rsp2 = JSON.parse(rsp1);
|
||||
// console.log(rsp2);
|
||||
// log.info(rsp2);
|
||||
|
||||
if (rsp2.error !== undefined) {
|
||||
return rsp2 as AccessCodeResponseFailedType;
|
||||
|
@ -171,7 +174,7 @@ export const sendRefreshTokenReq = async (
|
|||
});
|
||||
|
||||
const rsp2 = JSON.parse(rsp1);
|
||||
// console.log(rsp2);
|
||||
// log.info(rsp2);
|
||||
|
||||
if (rsp2.error !== undefined) {
|
||||
return rsp2 as AccessCodeResponseFailedType;
|
||||
|
@ -185,7 +188,7 @@ export const setConfigBySuccessfullAuthInplace = async (
|
|||
authRes: AccessCodeResponseSuccessfulType,
|
||||
saveUpdatedConfigFunc: () => Promise<any> | undefined
|
||||
) => {
|
||||
console.log("start updating local info of OneDrive token");
|
||||
log.info("start updating local info of OneDrive token");
|
||||
config.accessToken = authRes.access_token;
|
||||
config.accessTokenExpiresAtTime =
|
||||
Date.now() + authRes.expires_in - 5 * 60 * 1000;
|
||||
|
@ -200,7 +203,7 @@ export const setConfigBySuccessfullAuthInplace = async (
|
|||
await saveUpdatedConfigFunc();
|
||||
}
|
||||
|
||||
console.log("finish updating local info of Onedrive token");
|
||||
log.info("finish updating local info of Onedrive token");
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -352,7 +355,7 @@ class MyAuthProvider implements AuthenticationProvider {
|
|||
this.onedriveConfig.accessTokenExpiresAtTime =
|
||||
currentTs + r2.expires_in * 1000 - 60 * 2 * 1000;
|
||||
await this.saveUpdatedConfigFunc();
|
||||
console.log("Onedrive accessToken updated");
|
||||
log.info("Onedrive accessToken updated");
|
||||
return this.onedriveConfig.accessToken;
|
||||
}
|
||||
};
|
||||
|
@ -388,26 +391,26 @@ export class WrappedOnedriveClient {
|
|||
}
|
||||
|
||||
// check vault folder
|
||||
// console.log(`checking remote has folder /${this.vaultName}`);
|
||||
// log.info(`checking remote has folder /${this.vaultName}`);
|
||||
if (this.vaultFolderExists) {
|
||||
// console.log(`already checked, /${this.vaultName} exist before`)
|
||||
// log.info(`already checked, /${this.vaultName} exist before`)
|
||||
} else {
|
||||
const k = await this.client.api("/drive/special/approot/children").get();
|
||||
// console.log(k);
|
||||
// log.info(k);
|
||||
this.vaultFolderExists =
|
||||
(k.value as DriveItem[]).filter((x) => x.name === this.vaultName)
|
||||
.length > 0;
|
||||
if (!this.vaultFolderExists) {
|
||||
console.log(`remote does not have folder /${this.vaultName}`);
|
||||
log.info(`remote does not have folder /${this.vaultName}`);
|
||||
await this.client.api("/drive/special/approot/children").post({
|
||||
name: `${this.vaultName}`,
|
||||
folder: {},
|
||||
"@microsoft.graph.conflictBehavior": "replace",
|
||||
});
|
||||
console.log(`remote folder /${this.vaultName} created`);
|
||||
log.info(`remote folder /${this.vaultName} created`);
|
||||
this.vaultFolderExists = true;
|
||||
} else {
|
||||
// console.log(`remote folder /${this.vaultName} exists`);
|
||||
// log.info(`remote folder /${this.vaultName} exists`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -479,15 +482,15 @@ export const getRemoteMeta = async (
|
|||
) => {
|
||||
await client.init();
|
||||
const remotePath = getOnedrivePath(fileOrFolderPath, client.vaultName);
|
||||
// console.log(`remotePath=${remotePath}`);
|
||||
// log.info(`remotePath=${remotePath}`);
|
||||
const rsp = await client.client
|
||||
.api(remotePath)
|
||||
.select("cTag,eTag,fileSystemInfo,folder,file,name,parentReference,size")
|
||||
.get();
|
||||
// console.log(rsp);
|
||||
// log.info(rsp);
|
||||
const driveItem = rsp as DriveItem;
|
||||
const res = fromDriveItemToRemoteItem(driveItem, client.vaultName);
|
||||
// console.log(res);
|
||||
// log.info(res);
|
||||
return res;
|
||||
};
|
||||
|
||||
|
@ -507,7 +510,7 @@ export const uploadToRemote = async (
|
|||
uploadFile = remoteEncryptedKey;
|
||||
}
|
||||
uploadFile = getOnedrivePath(uploadFile, client.vaultName);
|
||||
// console.log(`uploadFile=${uploadFile}`);
|
||||
// log.info(`uploadFile=${uploadFile}`);
|
||||
|
||||
const isFolder = fileOrFolderPath.endsWith("/");
|
||||
|
||||
|
@ -567,7 +570,7 @@ export const uploadToRemote = async (
|
|||
uploadEventHandlers: {
|
||||
progress: (range?: Range) => {
|
||||
// Handle progress event
|
||||
// console.log(
|
||||
// log.info(
|
||||
// `uploading ${range.minValue}-${range.maxValue} of ${fileOrFolderPath}`
|
||||
// );
|
||||
},
|
||||
|
@ -575,7 +578,7 @@ export const uploadToRemote = async (
|
|||
} as LargeFileUploadTaskOptions
|
||||
);
|
||||
const uploadResult: UploadResult = await task.upload();
|
||||
// console.log(uploadResult)
|
||||
// log.info(uploadResult)
|
||||
const res = await getRemoteMeta(client, uploadFile);
|
||||
return res;
|
||||
}
|
||||
|
@ -594,7 +597,7 @@ export const uploadToRemote = async (
|
|||
// so use LargeFileUploadTask instead of OneDriveLargeFileUploadTask
|
||||
const progress = (range?: Range) => {
|
||||
// Handle progress event
|
||||
// console.log(
|
||||
// log.info(
|
||||
// `uploading ${range.minValue}-${range.maxValue} of ${fileOrFolderPath}`
|
||||
// );
|
||||
};
|
||||
|
@ -631,7 +634,7 @@ export const uploadToRemote = async (
|
|||
options
|
||||
);
|
||||
const uploadResult: UploadResult = await task.upload();
|
||||
// console.log(uploadResult)
|
||||
// log.info(uploadResult)
|
||||
const res = await getRemoteMeta(client, uploadFile);
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,9 @@ import {
|
|||
|
||||
export { S3Client } from "@aws-sdk/client-s3";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
export const DEFAULT_S3_CONFIG = {
|
||||
s3Endpoint: "",
|
||||
s3Region: "",
|
||||
|
@ -150,7 +153,7 @@ export const uploadToRemote = async (
|
|||
},
|
||||
});
|
||||
upload.on("httpUploadProgress", (progress) => {
|
||||
// console.log(progress);
|
||||
// log.info(progress);
|
||||
});
|
||||
await upload.done();
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@ import { decryptArrayBuffer, encryptArrayBuffer } from "./encrypt";
|
|||
import { bufferToArrayBuffer, getPathFolder, mkdirpInVault } from "./misc";
|
||||
export type { WebDAVClient } from "webdav/web";
|
||||
|
||||
import * as origLog from "loglevel";
|
||||
const log = origLog.getLogger("rs-default");
|
||||
|
||||
export const DEFAULT_WEBDAV_CONFIG = {
|
||||
address: "",
|
||||
username: "",
|
||||
|
@ -82,7 +85,7 @@ export class WrappedWebdavClient {
|
|||
: AuthType.Password,
|
||||
});
|
||||
} else {
|
||||
console.log("no password");
|
||||
log.info("no password");
|
||||
this.client = createClient(this.webdavConfig.address);
|
||||
}
|
||||
}
|
||||
|
@ -93,12 +96,12 @@ export class WrappedWebdavClient {
|
|||
} else {
|
||||
const res = await this.client.exists(`/${this.vaultName}`);
|
||||
if (res) {
|
||||
// console.log("remote vault folder exits!");
|
||||
// log.info("remote vault folder exits!");
|
||||
this.vaultFolderExists = true;
|
||||
} else {
|
||||
console.log("remote vault folder not exists, creating");
|
||||
log.info("remote vault folder not exists, creating");
|
||||
await this.client.createDirectory(`/${this.vaultName}`);
|
||||
console.log("remote vault folder created!");
|
||||
log.info("remote vault folder created!");
|
||||
this.vaultFolderExists = true;
|
||||
}
|
||||
}
|
||||
|
@ -118,7 +121,7 @@ export const getRemoteMeta = async (
|
|||
) => {
|
||||
await client.init();
|
||||
const remotePath = getWebdavPath(fileOrFolderPath, client.vaultName);
|
||||
// console.log(`remotePath = ${remotePath}`);
|
||||
// log.info(`remotePath = ${remotePath}`);
|
||||
const res = (await client.client.stat(remotePath, {
|
||||
details: false,
|
||||
})) as FileStat;
|
||||
|
@ -158,7 +161,7 @@ export const uploadToRemote = async (
|
|||
await client.client.putFileContents(uploadFile, "", {
|
||||
overwrite: true,
|
||||
onUploadProgress: (progress) => {
|
||||
// console.log(`Uploaded ${progress.loaded} bytes of ${progress.total}`);
|
||||
// log.info(`Uploaded ${progress.loaded} bytes of ${progress.total}`);
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -180,7 +183,7 @@ export const uploadToRemote = async (
|
|||
await client.client.putFileContents(uploadFile, remoteContent, {
|
||||
overwrite: true,
|
||||
onUploadProgress: (progress) => {
|
||||
console.log(`Uploaded ${progress.loaded} bytes of ${progress.total}`);
|
||||
log.info(`Uploaded ${progress.loaded} bytes of ${progress.total}`);
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -282,10 +285,10 @@ export const deleteFromRemote = async (
|
|||
await client.init();
|
||||
try {
|
||||
await client.client.deleteFile(remoteFileName);
|
||||
// console.log(`delete ${remoteFileName} succeeded`);
|
||||
// log.info(`delete ${remoteFileName} succeeded`);
|
||||
} catch (err) {
|
||||
console.error("some error while deleting");
|
||||
console.log(err);
|
||||
log.info(err);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -20,6 +20,9 @@ import {
|
|||
getAuthUrlAndVerifier as getAuthUrlAndVerifierOnedrive,
|
||||
} from "./remoteForOnedrive";
|
||||
|
||||
import * as origLog from 'loglevel';
|
||||
const log = origLog.getLogger('rs-default');
|
||||
|
||||
class PasswordModal extends Modal {
|
||||
plugin: RemotelySavePlugin;
|
||||
newPassword: string;
|
||||
|
|
|
@ -582,7 +582,7 @@ export const doActualSync = async (
|
|||
password,
|
||||
foldersCreatedBefore
|
||||
);
|
||||
// console.log(`finished ${k}, with ${setToString(foldersCreatedBefore)}`);
|
||||
// log.info(`finished ${k}, with ${setToString(foldersCreatedBefore)}`);
|
||||
}
|
||||
// await Promise.all(
|
||||
// Object.entries(keyStates)
|
||||
|
|
Loading…
Reference in New Issue