diff --git a/assets/branding/README.md b/assets/branding/README.md index 2d3da34..4fd6509 100644 --- a/assets/branding/README.md +++ b/assets/branding/README.md @@ -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 + ``` diff --git a/package.json b/package.json index 8ce2156..9346af0 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/baseTypes.ts b/src/baseTypes.ts index fc02a0c..2f2ff97 100644 --- a/src/baseTypes.ts +++ b/src/baseTypes.ts @@ -52,6 +52,7 @@ export interface RemotelySavePluginSettings { onedrive: OnedriveConfig; password: string; serviceType: SUPPORTED_SERVICES_TYPE; + currLogLevel?: string; } export interface RemoteItem { diff --git a/src/debugMode.ts b/src/debugMode.ts index d23d0de..b2c08ab 100644 --- a/src/debugMode.ts +++ b/src/debugMode.ts @@ -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"); }; diff --git a/src/encrypt.ts b/src/encrypt.ts index 489ac5a..652f3b2 100644 --- a/src/encrypt.ts +++ b/src/encrypt.ts @@ -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__')) diff --git a/src/importExport.ts b/src/importExport.ts index 6a8727c..de9bbae 100644 --- a/src/importExport.ts +++ b/src/importExport.ts @@ -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, diff --git a/src/localdb.ts b/src/localdb.ts index 95fcbdd..acf7199 100644 --- a/src/localdb.ts +++ b/src/localdb.ts @@ -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 = { diff --git a/src/main.ts b/src/main.ts index 3883aa5..4a90e34 100644 --- a/src/main.ts +++ b/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(); } diff --git a/src/misc.ts b/src/misc.ts index c0537c3..cfc7a08 100644 --- a/src/misc.ts +++ b/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); } } diff --git a/src/remote.ts b/src/remote.ts index 5a1116b..6057bc2 100644 --- a/src/remote.ts +++ b/src/remote.ts @@ -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; diff --git a/src/remoteForDropbox.ts b/src/remoteForDropbox.ts index ce7d9a1..08f7627 100644 --- a/src/remoteForDropbox.ts +++ b/src/remoteForDropbox.ts @@ -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 | 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 diff --git a/src/remoteForOnedrive.ts b/src/remoteForOnedrive.ts index 6896520..7a51ed5 100644 --- a/src/remoteForOnedrive.ts +++ b/src/remoteForOnedrive.ts @@ -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 | 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; } diff --git a/src/remoteForS3.ts b/src/remoteForS3.ts index 21088dc..42c7698 100644 --- a/src/remoteForS3.ts +++ b/src/remoteForS3.ts @@ -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(); diff --git a/src/remoteForWebdav.ts b/src/remoteForWebdav.ts index d88c48d..90482ff 100644 --- a/src/remoteForWebdav.ts +++ b/src/remoteForWebdav.ts @@ -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); } }; diff --git a/src/settings.ts b/src/settings.ts index d15fcae..b4d347d 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -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; diff --git a/src/sync.ts b/src/sync.ts index 051971a..df9edae 100644 --- a/src/sync.ts +++ b/src/sync.ts @@ -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)