Merge remote-tracking branch 'upstream/electron' into feat/addon-released-date

This commit is contained in:
Dean Campbell
2020-10-19 13:44:11 -07:00
15 changed files with 328 additions and 55 deletions

View File

@@ -22,6 +22,7 @@ import {
RENAME_DIRECTORY_CHANNEL,
READ_FILE_CHANNEL,
GET_ASSET_FILE_PATH,
DELETE_FILE_CHANNEL,
} from "./src/common/constants";
import { CurseGetScanResultsRequest } from "./src/common/curse/curse-get-scan-results-request";
import { CurseGetScanResultsResponse } from "./src/common/curse/curse-get-scan-results-response";
@@ -132,13 +133,10 @@ ipcMain.on(LIST_DIRECTORIES_CHANNEL, (evt, arg: ValueRequest<string>) => {
ipcMain.on(PATH_EXISTS_CHANNEL, (evt, arg: ValueRequest<string>) => {
const response: ValueResponse<boolean> = { value: false };
fs.open(arg.value, "r", (err, fid) => {
fs.access(arg.value, (err) => {
if (err) {
if (err.code === "ENOENT") {
response.value = false;
} else {
response.error = err;
}
console.error(err);
response.value = true;
} else {
response.value = true;
}
@@ -243,6 +241,22 @@ ipcMain.on(DELETE_DIRECTORY_CHANNEL, (evt, arg: DeleteDirectoryRequest) => {
});
});
ipcMain.on(DELETE_FILE_CHANNEL, (evt, arg: ValueRequest<string>) => {
console.log("Delete File", arg);
const response: ValueResponse<boolean> = {
value: false,
};
fs.unlink(arg.value, (err) => {
if (err) {
response.error = err;
} else {
response.value = true;
}
evt.reply(arg.responseKey, response);
});
});
ipcMain.on(RENAME_DIRECTORY_CHANNEL, (evt, arg: CopyDirectoryRequest) => {
console.log("Rename Dir", arg);
fs.rename(arg.sourcePath, arg.destinationPath, (err) => {

View File

@@ -1,5 +1,5 @@
<div class="app">
<app-titlebar></app-titlebar>
<app-titlebar *ngIf="showTitleBar"></app-titlebar>
<div class="content">
<router-outlet></router-outlet>
</div>

View File

@@ -20,6 +20,8 @@ const AUTO_UPDATE_PERIOD_MS = 60 * 60 * 1000; // 1 hour
export class AppComponent implements AfterViewInit {
private _autoUpdateInterval?: number;
public showTitleBar: boolean = true;
constructor(
private _analyticsService: AnalyticsService,
private _electronService: ElectronService,
@@ -33,6 +35,8 @@ export class AppComponent implements AfterViewInit {
this.translate.setDefaultLang("en");
this.translate.use(this._electronService.locale);
this.showTitleBar = !this._electronService.isLinux;
}
ngAfterViewInit(): void {

View File

@@ -1,6 +1,7 @@
.addon-detail-view {
width: 35vw;
max-width: 500px;
min-width: 380px;
max-width: 600px;
margin-top: 8px;
.addon-detail-title,

View File

@@ -1,13 +1,24 @@
<mat-bar-button *ngIf="showStatusText === false" (btnClick)="onInstallUpdateClick()" [options]="buttonOptions$ | async"
class="install-button">
</mat-bar-button>
<div class="row">
<div *ngIf="showStatusText === true" class="status-text" [ngClass]="{ 'ignored': listItem.isIgnored }">
{{getStatusText()}}
</div>
<mat-icon *ngIf="this.listItem.isAutoUpdate === true" class="auto-update-icon"
[matTooltip]="'PAGES.MY_ADDONS.TABLE.AUTO_UPDATE_ICON_TOOLTIP' | translate">
update
</mat-icon>
</div>
<mat-bar-button
*ngIf="showStatusText === false"
(btnClick)="onInstallUpdateClick()"
[options]="buttonOptions$ | async"
class="install-button"
>
</mat-bar-button>
<!-- <app-addon-install-button [addon]="listItem.addon" [hideUninstall]="true"> </app-addon-install-button> -->
<div
*ngIf="showStatusText === true"
class="status-text"
[ngClass]="{ ignored: listItem.isIgnored }"
>
{{ getStatusText() }}
</div>
<mat-icon
*ngIf="this.listItem.isAutoUpdate === true"
class="auto-update-icon"
[matTooltip]="'PAGES.MY_ADDONS.TABLE.AUTO_UPDATE_ICON_TOOLTIP' | translate"
>
update
</mat-icon>
</div>

View File

@@ -224,12 +224,20 @@ export class AddonService {
// TODO track error
} finally {
if (fs.existsSync(unzippedDirectory)) {
const unzippedDirectoryExists = await this._fileService.pathExists(
unzippedDirectory
);
const downloadedFilePathExists = await this._fileService.pathExists(
downloadedFilePath
);
if (unzippedDirectoryExists) {
await this._fileService.deleteDirectory(unzippedDirectory);
}
if (fs.existsSync(downloadedFilePath)) {
fs.unlinkSync(downloadedFilePath);
if (downloadedFilePathExists) {
await this._fileService.deleteFile(downloadedFilePath);
}
}

View File

@@ -28,6 +28,7 @@ export class ElectronService {
public readonly windowMinimized$ = this._windowMinimizedSrc.asObservable();
public readonly isWin = process.platform === "win32";
public readonly isMac = process.platform === "darwin";
public readonly isLinux = process.platform === "linux";
get isElectron(): boolean {
return !!(window && window.process && window.process.type);

View File

@@ -2,6 +2,7 @@ import { Injectable } from "@angular/core";
import {
COPY_DIRECTORY_CHANNEL,
DELETE_DIRECTORY_CHANNEL,
DELETE_FILE_CHANNEL,
GET_ASSET_FILE_PATH,
LIST_DIRECTORIES_CHANNEL,
LIST_FILES_CHANNEL,
@@ -53,7 +54,11 @@ export class FileService {
});
}
public pathExists(sourcePath: string) {
public pathExists(sourcePath: string): Promise<boolean> {
if (!sourcePath) {
return Promise.resolve(false);
}
return new Promise((resolve, reject) => {
const eventHandler = (_evt: any, arg: ValueResponse<boolean>) => {
if (arg.error) {
@@ -91,6 +96,25 @@ export class FileService {
});
}
public deleteFile(sourcePath: string): Promise<boolean> {
return new Promise((resolve, reject) => {
const eventHandler = (_evt: any, arg: ValueResponse<boolean>) => {
if (arg.error) {
return reject(arg.error);
}
resolve(arg.value);
};
const request: ValueRequest<string> = {
value: sourcePath,
responseKey: uuidv4(),
};
this._electronService.ipcRenderer.once(request.responseKey, eventHandler);
this._electronService.ipcRenderer.send(DELETE_FILE_CHANNEL, request);
});
}
public copyDirectory(sourcePath: string, destinationPath: string) {
return new Promise((resolve, reject) => {
const eventHandler = (_evt: any, arg: Error) => {
@@ -173,6 +197,14 @@ export class FileService {
});
}
public listEntries(sourcePath: string, filter: string) {
const globFilter = globrex(filter);
return fs
.readdirSync(sourcePath, { withFileTypes: true })
.filter((entry) => !!globFilter.regex.test(entry.name));
}
public listFiles(sourcePath: string, filter: string) {
const globFilter = globrex(filter);

View File

@@ -0,0 +1,25 @@
import { WarcraftServiceImpl } from "./warcraft.service.impl";
import { WowClientType } from "app/models/warcraft/wow-client-type";
export class WarcraftServiceLinux implements WarcraftServiceImpl {
public async getBlizzardAgentPath(): Promise<string> {
return '';
}
public getExecutableName(clientType: WowClientType): string {
switch (clientType) {
case WowClientType.Retail:
return 'Wow.exe';
case WowClientType.Classic:
return 'WowClassic.exe';
case WowClientType.RetailPtr:
return 'WowT.exe';
case WowClientType.ClassicPtr:
return 'WowClassicT.exe';
case WowClientType.Beta:
return 'WowB.exe';
default:
return '';
}
}
}

View File

@@ -10,8 +10,8 @@ import * as fs from "fs";
import { map, filter, delay, switchMap } from "rxjs/operators";
import { WowClientType } from "app/models/warcraft/wow-client-type";
import { StorageService } from "../storage/storage.service";
import log from "electron-log";
import { WarcraftServiceMac } from "./warcraft.service.mac";
import { WarcraftServiceLinux } from "./warcraft.service.linux";
import { AddonFolder } from "app/models/wowup/addon-folder";
import { ElectronService } from "..";
import { TocService } from "../toc/toc.service";
@@ -374,6 +374,10 @@ export class WarcraftService {
return new WarcraftServiceMac();
}
if(this._electronService.isLinux){
return new WarcraftServiceLinux();
}
throw new Error("No warcraft service implementation found");
}
}

View File

@@ -68,6 +68,8 @@ export class WowUpService {
this.applicationVersion = _electronService.remote.app.getVersion();
this.isBetaBuild =
this.applicationVersion.toLowerCase().indexOf("beta") != -1;
this.cleanupDownloads();
}
public get updaterExists() {
@@ -308,4 +310,28 @@ export class WowUpService {
? WowUpReleaseChannelType.Beta
: WowUpReleaseChannelType.Stable;
}
/**
* Clean up lost downloads in the download folder
*/
private async cleanupDownloads() {
const downloadFiles = this._fileService.listEntries(
this.applicationDownloadsFolderPath,
"*"
);
for (let entry of downloadFiles) {
const path = join(this.applicationDownloadsFolderPath, entry.name);
try {
if (entry.isDirectory()) {
await this._fileService.deleteDirectory(path);
} else {
await this._fileService.deleteFile(path);
}
} catch (e) {
console.error("Failed to delete download entry", path);
console.error(e);
}
}
}
}

View File

@@ -3,7 +3,7 @@
"ABOUT": {
"CHANGE_LOG_SECTION_LABEL": "Log ändern",
"TITLE": "WowUp.io",
"WEBSITE_LINK_LABEL": "Schau dir die Webseite an!"
"WEBSITE_LINK_LABEL": "Schau Dir die Webseite an!"
},
"GET_ADDONS": {
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
@@ -15,7 +15,7 @@
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Anbieter",
"STATUS_COLUMN_HEADER": "Status",
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Anzahl Downloads",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
@@ -29,7 +29,7 @@
},
"MY_ADDONS": {
"CHECK_UPDATES_BUTTON": "Updates prüfen",
"CHECK_UPDATES_BUTTON_TOOLTIP": "Nach neuesten Addon-Updates suchen",
"CHECK_UPDATES_BUTTON_TOOLTIP": "Nach neuen Addon-Updates suchen",
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"RESCAN_FOLDERS_BUTTON": "Ordner erneut scannen",
"RESCAN_FOLDERS_BUTTON_TOOLTIP": "Scannen Sie Ihren Client-Ordner nach installierten Addons",
@@ -51,10 +51,10 @@
"IGNORE_ADDON_BUTTON": "Ignorieren",
"AUTO_UPDATE_ADDON_BUTTON": "Automatisches Aktualisieren",
"CHANNEL_SUBMENT_TITLE": "Kanal",
"SHOW_FOLDER": "SHOW_FOLDER",
"SHOW_FOLDER": "Dateiordner anzeigen",
"REINSTALL_ADDON_BUTTON": "Neu installieren",
"REMOVE_ADDON_BUTTON": "Entfernen",
"STABLE_ADDON_CHANNEL": "Stall",
"STABLE_ADDON_CHANNEL": "Stable",
"BETA_ADDON_CHANNEL": "Beta",
"ALPHA_ADDON_CHANNEL": "Alpha"
},
@@ -68,8 +68,8 @@
},
"OPTIONS": {
"APPLICATION": {
"ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "ENABLE_SYSTEM_NOTIFICATIONS_LABEL",
"ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION",
"ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Systembenachrichtigungen aktivieren",
"ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Aktivieren / Deaktivieren verschiedener Systembenachrichtigungen",
"MINIMIZE_ON_CLOSE_LABEL": "Minimieren bei Schliessen",
"MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "Beim Schließen des WowUp-Fensters auf das Systemabschnitt minimieren.",
"MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC",
@@ -79,7 +79,7 @@
},
"DEBUG": {
"DEBUG_DATA_BUTTON": "Debug-Daten dumpen",
"DEBUG_DATA_DESCRIPTION": "Protokollieren Sie Debug-Daten, um mögliche Probleme zu diagnostizieren. Dies finden Sie in Ihrer aktuellen Protokolldatei für Neugierde.",
"DEBUG_DATA_DESCRIPTION": "Protokollieren Sie Debug-Daten, um mögliche Probleme zu diagnostizieren. Dies finden Sie in Ihrer aktuellen Protokolldatei (für Neugierige).",
"DEBUG_DATA_LABEL": "Debug-Daten",
"LOG_FILES_BUTTON": "Log-Dateien anzeigen",
"LOG_FILES_DESCRIPTION": "Öffnen Sie den Ordner, der Ihre letzten Logdateien enthält.",
@@ -110,14 +110,14 @@
},
"INSTALL_FROM_URL": {
"ADDON_URL_INPUT_LABEL": "Addon URL",
"ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub or WowInterface URL",
"ADDON_URL_INPUT_PLACEHOLDER": "z.B. GitHub oder WowInterface URL",
"CLOSE_BUTTON": "Schließen",
"IMPORT_BUTTON": "Importieren",
"INSTALL_BUTTON": "Installieren",
"INSTALL_SUCCESS_LABEL": "Installiert!",
"TITLE": "Installieren Sie die Addon-URL",
"DESCRIPTION": "Wenn Sie ein Addon direkt von einer URL installieren möchten, fügen Sie es unten ein, um loszulegen.",
"SUPPORTED_SOURCES": "Unterstützt WowInterface und GitHub*"
"TITLE": "Installation eines Addons über eine externe URL",
"DESCRIPTION": "Wenn Sie ein Addon direkt von einer URL installieren möchten, fügen Sie es unten in der Zeile ein.",
"SUPPORTED_SOURCES": "Unterstützt wird WowInterface und GitHub*"
},
"TELEMETRY": {
"DESCRIPTION": "Hilf mir, WowUp zu verbessern, indem du anonyme Installationsdateien und/oder Fehler schickst?",
@@ -128,18 +128,18 @@
},
"COMMON": {
"ADDON_STATUS": {
"COMPLETE": "COMPLETE",
"DOWNLOADING": "DOWNLOADING",
"INSTALLING": "INSTALLING",
"UNINSTALLING": "UNINSTALLING",
"UPDATING": "UPDATING"
"COMPLETE": "Vollständig",
"DOWNLOADING": "Herunterladen",
"INSTALLING": "Installiere",
"UNINSTALLING": "Deinstalliere",
"UPDATING": "Aktualisiere"
},
"ADDON_STATE": {
"UNINSTALL": "UNINSTALL",
"IGNORED": "IGNORED",
"UPDATE": "UPDATE",
"INSTALL": "INSTALL",
"UPTODATE": "UPTODATE"
"UNINSTALL": "Deinstalliert",
"IGNORED": "Ignoriert",
"UPDATE": "Aktualisiert",
"INSTALL": "Installiert",
"UPTODATE": "Aktuell"
}
}
}
}

View File

@@ -0,0 +1,146 @@
{
"PAGES": {
"ABOUT": {
"CHANGE_LOG_SECTION_LABEL": "Endringslogg",
"TITLE": "WowUp.io",
"WEBSITE_LINK_LABEL": "Besøk nettsiden!"
},
"GET_ADDONS": {
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"REFRESH_BUTTON": "Oppdater",
"INSTALL_FROM_URL_BUTTON": "Installer fra URL",
"SEARCH_LABEL": "Søk",
"TABLE": {
"ADDON_COLUMN_HEADER": "Utvidelse",
"AUTHOR_COLUMN_HEADER": "Forfatter",
"PROVIDER_COLUMN_HEADER": "Leverandør",
"STATUS_COLUMN_HEADER": "Status",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Nedlastinger"
}
},
"HOME": {
"TITLE": "Appen virker !",
"GO_TO_DETAIL": "Gå til Detalj",
"MY_ADDONS_TAB_TITLE": "Mine Utvidelser",
"GET_ADDONS_TAB_TITLE": "Få Utvidelser",
"ABOUT_TAB_TITLE": "Om",
"OPTIONS_TAB_TITLE": "Alternativer"
},
"MY_ADDONS": {
"CHECK_UPDATES_BUTTON": "Finn Oppdateringer",
"CHECK_UPDATES_BUTTON_TOOLTIP": "Finn de siste oppdateringene til utvidelsene dine",
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"FILTER_LABEL": "Filter",
"RESCAN_FOLDERS_BUTTON": "Skann Mapper",
"RESCAN_FOLDERS_BUTTON_TOOLTIP": "Skann klientens mapper etter installerte utvidelser",
"UPDATE_ALL_BUTTON": "Oppdater Alle",
"UPDATE_ALL_BUTTON_TOOLTIP": "Oppdater alle utvidelser for denne klienten",
"TABLE": {
"ADDON_COLUMN_HEADER": "Utvidelse",
"ADDON_INSTALL_BUTTON": "Installer",
"ADDON_UPDATE_BUTTON": "Oppdater",
"AUTHOR_COLUMN_HEADER": "Forfatter",
"AUTO_UPDATE_ICON_TOOLTIP": "Automatisk oppdatering aktivert",
"GAME_VERSION_COLUMN_HEADER": "Spillversjon",
"LATEST_VERSION_COLUMN_HEADER": "Siste Versjon",
"PROVIDER_COLUMN_HEADER": "Leverandør",
"STATUS_COLUMN_HEADER": "Status"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorer",
"AUTO_UPDATE_ADDON_BUTTON": "Oppdater Automatisk",
"CHANNEL_SUBMENT_TITLE": "Kanal",
"SHOW_FOLDER": "Vis Mappe",
"REINSTALL_ADDON_BUTTON": "Re-Installer",
"REMOVE_ADDON_BUTTON": "Fjern",
"STABLE_ADDON_CHANNEL": "Stable",
"BETA_ADDON_CHANNEL": "Beta",
"ALPHA_ADDON_CHANNEL": "Alpha"
},
"COLUMNS_CONTEXT_MENU": {
"TITLE": "Vis Kolonner"
},
"UPDATE_ALL_CONTEXT_MENU": {
"UPDATE_RETAIL_CLASSIC_BUTTON": "Oppdater Retail/Classic",
"UPDATE_ALL_CLIENTS_BUTTON": "Oppdater Alle Klienter"
}
},
"OPTIONS": {
"APPLICATION": {
"ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Aktiver systemvarsler",
"ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Aktiver/Deaktiver forskjellige systemvarsler, foreksempel: automatisk oppdatering av addons.",
"MINIMIZE_ON_CLOSE_LABEL": "Minimer ved lukking",
"MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "Når WowUp-vinduet lukkes, minimer til menylinjen.",
"MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "Når WowUp-vinduet lukkes, minimer til oppgavelinjens varselområde.",
"TELEMETRY_DESCRIPTION": "Hjelp til med å forbedre WowUp ved å sende anonyme data og feilmeldinger.",
"TELEMETRY_LABEL": "Telemetri",
"TITLE": "Applikasjon"
},
"DEBUG": {
"DEBUG_DATA_BUTTON": "Dump Debugdata",
"DEBUG_DATA_DESCRIPTION": "Loggfør debugdata for å hjelpe til med å diagnotisere eventuelle problemer. Hvis du er nyskgjerrig kan du finne dette i din siste loggfil.",
"DEBUG_DATA_LABEL": "Debugdata",
"LOG_FILES_BUTTON": "Vis Loggfiler",
"LOG_FILES_DESCRIPTION": "Åpne mappen som inneholder dine siste loggfiler.",
"LOG_FILES_LABEL": "Loggfiler",
"TITLE": "Debug"
},
"WOW": {
"AUTO_UPDATE_DESCRIPTION": "Nye utvidelser du installerer vil bli satt til å oppdateres automatisk",
"AUTO_UPDATE_LABEL": "Automatisk Oppdatering",
"TITLE": "World of Warcraft",
"DEFAULT_ADDON_CHANNEL_LABEL": "Standard kanal for utvidelser",
"DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Kanal for Utvidelser",
"RESCAN_CLIENTS_BUTTON": "Skann Igjen",
"RESCAN_CLIENTS_LABEL": "Skann installerte World of Warcraft produkter på nytt"
}
}
},
"DIALOGS": {
"ADDON_DETAILS": {
"VIEW_IN_BROWSER_BUTTON": "Se i nettleser"
},
"ALERT": {
"POSITIVE_BUTTON": "Okey"
},
"CONFIRM": {
"NEGATIVE_BUTTON": "Nei",
"POSITIVE_BUTTON": "Ja"
},
"INSTALL_FROM_URL": {
"ADDON_URL_INPUT_LABEL": "Utvidelsens URL",
"ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub eller WowInterface URL",
"CLOSE_BUTTON": "Lukk",
"IMPORT_BUTTON": "Importer",
"INSTALL_BUTTON": "Installer",
"INSTALL_SUCCESS_LABEL": "Installert!",
"TITLE": "Installer Utvidelse fra URL",
"DESCRIPTION": "Hvis du vil installere en utvidelse direkte fra en URL kan du lime den inn i feltet nedenfor.",
"SUPPORTED_SOURCES": "Støtter WowInterface og GitHub*"
},
"TELEMETRY": {
"DESCRIPTION": "Hjelp meg med å forbedre WowUp ved å sende anyonyme data og feilmeldinger?",
"NEGATIVE_BUTTON": "Nei Takk!",
"POSITIVE_BUTTON": "Selvfølgelig!",
"TITLE": "WowUp Telemetri"
}
},
"COMMON": {
"ADDON_STATUS": {
"BACKINGUP": "Sikkerhetskopierer",
"COMPLETE": "Installert",
"DOWNLOADING": "Laster Ned",
"INSTALLING": "Installerer",
"PENDING": "Venter",
"UNINSTALLING": "Avinstallerer",
"UPDATING": "Oppdaterer..."
},
"ADDON_STATE": {
"UNINSTALL": "Avinstaller",
"IGNORED": "Ignorert",
"UPDATE": "Oppdater",
"INSTALL": "Installer",
"UPTODATE": "Oppdatert"
}
}
}

View File

@@ -15,12 +15,12 @@
"AUTHOR_COLUMN_HEADER": "Автор",
"PROVIDER_COLUMN_HEADER": "Источник",
"STATUS_COLUMN_HEADER": "Статус",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Кол-во загрузок",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Загрузок",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
"TITLE": "Приложение работает !",
"TITLE": "Приложение работает!",
"GO_TO_DETAIL": "Детали",
"MY_ADDONS_TAB_TITLE": "Мои модификации",
"GET_ADDONS_TAB_TITLE": "Получить модификации",
@@ -69,11 +69,11 @@
},
"OPTIONS": {
"APPLICATION": {
"ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "ENABLE_SYSTEM_NOTIFICATIONS_LABEL",
"ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION",
"ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Включить системные уведомления",
"ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Включить/Выключить различные окна системных уведомлений, такие как автоматически обновлённые модификации.",
"MINIMIZE_ON_CLOSE_LABEL": "Свернуть в трей при закрытии",
"MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "При закрытии окна WowUp сворачивается в системный трей.",
"MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC",
"MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "При закрытии окна WowUp сворачивается в область уведомлений панели задач.",
"MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "При закрытии окна WowUp сворачивается в меню статуса.",
"TELEMETRY_DESCRIPTION": "Помогите улучшить WowUp, отправив анонимные данные об установке и/или ошибках.",
"TELEMETRY_LABEL": "Телеметрия",
"TITLE": "Приложение"
@@ -145,4 +145,4 @@
"UPTODATE": "Актуальная"
}
}
}
}

View File

@@ -1,6 +1,7 @@
export const DOWNLOAD_FILE_CHANNEL = "download-file";
export const COPY_DIRECTORY_CHANNEL = "copy-directory";
export const DELETE_DIRECTORY_CHANNEL = "delete-directory";
export const DELETE_FILE_CHANNEL = "delete-file";
export const RENAME_DIRECTORY_CHANNEL = "rename-directory";
export const STAT_DIRECTORY_CHANNEL = "stat-directory";
export const LIST_DIRECTORIES_CHANNEL = "list-directories";