From 9cd2e25578a5a574544644c1233590e1c381652e Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 17 Sep 2021 09:28:35 -0500 Subject: [PATCH] Cherry pick the blocklist owner check Cherry pick the Google Drive file deletion fix --- wowup-electron/app/file.utils.ts | 37 ++++++++++++++++++- wowup-electron/app/ipc-events.ts | 8 +--- wowup-electron/package.json | 2 +- .../addon-providers/curse-addon-provider.ts | 5 +++ .../app/services/wowup/patch-notes.service.ts | 11 ++++++ 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/wowup-electron/app/file.utils.ts b/wowup-electron/app/file.utils.ts index 085d07d6..89a354eb 100644 --- a/wowup-electron/app/file.utils.ts +++ b/wowup-electron/app/file.utils.ts @@ -1,6 +1,11 @@ +import { exec } from "child_process"; +import * as log from "electron-log"; import * as fs from "fs-extra"; -import * as path from "path"; +import * as fsp from "fs/promises"; import { max } from "lodash"; +import * as path from "path"; + +import { isWin } from "./platform"; export async function readDirRecursive(sourcePath: string): Promise { const dirFiles: string[] = []; @@ -30,3 +35,33 @@ export async function getLastModifiedFileDate(sourcePath: string): Promise { + const stat = await fsp.stat(path); + if (stat.isDirectory()) { + await rmdir(path); + } else { + await fsp.unlink(path); + } +} + +/** + * On Windows, users that use the Google Drive sync tool are unable to delete any folders. + * Seems to be a node issue that it cannot delete even empty folders synced by this tool. + * However, if you use CMD to delete the folder it works fine? + */ +async function rmdir(path: string): Promise { + if (isWin) { + await new Promise((resolve, reject) => { + exec(`rmdir "${path}" /s /q`, (err, stdout, stderr) => { + if (err || stdout.length || stderr.length) { + log.error("rmdir fallback failed", err, stdout, stderr); + return reject(new Error("rmdir fallback failed")); + } + resolve(undefined); + }); + }); + } else { + await fsp.rm(path, { recursive: true, force: true }); + } +} diff --git a/wowup-electron/app/ipc-events.ts b/wowup-electron/app/ipc-events.ts index 2cb766ec..062b9a10 100644 --- a/wowup-electron/app/ipc-events.ts +++ b/wowup-electron/app/ipc-events.ts @@ -80,7 +80,7 @@ import { RendererChannels } from "../src/common/wowup"; import { MenuConfig, SystemTrayConfig, WowUpScanResult } from "../src/common/wowup/models"; import { createAppMenu } from "./app-menu"; import { CurseFolderScanner } from "./curse-folder-scanner"; -import { getLastModifiedFileDate } from "./file.utils"; +import { getLastModifiedFileDate, remove } from "./file.utils"; import { addonStore } from "./stores"; import { createTray, restoreWindow } from "./system-tray"; import { WowUpFolderScanner } from "./wowup-folder-scanner"; @@ -359,11 +359,7 @@ export function initializeIpcHandlers(window: BrowserWindow, userAgent: string): handle(IPC_DELETE_DIRECTORY_CHANNEL, async (evt, filePath: string) => { log.info(`[FileRemove] ${filePath}`); - return new Promise((resolve, reject) => { - fs.remove(filePath, (err) => { - return err ? reject(err) : resolve(true); - }); - }); + return await remove(filePath); }); handle(IPC_READ_FILE_CHANNEL, async (evt, filePath: string) => { diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 0244831d..0852212f 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.4.4", + "version": "2.4.5", "description": "World of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/app/addon-providers/curse-addon-provider.ts b/wowup-electron/src/app/addon-providers/curse-addon-provider.ts index 39407e52..814c4356 100644 --- a/wowup-electron/src/app/addon-providers/curse-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/curse-addon-provider.ts @@ -682,6 +682,11 @@ export class CurseAddonProvider extends AddonProvider { } private async isBlockedAuthor(author: CurseAuthor) { + // It looks like if the author is the owner the titleId is just null + if (author?.projectTitleId !== null && author?.projectTitleTitle !== null) { + return false; + } + try { const blockList = await this._wowupApiService.getBlockList().toPromise(); const blockedAuthorIds = _.map(blockList.curse.authors, (author) => author.authorId); diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index 99bbfbfa..a2a4115d 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -15,6 +15,17 @@ export class PatchNotesService { } const CHANGELOGS: ChangeLog[] = [ + { + Version: "2.4.5", + html: ` +
+

Fixes

+
    +
  • Fix an issue with Google Drive preventing files from being deleted
  • +
  • Fix an issue with checking addon owners against the block list
  • +
+
`, + }, { Version: "2.4.4", html: `