From 2d343b69c51e6d6945f43e76455e43967cd336e2 Mon Sep 17 00:00:00 2001 From: Galiwyx <206181+Galiwyx@users.noreply.github.com> Date: Wed, 11 Nov 2020 21:47:59 +0100 Subject: [PATCH 01/71] Update FR loc, first round. --- wowup-electron/src/assets/i18n/fr.json | 134 ++++++++++++------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index a92699b0..8554d4dd 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -1,59 +1,59 @@ { "APP": { "AUTO_UPDATE_NOTIFICATION_BODY": "Automatically updated {count} {count, plural, =1{addon} other{addons}}.", - "AUTO_UPDATE_NOTIFICATION_TITLE": "Auto Updates", + "AUTO_UPDATE_NOTIFICATION_TITLE": "Mises à jour Auto", "SYSTEM_TRAY": { - "CHECK_UPDATE": "Check for Updates...", - "QUIT_ACTION": "Quit", - "SHOW_ACTION": "Show" + "CHECK_UPDATE": "Vérification des mises à jour...", + "QUIT_ACTION": "Quitter", + "SHOW_ACTION": "Montrer" }, "WOWUP_UPDATE": { - "DOWNLOADED_TOOLTIP": "Install WowUp update", - "INSTALL_MESSAGE": "Do you want restart WowUp to install the update?", - "INSTALL_TITLE": "WowUp Update Ready", - "NOT_AVAILABLE": "Latest version of WowUp is already installed", + "DOWNLOADED_TOOLTIP": "Installer la mise à jour WowUp", + "INSTALL_MESSAGE": "Voulez-vous redémarrer WowUp pour installer la mise à jour ?", + "INSTALL_TITLE": "Mise à jour WowUp prête", + "NOT_AVAILABLE": "La dernière version de WowUp est prêtre à être installée", "PORTABLE_DOWNLOAD_MESSAGE": "Do you want to manually download the latest portable version?\n\nYou will need to close the app manually and copy over the new version.", - "PORTABLE_DOWNLOAD_TITLE": "Manual Download Required", - "SNACKBAR_ACTION": "Update", - "SNACKBAR_TEXT": "A new version of WowUp is available", - "TOOLTIP": "WowUp update available", - "UPDATE_ERROR": "Failed to get WowUp update" + "PORTABLE_DOWNLOAD_TITLE": "Téléchargement manuel requis", + "SNACKBAR_ACTION": "Mise à jour ", "Vérifier si Mis ou Mise" + "SNACKBAR_TEXT": "Une nouvelle version de WowUp est disponible", + "TOOLTIP": "Mise à jour de WowUp disponible", + "UPDATE_ERROR": "Impossible d'obtenir la mise à jour de WowUp" } }, "COMMON": { "ADDON_STATE": { - "IGNORED": "IGNORED", - "INSTALL": "INSTALL", - "UNINSTALL": "UNINSTALL", + "IGNORED": "IGNORÉ", + "INSTALL": "INSTALLER", + "UNINSTALL": "DÉSINSTALLER", "UNKNOWN": "", - "UPDATE": "UPDATE", - "UPTODATE": "UPTODATE" + "UPDATE": "MISE À JOUR", + "UPTODATE": "À JOUR" }, "ADDON_STATUS": { - "BACKINGUP": "Backing Up", - "COMPLETE": "COMPLETE", - "DOWNLOADING": "DOWNLOADING", - "INSTALLING": "INSTALLING", - "PENDING": "Pending", - "UNINSTALLING": "UNINSTALLING", - "UPDATING": "UPDATING" + "BACKINGUP": "SAUVEGARDE", "à vérifier" + "COMPLETE": "ACHEVÉ", "à vérifier" + "DOWNLOADING": "TÉLÉCHARGEMENT", + "INSTALLING": "INSTALLATION", + "PENDING": "EN ATTENTE", + "UNINSTALLING": "DÉSINSTALLATION", + "UPDATING": "EN COURS DE MISE À JOUR" }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", - "DAYS_AGO": "{count} {count, plural, one{day} other{days}} ago", - "HOURS_AGO": "{count} {count, plural, one{hour} other{hours}} ago", - "JUST_NOW": "Just now", - "MONTHS_AGO": "{count} {count, plural, one{month} other{months}} ago", - "YEARS_AGO": "{count} {count, plural, one{year} other{years}} ago", - "YESTERDAY": "Yesterday" + "DAYS_AGO": "il y a {count} {count, plural, one{jour} other{jours}}", + "HOURS_AGO": "il y a {count} {count, plural, one{heure} other{heures}}", + "JUST_NOW": "A l'instant", + "MONTHS_AGO": "il y a {count} {count, plural, one{mois} other{mois}}", + "YEARS_AGO": "il y a {count} {count, plural, one{an} other{ans}}", + "YESTERDAY": "Hier" }, "DEPENDENCY": { - "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}" + "TOOLTIP": "{dependencyCount} {dependencyCount, plural, one{dépendance requise} other{dépendances requises}}" }, "DOWNLOAD_COUNT": { - "BILLION": "{count} billion", - "MILLION": "{count} million", - "THOUSAND": "{count} thousand" + "BILLION": "{count} milliards", + "MILLION": "{count} millions", + "THOUSAND": "{count} milliers" }, "ENUM": { "ADDON_CHANNEL_TYPE": { @@ -63,18 +63,18 @@ } }, "PROGRESS_SPINNER": { - "LOADING": "Loading..." + "LOADING": "Chargement..." }, "SEARCH": { - "NO_ADDONS": "No addons found" + "NO_ADDONS": "Aucun addon trouvé" } }, "DIALOGS": { "ADDON_DETAILS": { - "BY_AUTHOR": "By {authorName}", + "BY_AUTHOR": "Par {authorName}", "DEPENDENCY_TEXT": "This addon has {dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}", "VIEW_IN_BROWSER_BUTTON": "Voir dans le navigateur", - "VIEW_ON_PROVIDER_PREFIX": "View on" + "VIEW_ON_PROVIDER_PREFIX": "Voir sur" }, "ALERT": { "POSITIVE_BUTTON": "Ok" @@ -84,10 +84,10 @@ "POSITIVE_BUTTON": "Oui" }, "INSTALL_FROM_URL": { - "ADDON_URL_INPUT_LABEL": "Addon URL", - "ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub or WowInterface URL", - "CLOSE_BUTTON": "Clôturer", - "DESCRIPTION": "Si vous voulez installer un addon directement à partir d'une URL collez le ci-dessous pour commencer.", + "ADDON_URL_INPUT_LABEL": "URL de l'Addon", + "ADDON_URL_INPUT_PLACEHOLDER": "Ex. URL de GitHub ou WowInterface", + "CLOSE_BUTTON": "Fermer", + "DESCRIPTION": "Si vous voulez installer un addon directement à partir d'une URL, collez-le ci-dessous.", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", @@ -95,7 +95,7 @@ "NO_ADDON_FOUND": "No addon was found, make sure your URL is pointing to the correct page.\n\nWhen installing from github, please make sure the repository has a release tag with a zip archive containing the addon.", "TITLE": "Addon Installation Failed" }, - "IMPORT_BUTTON": "Importation", + "IMPORT_BUTTON": "Importer", "INSTALL_BUTTON": "Installer", "INSTALL_SUCCESS_LABEL": "Installé !", "SUPPORTED_SOURCES": "Supporte WowInterface et GitHub*", @@ -122,9 +122,9 @@ "TABLE": { "ADDON_COLUMN_HEADER": "Addon", "AUTHOR_COLUMN_HEADER": "Auteur", - "DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER", + "DOWNLOAD_COUNT_COLUMN_HEADER": "Téléchargements", "PROVIDER_COLUMN_HEADER": "Fournisseur", - "RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER", + "RELEASED_AT_COLUMN_HEADER": "Publié", "STATUS_COLUMN_HEADER": "Statut" } }, @@ -136,16 +136,16 @@ }, "MY_ADDONS": { "ADDON_CONTEXT_MENU": { - "ADDONS_SELECTED": "{count} {count, plural, =1{addon} other{addons}} selected", - "ALPHA_ADDON_CHANNEL": "Alphabétisation", + "ADDONS_SELECTED": "{count} {count, plural, =1{addon sélectionné} other{selectionnés}}", + "ALPHA_ADDON_CHANNEL": "Alpha", "AUTO_UPDATE_ADDON_BUTTON": "Mise à jour automatique", "BETA_ADDON_CHANNEL": "Bêta", - "CHANNEL_SUBMENT_TITLE": "Chaîne", + "CHANNEL_SUBMENT_TITLE": "Canal", "IGNORE_ADDON_BUTTON": "Ignorer", "REINSTALL_ADDON_BUTTON": "Réinstaller", - "REMOVE_ADDON_BUTTON": "Retirer", - "SHOW_FOLDER": "SHOW_FOLDER", - "STABLE_ADDON_CHANNEL": "Écurie" + "REMOVE_ADDON_BUTTON": "Désinstaller", + "SHOW_FOLDER": "Montrer le dossier", + "STABLE_ADDON_CHANNEL": "Stable" }, "CHECK_UPDATES_BUTTON": "Vérifier les mises à jour", "CHECK_UPDATES_BUTTON_TOOLTIP": "Vérifier les dernières mises à jour des modules complémentaires", @@ -156,20 +156,20 @@ "FILTER_LABEL": "Filter", "PAGE_CONTEXT_FOOTER": { "ADDONS_INSTALLED": "{count} {count, plural, =1{addon} other{addons}}", - "JOIN_DISCORD": "Chat with us on Discord", - "PATREON_SUPPORT": "Support WowUp on Patreon", - "SEARCH_RESULTS": "{count} {count, plural, =1{result} other{results}}", - "VIEW_GITHUB": "Check out the code on GitHub", - "VIEW_GUIDE": "Check out our guide to see what WowUp can do" + "JOIN_DISCORD": "Discutez avec nous sur Discord", + "PATREON_SUPPORT": "Supportez WowUp sur Patreon", + "SEARCH_RESULTS": "{count} {count, plural, =1{resultat} other{resultats}}", + "VIEW_GITHUB": "Voir le code sur Github", + "VIEW_GUIDE": "Consultez notre guide pour voir ce que WowUp peut faire" }, "RESCAN_FOLDERS_BUTTON": "Re-scanner les dossiers", - "RESCAN_FOLDERS_BUTTON_TOOLTIP": "Scannez votre dossier client pour trouver des extensions installées", + "RESCAN_FOLDERS_BUTTON_TOOLTIP": "Scannez votre dossier client pour trouver des addons installées", "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "TEXT_ELEMENT", "RESCAN_FOLDERS_CONFIRMATION_TITLE": "TEXT_ELEMENT", "SPINNER": { - "GATHERING_ADDONS": "Gathering addons...", - "UPDATING": "Updating {updateCount}/{addonCount}", - "UPDATING_WITH_ADDON_NAME": "Updating {updateCount}/{addonCount}\n{clientType}: {addonName}" + "GATHERING_ADDONS": "R2colte des addons...", + "UPDATING": "Mise à jour {updateCount}/{addonCount}", + "UPDATING_WITH_ADDON_NAME": "Mise à jour {updateCount}/{addonCount}\n{clientType}: {addonName}" }, "TABLE": { "ADDON_COLUMN_HEADER": "Addon", @@ -180,10 +180,10 @@ "GAME_VERSION_COLUMN_HEADER": "Version du jeu", "LATEST_VERSION_COLUMN_HEADER": "Dernière version", "PROVIDER_COLUMN_HEADER": "Fournisseur", - "PROVIDER_RELEASE_CHANNEL": "Provider Channel", - "RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER", + "PROVIDER_RELEASE_CHANNEL": "Canal", + "RELEASED_AT_COLUMN_HEADER": "Publié", "STATUS_COLUMN_HEADER": "Statut", - "UPDATED_AT_COLUMN_HEADER": "Updated At" + "UPDATED_AT_COLUMN_HEADER": "Mis à jour" }, "UNINSTALL_POPUP": { "CONFIRMATION_ACTION_EXPLANATION": "This will remove all related folders from your World of Warcraft folder.", @@ -241,15 +241,15 @@ "DEBUG": "Debug" }, "WOW": { - "AUTO_UPDATE_DESCRIPTION": "Les extensions nouvellement installées seront mises à jour automatiquement par défaut", + "AUTO_UPDATE_DESCRIPTION": "Les addons nouvellement installés seront mises à jour automatiquement par défaut", "AUTO_UPDATE_LABEL": "Mise à jour automatique", "CLIENT_TYPE_INPUT_HINT": "The folder that contains the {clientTypeName} client folder \"{clientFolderName}\"", "CLIENT_TYPE_PATH_LABEL": "{clientTypeName} path", "DEFAULT_ADDON_CHANNEL_LABEL": "Canal d'extension par défaut", "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Canal d'Addon", - "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "Select", + "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "Sélectionner", "RESCAN_CLIENTS_BUTTON": "Re-scanner", - "RESCAN_CLIENTS_LABEL": "Rescanner les produits de World of Warcraft installés", + "RESCAN_CLIENTS_LABEL": "Rescanner les clients de World of Warcraft installés", "TITLE": "World of Warcraft" } } From a8b65ec6d421ddee6d13c68ac52eda395a2f0e21 Mon Sep 17 00:00:00 2001 From: Galiwyx <206181+Galiwyx@users.noreply.github.com> Date: Wed, 11 Nov 2020 22:06:43 +0100 Subject: [PATCH 02/71] Update FR loc, second round. --- wowup-electron/src/assets/i18n/fr.json | 52 +++++++++++++------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 8554d4dd..2398948a 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -87,7 +87,7 @@ "ADDON_URL_INPUT_LABEL": "URL de l'Addon", "ADDON_URL_INPUT_PLACEHOLDER": "Ex. URL de GitHub ou WowInterface", "CLOSE_BUTTON": "Fermer", - "DESCRIPTION": "Si vous voulez installer un addon directement à partir d'une URL, collez-le ci-dessous.", + "DESCRIPTION": "Si vous voulez installer un addon directement à partir d'une URL, collez-là ci-dessous.", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", @@ -162,12 +162,12 @@ "VIEW_GITHUB": "Voir le code sur Github", "VIEW_GUIDE": "Consultez notre guide pour voir ce que WowUp peut faire" }, - "RESCAN_FOLDERS_BUTTON": "Re-scanner les dossiers", - "RESCAN_FOLDERS_BUTTON_TOOLTIP": "Scannez votre dossier client pour trouver des addons installées", - "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "TEXT_ELEMENT", - "RESCAN_FOLDERS_CONFIRMATION_TITLE": "TEXT_ELEMENT", + "RESCAN_FOLDERS_BUTTON": "Réanalyser les dossiers", + "RESCAN_FOLDERS_BUTTON_TOOLTIP": "Analysez votre dossier client pour trouver les addons installés", + "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "Doing a re-scan will attempt to guess which addons you currently have installed, doing so may reset known addon information. Use this function when certain addons are not recognized or addon versions are not being shown correctly. This scan will never delete your installed addons, only what WowUp knows about them.\n\nScanning may take a few moments.", + "RESCAN_FOLDERS_CONFIRMATION_TITLE": "Débuter une réanalyse ?", "SPINNER": { - "GATHERING_ADDONS": "R2colte des addons...", + "GATHERING_ADDONS": "Récolte des addons...", "UPDATING": "Mise à jour {updateCount}/{addonCount}", "UPDATING_WITH_ADDON_NAME": "Mise à jour {updateCount}/{addonCount}\n{clientType}: {addonName}" }, @@ -187,37 +187,37 @@ }, "UNINSTALL_POPUP": { "CONFIRMATION_ACTION_EXPLANATION": "This will remove all related folders from your World of Warcraft folder.", - "CONFIRMATION_LESS_THAN_THREE": "Are you sure you want to remove the following {count} addons?", - "CONFIRMATION_MORE_THAN_THREE": "Are you sure you want to remove the selected {count} addons?", - "CONFIRMATION_ONE": "Are you sure you want to remove {addonName}?", - "DEPENDENCY_MESSAGE": "{addonName} has {dependencyCount} {dependencyCount, plural, one{dependency} other{dependencies}}. Do you want to remove them also?", - "DEPENDENCY_TITLE": "Remove Addon Dependencies?", - "TITLE": "Uninstall {count, plural, =1{Addon} other{Addons}}?" + "CONFIRMATION_LESS_THAN_THREE": "Êtes-vous sûr de vouloir désinstaller les {count} addons suivants ?", + "CONFIRMATION_MORE_THAN_THREE": "Êtes-vous sûr de vouloir désinstaller les {count} addons sélectionnés ?", + "CONFIRMATION_ONE": "Êtes-vous certain de vouloir désinstaller {addonName}?", + "DEPENDENCY_MESSAGE": "{addonName} a {dependencyCount} {dependencyCount, plural, one{dépendance} other{dépendances}}. Voulez-vous également les supprimer ?", + "DEPENDENCY_TITLE": "Supprimer les dépendances de l'addon ?", + "TITLE": "Désinstaller {count, plural, =1{Addon} other{Addons}}?" }, "UPDATE_ALL_BUTTON": "Tout mettre à jour", "UPDATE_ALL_BUTTON_TOOLTIP": "Mettre à jour tous les addons pour ce client", "UPDATE_ALL_CONTEXT_MENU": { "UPDATE_ALL_CLIENTS_BUTTON": "Mettre à jour tous les clients", - "UPDATE_RETAIL_CLASSIC_BUTTON": "Mise à jour Retail/Classique" + "UPDATE_RETAIL_CLASSIC_BUTTON": "Mise à jour Retail / Classic" } }, "OPTIONS": { "APPLICATION": { - "CURRENT_LANGUAGE_LABEL": "Current Language", - "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION", - "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "ENABLE_SYSTEM_NOTIFICATIONS_LABEL", - "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC", - "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "Lorsque vous fermez la fenêtre WowUp, minimisez dans la barre d'état système.", + "CURRENT_LANGUAGE_LABEL": "Langue actuelle", + "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Activer les fenêtres contextuelles système comme la mise à jour auto des addons.", + "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Activer le système de notification", + "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "Lorsque vous fermez la fenêtre WowUp, minimise dans la barre des menus", + "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "Lorsque vous fermez la fenêtre WowUp, minimise dans la barre d'état système.", "MINIMIZE_ON_CLOSE_LABEL": "Minimiser à la fermeture", - "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "Changing the default language requires the application to restart.", - "SET_LANGUAGE_CONFIRMATION_LABEL": "Setting a new default language", - "SET_LANGUAGE_DESCRIPTION": "Select a language to change to", - "SET_LANGUAGE_LABEL": "Set Language", + "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "Changer la langue par défaut nécessite le redémarrage de l'application.", + "SET_LANGUAGE_CONFIRMATION_LABEL": "Définir une langue par défaut", + "SET_LANGUAGE_DESCRIPTION": "Sélectionner une langue pour l'application.", + "SET_LANGUAGE_LABEL": "Définir une langue", "START_MINIMIZED_DESCRIPTION": "...and will not show up on the screen", "START_MINIMIZED_LABEL": "Launch WowUp minimized", "START_WITH_SYSTEM_DESCRIPTION": "WowUp will be launched immediately after your operational system is loaded...", "START_WITH_SYSTEM_LABEL": "Launch WowUp with system", - "TELEMETRY_DESCRIPTION": "Aidez à améliorer WowUp en envoyant des données d'installation et/ou des erreurs anonymes.", + "TELEMETRY_DESCRIPTION": "Aidez à améliorer WowUp en envoyant des données d'installation et / ou des erreurs anonymes.", "TELEMETRY_LABEL": "Télémétrie", "TITLE": "Application", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "TEXT_ELEMENT", @@ -228,7 +228,7 @@ }, "DEBUG": { "DEBUG_DATA_BUTTON": "Dump des données de débogage", - "DEBUG_DATA_DESCRIPTION": "Log les données de débogage pour aider à diagnostiquer les problèmes potentiels. Cela peut être trouvé dans votre dernier fichier journal pour les curieux.", + "DEBUG_DATA_DESCRIPTION": "Log les données de débogage pour aider à diagnostiquer les problèmes potentiels. Cela peut être trouvé dans votre dernier fichier journal pour les curieux.", "à améliorer !!" "DEBUG_DATA_LABEL": "Déboguer les données", "LOG_FILES_BUTTON": "Afficher les fichiers de log", "LOG_FILES_DESCRIPTION": "Ouvrez le dossier qui contient vos derniers fichiers journaux.", @@ -248,8 +248,8 @@ "DEFAULT_ADDON_CHANNEL_LABEL": "Canal d'extension par défaut", "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Canal d'Addon", "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "Sélectionner", - "RESCAN_CLIENTS_BUTTON": "Re-scanner", - "RESCAN_CLIENTS_LABEL": "Rescanner les clients de World of Warcraft installés", + "RESCAN_CLIENTS_BUTTON": "Réanalyser", + "RESCAN_CLIENTS_LABEL": "Réanalyser les clients de World of Warcraft installés", "TITLE": "World of Warcraft" } } From 07498e79ba0ef5128579760af849002ee4e23557 Mon Sep 17 00:00:00 2001 From: Cyano Hao Date: Thu, 12 Nov 2020 09:55:40 +0800 Subject: [PATCH 03/71] Update zh translation --- wowup-electron/src/assets/i18n/zh.json | 272 ++++++++++++------------- 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index 3f546094..6761dcde 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -1,256 +1,256 @@ { "APP": { - "AUTO_UPDATE_NOTIFICATION_BODY": "Automatically updated {count} {count, plural, =1{addon} other{addons}}.", - "AUTO_UPDATE_NOTIFICATION_TITLE": "Auto Updates", + "AUTO_UPDATE_NOTIFICATION_BODY": "自动更新了 {count} 个插件。", + "AUTO_UPDATE_NOTIFICATION_TITLE": "自动更新", "SYSTEM_TRAY": { - "CHECK_UPDATE": "Check for Updates...", - "QUIT_ACTION": "Quit", - "SHOW_ACTION": "Show" + "CHECK_UPDATE": "检查更新...", + "QUIT_ACTION": "退出", + "SHOW_ACTION": "显示" }, "WOWUP_UPDATE": { - "DOWNLOADED_TOOLTIP": "Install WowUp update", - "INSTALL_MESSAGE": "Do you want restart WowUp to install the update?", - "INSTALL_TITLE": "WowUp Update Ready", - "NOT_AVAILABLE": "Latest version of WowUp is already installed", - "PORTABLE_DOWNLOAD_MESSAGE": "Do you want to manually download the latest portable version?\n\nYou will need to close the app manually and copy over the new version.", - "PORTABLE_DOWNLOAD_TITLE": "Manual Download Required", - "SNACKBAR_ACTION": "Update", - "SNACKBAR_TEXT": "A new version of WowUp is available", - "TOOLTIP": "WowUp update available", - "UPDATE_ERROR": "Failed to get WowUp update" + "DOWNLOADED_TOOLTIP": "安装 WowUp 更新", + "INSTALL_MESSAGE": "是否重新启动 WowUp 以完成更新?", + "INSTALL_TITLE": "WowUp 更新已准备就绪", + "NOT_AVAILABLE": "已安装最新版 WowUp", + "PORTABLE_DOWNLOAD_MESSAGE": "是否手动下载最新绿色版?\n\n下载完成后请关闭本应用程序,然后用新版本覆盖。", + "PORTABLE_DOWNLOAD_TITLE": "需要手动下载", + "SNACKBAR_ACTION": "更新", + "SNACKBAR_TEXT": "新版本 WowUp 可用", + "TOOLTIP": "WowUp 更新可用", + "UPDATE_ERROR": "WowUp 更新下载失败" } }, "COMMON": { "ADDON_STATE": { - "IGNORED": "IGNORED", - "INSTALL": "INSTALL", - "UNINSTALL": "UNINSTALL", + "IGNORED": "忽略", + "INSTALL": "安装", + "UNINSTALL": "卸载", "UNKNOWN": "", - "UPDATE": "UPDATE", - "UPTODATE": "UPTODATE" + "UPDATE": "更新", + "UPTODATE": "已安装最新版" }, "ADDON_STATUS": { - "BACKINGUP": "Backing Up", - "COMPLETE": "COMPLETE", - "DOWNLOADING": "DOWNLOADING", - "INSTALLING": "INSTALLING", - "PENDING": "Pending", - "UNINSTALLING": "UNINSTALLING", - "UPDATING": "UPDATING" + "BACKINGUP": "正在备份", + "COMPLETE": "已安装", + "DOWNLOADING": "正在下载", + "INSTALLING": "正在安装", + "PENDING": "等待中", + "UNINSTALLING": "正在卸载", + "UPDATING": "正在更新..." }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", - "DAYS_AGO": "DAYS_AGO", - "HOURS_AGO": "HOURS_AGO", - "JUST_NOW": "Just now", - "MONTHS_AGO": "{count} {count, plural, one{month} other{months}} ago", - "YEARS_AGO": "{count} {count, plural, one{year} other{years}} ago", - "YESTERDAY": "Yesterday" + "DAYS_AGO": "{count} 天前", + "HOURS_AGO": "{count} 小时前", + "JUST_NOW": "刚刚", + "MONTHS_AGO": "{count} 个月前", + "YEARS_AGO": "{count} 年前", + "YESTERDAY": "昨天" }, "DEPENDENCY": { - "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}" + "TOOLTIP": "{dependencyCount} 个依赖项" }, "DOWNLOAD_COUNT": { - "BILLION": "{count} billion", - "MILLION": "{count} million", - "THOUSAND": "{count} thousand" + "BILLION": "{count}B", + "MILLION": "{count}M", + "THOUSAND": "{count}k" }, "ENUM": { "ADDON_CHANNEL_TYPE": { "ALPHA": "Alpha", "BETA": "Beta", - "STABLE": "Stable" + "STABLE": "稳定版" } }, "PROGRESS_SPINNER": { - "LOADING": "Loading..." + "LOADING": "正在加载..." }, "SEARCH": { - "NO_ADDONS": "No addons found" + "NO_ADDONS": "未找到插件" } }, "DIALOGS": { "ADDON_DETAILS": { "BY_AUTHOR": "By {authorName}", - "DEPENDENCY_TEXT": "This addon has {dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}", + "DEPENDENCY_TEXT": "此插件有 {dependencyCount} 个依赖项", "VIEW_IN_BROWSER_BUTTON": "在浏览器中查看", - "VIEW_ON_PROVIDER_PREFIX": "View on" + "VIEW_ON_PROVIDER_PREFIX": "在该网站上查看:" }, "ALERT": { - "POSITIVE_BUTTON": "好的" + "POSITIVE_BUTTON": "确定" }, "CONFIRM": { "NEGATIVE_BUTTON": "否", "POSITIVE_BUTTON": "是" }, "INSTALL_FROM_URL": { - "ADDON_URL_INPUT_LABEL": "Addon URL", - "ADDON_URL_INPUT_PLACEHOLDER": "例。 GitHub或WowInterface URL", + "ADDON_URL_INPUT_LABEL": "插件 URL", + "ADDON_URL_INPUT_PLACEHOLDER": "例如,GitHub 或 WowInterface URL", "CLOSE_BUTTON": "关闭", - "DESCRIPTION": "如果您想直接从下面的 URL 粘贴中安装一个插件,就开始了。", + "DESCRIPTION": "如需直接从某 URL 安装插件,请将其粘贴到下面以开始安装。", "ERROR": { - "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", - "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", - "INVALID_URL": "The given value is not a valid URL. Examples of valid addon URLs are:\n\t- https://github.com/teelolws/Altoholic-Retail\n\t- https://www.wowinterface.com/downloads/info25610-8.3-014.html\n\t- https://www.curseforge.com/wow/addons/altoholic", - "NO_ADDON_FOUND": "No addon was found, make sure your URL is pointing to the correct page.\n\nWhen installing from github, please make sure the repository has a release tag with a zip archive containing the addon.", - "TITLE": "Addon Installation Failed" + "FAILED_TO_CONNECT": "无法连接 API,请稍后重试。", + "INSTALL_FAILED": "安装插件时出现了一些错误,请重试。\n\n如果一直出现此消息,可以加入 Discord #wow-support 频道寻求帮助(英语)。", + "INVALID_URL": "输入的 URL 无效。有效 URL 示例:\n\t- https://github.com/teelolws/Altoholic-Retail\n\t- https://www.wowinterface.com/downloads/info25610-8.3-014.html\n\t- https://www.curseforge.com/wow/addons/altoholic", + "NO_ADDON_FOUND": "未找到插件,请检查 URL 是否指向正确的页面。\n\n从 GitHub 安装时,请检查是否存在带有 zip 包的 release tag。", + "TITLE": "插件安装失败" }, "IMPORT_BUTTON": "导入", "INSTALL_BUTTON": "安装", - "INSTALL_SUCCESS_LABEL": "已安装!", - "SUPPORTED_SOURCES": "支持Wow界面和 GitHub*", - "TITLE": "通过网址远程安装" + "INSTALL_SUCCESS_LABEL": "安装成功!", + "SUPPORTED_SOURCES": "支持 WowInterface 和 GitHub", + "TITLE": "从 URL 安装" }, "TELEMETRY": { - "DESCRIPTION": "通过发送匿名应用安装数据和/或错误来帮助我改进WowUp?", - "NEGATIVE_BUTTON": "不,谢谢!", - "POSITIVE_BUTTON": "当然!", - "TITLE": "WowUp遥测" + "DESCRIPTION": "是否发送匿名应用安装数据和错误信息以帮助改进 WowUp?", + "NEGATIVE_BUTTON": "否", + "POSITIVE_BUTTON": "是", + "TITLE": "WowUp 遥测" } }, "PAGES": { "ABOUT": { - "CHANGE_LOG_SECTION_LABEL": "更改日志", + "CHANGE_LOG_SECTION_LABEL": "更新记录", "TITLE": "WowUp.io", - "WEBSITE_LINK_LABEL": "查看网站!" + "WEBSITE_LINK_LABEL": "访问网站!" }, "GET_ADDONS": { - "CLIENT_TYPE_SELECT_LABEL": "World of Warcraft", + "CLIENT_TYPE_SELECT_LABEL": "魔兽世界", "INSTALL_FROM_URL_BUTTON": "从 URL 安装", "REFRESH_BUTTON": "刷新", "SEARCH_LABEL": "搜索", "TABLE": { - "ADDON_COLUMN_HEADER": "Addon", + "ADDON_COLUMN_HEADER": "插件", "AUTHOR_COLUMN_HEADER": "作者", - "DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER", - "PROVIDER_COLUMN_HEADER": "提供商", - "RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER", + "DOWNLOAD_COUNT_COLUMN_HEADER": "下载次数", + "PROVIDER_COLUMN_HEADER": "提供方", + "RELEASED_AT_COLUMN_HEADER": "发布时间", "STATUS_COLUMN_HEADER": "状态" } }, "HOME": { - "ABOUT_TAB_TITLE": "关于的", - "GET_ADDONS_TAB_TITLE": "获取 Addons", - "MY_ADDONS_TAB_TITLE": "我的附加组件", - "OPTIONS_TAB_TITLE": "备选方案" + "ABOUT_TAB_TITLE": "关于", + "GET_ADDONS_TAB_TITLE": "获取插件", + "MY_ADDONS_TAB_TITLE": "我的插件", + "OPTIONS_TAB_TITLE": "选项" }, "MY_ADDONS": { "ADDON_CONTEXT_MENU": { - "ADDONS_SELECTED": "{count} {count, plural, =1{addon} other{addons}} selected", - "ALPHA_ADDON_CHANNEL": "阿尔法", + "ADDONS_SELECTED": "已选中 {count} 项", + "ALPHA_ADDON_CHANNEL": "Alpha", "AUTO_UPDATE_ADDON_BUTTON": "自动更新", - "BETA_ADDON_CHANNEL": "测试版", - "CHANNEL_SUBMENT_TITLE": "频道", + "BETA_ADDON_CHANNEL": "Beta", + "CHANNEL_SUBMENT_TITLE": "更新通道", "IGNORE_ADDON_BUTTON": "忽略", "REINSTALL_ADDON_BUTTON": "重新安装", "REMOVE_ADDON_BUTTON": "删除", - "SHOW_FOLDER": "SHOW_FOLDER", - "STABLE_ADDON_CHANNEL": "稳定" + "SHOW_FOLDER": "打开文件夹", + "STABLE_ADDON_CHANNEL": "稳定版" }, "CHECK_UPDATES_BUTTON": "检查更新", "CHECK_UPDATES_BUTTON_TOOLTIP": "检查最新的插件更新", - "CLIENT_TYPE_SELECT_LABEL": "战术世界", + "CLIENT_TYPE_SELECT_LABEL": "魔兽世界", "COLUMNS_CONTEXT_MENU": { - "TITLE": "显示列" + "TITLE": "显示列表项" }, - "FILTER_LABEL": "Filter", + "FILTER_LABEL": "筛选", "PAGE_CONTEXT_FOOTER": { - "ADDONS_INSTALLED": "{count} {count, plural, =1{addon} other{addons}}", - "JOIN_DISCORD": "Chat with us on Discord", - "PATREON_SUPPORT": "Support WowUp on Patreon", - "SEARCH_RESULTS": "{count} {count, plural, =1{result} other{results}}", - "VIEW_GITHUB": "Check out the code on GitHub", - "VIEW_GUIDE": "Check out our guide to see what WowUp can do" + "ADDONS_INSTALLED": "共 {count} 个插件", + "JOIN_DISCORD": "在 Discord 上与我们交流(英语)", + "PATREON_SUPPORT": "通过 Patreon 向 WowUp 捐助", + "SEARCH_RESULTS": "共 {count} 条结果", + "VIEW_GITHUB": "在 GitHub 上查看源代码", + "VIEW_GUIDE": "访问指南,探索 WowUp 的功能(英语)" }, - "RESCAN_FOLDERS_BUTTON": "重新扫描文件夹", - "RESCAN_FOLDERS_BUTTON_TOOLTIP": "扫描已安装附加组件的客户端文件夹", - "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "TEXT_ELEMENT", - "RESCAN_FOLDERS_CONFIRMATION_TITLE": "TEXT_ELEMENT", + "RESCAN_FOLDERS_BUTTON": "重新扫描", + "RESCAN_FOLDERS_BUTTON_TOOLTIP": "扫描客户端文件夹中已安装的附加组件", + "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "重新扫描过程将会猜测已经安装了哪些插件,可能会重置已知插件信息。如果特定插件无法识别或显示不正确,请使用此功能。扫描不会删除插件本身,只会删除 WowUp 缓存的插件信息。\n\n扫描需要花费一些时间。", + "RESCAN_FOLDERS_CONFIRMATION_TITLE": "是否开始扫描?", "SPINNER": { - "GATHERING_ADDONS": "Gathering addons...", - "UPDATING": "Updating {updateCount}/{addonCount}", - "UPDATING_WITH_ADDON_NAME": "Updating {updateCount}/{addonCount}\n{clientType}: {addonName}" + "GATHERING_ADDONS": "正在收集插件信息...", + "UPDATING": "正在更新第 {updateCount} 个,共 {addonCount} 个", + "UPDATING_WITH_ADDON_NAME": "正在更新第 {updateCount} 个,共 {addonCount} 个\n{clientType}:{addonName}" }, "TABLE": { - "ADDON_COLUMN_HEADER": "Addon", + "ADDON_COLUMN_HEADER": "插件", "ADDON_INSTALL_BUTTON": "安装", "ADDON_UPDATE_BUTTON": "更新", "AUTHOR_COLUMN_HEADER": "作者", "AUTO_UPDATE_ICON_TOOLTIP": "自动更新已启用", "GAME_VERSION_COLUMN_HEADER": "游戏版本", "LATEST_VERSION_COLUMN_HEADER": "最新版本", - "PROVIDER_COLUMN_HEADER": "提供商", - "PROVIDER_RELEASE_CHANNEL": "Provider Channel", - "RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER", + "PROVIDER_COLUMN_HEADER": "提供方", + "PROVIDER_RELEASE_CHANNEL": "更新通道", + "RELEASED_AT_COLUMN_HEADER": "发布时间", "STATUS_COLUMN_HEADER": "状态", - "UPDATED_AT_COLUMN_HEADER": "Updated At" + "UPDATED_AT_COLUMN_HEADER": "更新时间" }, "UNINSTALL_POPUP": { - "CONFIRMATION_ACTION_EXPLANATION": "This will remove all related folders from your World of Warcraft folder.", - "CONFIRMATION_LESS_THAN_THREE": "Are you sure you want to remove the following {count} addons?", - "CONFIRMATION_MORE_THAN_THREE": "Are you sure you want to remove the selected {count} addons?", - "CONFIRMATION_ONE": "Are you sure you want to remove {addonName}?", - "DEPENDENCY_MESSAGE": "{addonName} has {dependencyCount} {dependencyCount, plural, one{dependency} other{dependencies}}. Do you want to remove them also?", - "DEPENDENCY_TITLE": "Remove Addon Dependencies?", - "TITLE": "Uninstall {count, plural, =1{Addon} other{Addons}}?" + "CONFIRMATION_ACTION_EXPLANATION": "此操作将会从《魔兽世界》所在路径下删除所有与插件相关的文件夹。", + "CONFIRMATION_LESS_THAN_THREE": "是否确定要删除以下 {count} 个插件?", + "CONFIRMATION_MORE_THAN_THREE": "是否确定要删除选中的 {count} 个插件?", + "CONFIRMATION_ONE": "是否确定要删除 {addonName}?", + "DEPENDENCY_MESSAGE": "{addonName} 有 {dependencyCount} 个依赖项,是否一并删除?", + "DEPENDENCY_TITLE": "是否删除插件依赖项?", + "TITLE": "是否卸载插件?" }, "UPDATE_ALL_BUTTON": "全部更新", "UPDATE_ALL_BUTTON_TOOLTIP": "更新此客户端的所有插件", "UPDATE_ALL_CONTEXT_MENU": { "UPDATE_ALL_CLIENTS_BUTTON": "更新所有客户端", - "UPDATE_RETAIL_CLASSIC_BUTTON": "更新零售/经典" + "UPDATE_RETAIL_CLASSIC_BUTTON": "更新正式服/经典怀旧服" } }, "OPTIONS": { "APPLICATION": { - "CURRENT_LANGUAGE_LABEL": "Current Language", - "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION", - "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "ENABLE_SYSTEM_NOTIFICATIONS_LABEL", - "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC", - "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "关闭WowUp窗口时,最小化到系统托盘。", + "CURRENT_LANGUAGE_LABEL": "当前语言", + "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "启用各种系统通知弹窗,如自动更新插件通知。", + "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "启用系统通知", + "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "关闭 WowUp 窗口时,最小化到菜单栏。", + "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "关闭 WowUp 窗口时,最小化到系统托盘。", "MINIMIZE_ON_CLOSE_LABEL": "关闭时最小化", - "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "Changing the default language requires the application to restart.", - "SET_LANGUAGE_CONFIRMATION_LABEL": "Setting a new default language", - "SET_LANGUAGE_DESCRIPTION": "Select a language to change to", - "SET_LANGUAGE_LABEL": "Set Language", - "START_MINIMIZED_DESCRIPTION": "...and will not show up on the screen", - "START_MINIMIZED_LABEL": "Launch WowUp minimized", - "START_WITH_SYSTEM_DESCRIPTION": "WowUp will be launched immediately after your operational system is loaded...", - "START_WITH_SYSTEM_LABEL": "Launch WowUp with system", - "TELEMETRY_DESCRIPTION": "通过匿名发送数据和/或安装错误来帮助改进WowUp。", + "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "更改默认语言需要重新启动客户端。", + "SET_LANGUAGE_CONFIRMATION_LABEL": "设置新的默认语言", + "SET_LANGUAGE_DESCRIPTION": "选择要使用的语言", + "SET_LANGUAGE_LABEL": "设置语言", + "START_MINIMIZED_DESCRIPTION": "……并且不显示窗口。", + "START_MINIMIZED_LABEL": "以最小化窗口启动 WowUp", + "START_WITH_SYSTEM_DESCRIPTION": "WowUp 将在登录后自动启动……", + "START_WITH_SYSTEM_LABEL": "登录后自动启动 WowUp", + "TELEMETRY_DESCRIPTION": "发送匿名应用安装数据和错误信息以帮助改进 WowUp。", "TELEMETRY_LABEL": "遥测", - "TITLE": "程序", - "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "TEXT_ELEMENT", - "USE_HARDWARE_ACCELERATION_DESCRIPTION": "TEXT_ELEMENT", - "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "TEXT_ELEMENT", - "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "TEXT_ELEMENT", - "USE_HARDWARE_ACCELERATION_LABEL": "TEXT_ELEMENT" + "TITLE": "应用程序", + "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "是否重新启动?", + "USE_HARDWARE_ACCELERATION_DESCRIPTION": "禁用硬件加速可能会提高 FPS 并修复其他渲染问题。更改此项需要重新启动。", + "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "禁用硬件加速需要重新启动 WowUp。", + "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "启用硬件加速需要重新启动 WowUp。", + "USE_HARDWARE_ACCELERATION_LABEL": "启用硬件加速" }, "DEBUG": { "DEBUG_DATA_BUTTON": "转储调试数据", - "DEBUG_DATA_DESCRIPTION": "记录调试数据以帮助诊断潜在的问题。这可以在您最新的日志文件中找到。", + "DEBUG_DATA_DESCRIPTION": "记录调试数据以帮助诊断潜在的问题。调试数据可以在最新的日志文件中找到。", "DEBUG_DATA_LABEL": "调试数据", "LOG_FILES_BUTTON": "显示日志文件", "LOG_FILES_DESCRIPTION": "打开包含您最后几个日志文件的文件夹。", "LOG_FILES_LABEL": "日志文件", - "TITLE": "除错" + "TITLE": "调试" }, "TABS": { - "APPLICATION": "Application", - "CLIENTS": "Clients", - "DEBUG": "Debug" + "APPLICATION": "应用程序", + "CLIENTS": "客户端", + "DEBUG": "调试" }, "WOW": { "AUTO_UPDATE_DESCRIPTION": "新安装的插件将默认设置为自动更新", "AUTO_UPDATE_LABEL": "自动更新", - "CLIENT_TYPE_INPUT_HINT": "The folder that contains the {clientTypeName} client folder \"{clientFolderName}\"", - "CLIENT_TYPE_PATH_LABEL": "{clientTypeName} path", - "DEFAULT_ADDON_CHANNEL_LABEL": "默认附加组件频道", - "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "附加组件频道", - "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "Select", + "CLIENT_TYPE_INPUT_HINT": "请选择 {clientTypeName} 客户端路径(\"{clientFolderName}\" 的上级路径)", + "CLIENT_TYPE_PATH_LABEL": "{clientTypeName} 路径", + "DEFAULT_ADDON_CHANNEL_LABEL": "默认插件更新通道", + "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "插件更新通道", + "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "浏览", "RESCAN_CLIENTS_BUTTON": "重新扫描", - "RESCAN_CLIENTS_LABEL": "重新扫描已安装的Warcraft产品世界", - "TITLE": "World of Warcraft" + "RESCAN_CLIENTS_LABEL": "重新扫描已安装的《魔兽世界》客户端", + "TITLE": "魔兽世界" } } } From 9b20831f25ee9c94a95692c6208784ac75fc7cf5 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 13:31:38 -0600 Subject: [PATCH 04/71] try out azure analytics so have more control or what is or is not sent to provider. --- wowup-electron/main.ts | 4 +- wowup-electron/package.json | 1 + .../addon-update-button.component.ts | 6 -- .../src/app/services/addons/addon.service.ts | 11 ++- .../services/analytics/analytics.service.ts | 93 ++++++++++++++----- .../src/environments/environment.ts | 13 +-- 6 files changed, 84 insertions(+), 44 deletions(-) diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index 964917e4..09fa853c 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -9,7 +9,7 @@ import { } from "electron"; import * as log from "electron-log"; import * as Store from "electron-store"; -import { arch, release } from "os"; +import * as os from "os"; import * as path from "path"; import { Subject } from "rxjs"; import { debounceTime } from "rxjs/operators"; @@ -61,7 +61,7 @@ if (preferenceStore.get(USE_HARDWARE_ACCELERATION_PREFERENCE_KEY) === "false") { app.commandLine.appendSwitch("disable-features", "OutOfBlinkCors"); -const USER_AGENT = `WowUp-Client/${app.getVersion()} (${release()}; ${arch()};${ +const USER_AGENT = `WowUp-Client/${app.getVersion()} (${os.type()}; ${os.release()}; ${os.arch()}; ${ isPortable ? " portable;" : "" } +https://wowup.io)`; log.info("USER_AGENT", USER_AGENT); diff --git a/wowup-electron/package.json b/wowup-electron/package.json index f743c31e..63f08a77 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -118,6 +118,7 @@ "@fortawesome/free-brands-svg-icons": "5.15.1", "@fortawesome/free-regular-svg-icons": "5.15.1", "@fortawesome/free-solid-svg-icons": "5.15.1", + "@microsoft/applicationinsights-web": "2.5.9", "@types/lodash": "4.14.165", "adm-zip": "0.4.16", "async": "3.2.0", diff --git a/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.ts b/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.ts index 7b15586c..bfd30ede 100644 --- a/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.ts +++ b/wowup-electron/src/app/components/addon-update-button/addon-update-button.component.ts @@ -84,12 +84,6 @@ export class AddonUpdateButtonComponent implements OnInit, OnDestroy { } public onInstallUpdateClick() { - this._analyticsService.trackUserAction( - "addons", - "update_addon", - this.getActionLabel() - ); - this._addonService.installAddon(this.listItem.addon.id); } diff --git a/wowup-electron/src/app/services/addons/addon.service.ts b/wowup-electron/src/app/services/addons/addon.service.ts index c07f5925..02e1f581 100644 --- a/wowup-electron/src/app/services/addons/addon.service.ts +++ b/wowup-electron/src/app/services/addons/addon.service.ts @@ -77,7 +77,10 @@ export class AddonService { var searchTasks = this._addonProviders.map((p) => p.searchByQuery(query, clientType)); var searchResults = await Promise.all(searchTasks); - await this._analyticsService.trackUserAction("addons", "search", `${clientType}|${query}`); + await this._analyticsService.trackAction("addon-search", { + clientType: getEnumName(WowClientType, clientType), + query, + }); const flatResults = searchResults.flat(1); @@ -275,7 +278,11 @@ export class AddonService { const actionLabel = `${getEnumName(WowClientType, addon.clientType)}|${addon.providerName}|${addon.externalId}|${ addon.name }`; - this._analyticsService.trackUserAction("addons", "install_by_id", actionLabel); + this._analyticsService.trackAction("install-addon", { + clientType: getEnumName(WowClientType, addon.clientType), + provider: addon.providerName, + addon: actionLabel, + }); await this.installDependencies(addon, onUpdate); diff --git a/wowup-electron/src/app/services/analytics/analytics.service.ts b/wowup-electron/src/app/services/analytics/analytics.service.ts index 0b9064dd..aea3b56e 100644 --- a/wowup-electron/src/app/services/analytics/analytics.service.ts +++ b/wowup-electron/src/app/services/analytics/analytics.service.ts @@ -1,5 +1,6 @@ import { HttpClient, HttpParams } from "@angular/common/http"; import { Injectable } from "@angular/core"; +import { ApplicationInsights } from "@microsoft/applicationinsights-web"; import { BehaviorSubject } from "rxjs"; import { v4 as uuidv4 } from "uuid"; import { AppConfig } from "../../../environments/environment"; @@ -16,6 +17,8 @@ export class AnalyticsService { private readonly _appVersion: string; private readonly _telemetryEnabledSrc = new BehaviorSubject(false); + private _insights?: ApplicationInsights; + public readonly telemetryPromptUsedKey = "telemetry_prompt_sent"; public readonly telemetryEnabledKey = "telemetry_enabled"; public readonly telemetryEnabled$ = this._telemetryEnabledSrc.asObservable(); @@ -25,19 +28,24 @@ export class AnalyticsService { } public get shouldPromptTelemetry() { - return ( - this._preferenceStorageService.get(this.telemetryEnabledKey) === undefined - ); + return this._preferenceStorageService.get(this.telemetryEnabledKey) === undefined; } public get telemetryEnabled() { - const preference = this._preferenceStorageService.findByKey( - this.telemetryEnabledKey - ); - return preference === true.toString(); + const preference = this._preferenceStorageService.findByKey(this.telemetryEnabledKey); + const value = preference === true.toString(); + + this.configureAppInsights(value); + + return value; } public set telemetryEnabled(value: boolean) { + if (this._insights) { + this._insights.appInsights.config.disableTelemetry = value; + console.debug("disableTelemetry", this._insights.appInsights.config.disableTelemetry); + } + this._preferenceStorageService.set(this.telemetryEnabledKey, value); this._telemetryEnabledSrc.next(value); } @@ -54,23 +62,41 @@ export class AnalyticsService { } public async trackStartup() { - await this.track((params) => { - params.set("t", "pageview"); - params.set("dp", "app/startup"); - }); + //Record an event + await this.track2("app-startup"); + + // await this.track((params) => { + // params.set("t", "pageview"); + // params.set("dp", "app/startup"); + // }); } - public async trackUserAction( - category: string, - action: string, - label: string = null - ) { - await this.track((params) => { - params.set("t", "event"); - params.set("ec", category); - params.set("ea", action); - params.set("el", label); + public async trackAction(name: string, properties: object = undefined) { + await this.track2(name, properties); + } + + public async trackUserAction(category: string, action: string, label: string = null) { + await this.track2(category, { + action, + label, }); + + // await this.track((params) => { + // params.set("t", "event"); + // params.set("ec", category); + // params.set("ea", action); + // params.set("el", label); + // }); + } + + private async track2(name: string, properties: object = undefined) { + if (!this.telemetryEnabled) { + return; + } + + this._insights?.trackEvent({ name, properties }); + + console.debug("Track", name); } private async track(action: (params: HttpParams) => void = undefined) { @@ -109,9 +135,7 @@ export class AnalyticsService { } private loadInstallId() { - let installId = this._preferenceStorageService.findByKey( - this.installIdPreferenceKey - ); + let installId = this._preferenceStorageService.findByKey(this.installIdPreferenceKey); if (installId) { return installId; } @@ -121,4 +145,25 @@ export class AnalyticsService { return installId; } + + private configureAppInsights(enable: boolean) { + if (!enable || this._insights) { + return; + } + + this._insights = new ApplicationInsights({ + config: { + instrumentationKey: AppConfig.azure.applicationInsightsKey, + }, + }); + this._insights.loadAppInsights(); + this._insights.trackPageView(); + + // If telemetry is off, dont let it track anything + this._insights.addTelemetryInitializer((envelop) => { + if (!this.telemetryEnabled) { + return false; + } + }); + } } diff --git a/wowup-electron/src/environments/environment.ts b/wowup-electron/src/environments/environment.ts index fdc2d849..a913816b 100644 --- a/wowup-electron/src/environments/environment.ts +++ b/wowup-electron/src/environments/environment.ts @@ -6,14 +6,7 @@ export const AppConfig = { rollbarAccessKey: "d01c11314a064572b11acee18d880650", googleAnalyticsId: "UA-92563227-4", wowupRepositoryUrl: "https://github.com/WowUp/WowUp", - firebaseConfig: { - apiKey: "AIzaSyBvZ1_ldinsxeh-iRI53REm8j1CPcQuIBw", - authDomain: "wowup-893c6.firebaseapp.com", - databaseURL: "https://wowup-893c6.firebaseio.com", - projectId: "wowup-893c6", - storageBucket: "wowup-893c6.appspot.com", - messagingSenderId: "914166112595", - appId: "1:914166112595:web:cdb02d231e5f9802b541a6", - measurementId: "G-V646RWJ5NK", - }, + azure: { + applicationInsightsKey: "4a53e8d9-796c-4f80-b1a6-9a058374dd6d" + } }; From 77407266907919009cbb58126b9eb4c44e034458 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:10:16 -0600 Subject: [PATCH 05/71] Add the ability to listen to the auto update timer My Addons should update when an auto update happens --- wowup-electron/src/app/app.component.ts | 10 +++++--- .../pages/my-addons/my-addons.component.ts | 17 +++++++------ .../app/services/session/session.service.ts | 24 ++++++++----------- wowup-electron/src/app/utils/string.utils.ts | 11 +++++++++ 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/wowup-electron/src/app/app.component.ts b/wowup-electron/src/app/app.component.ts index 67898e11..228b31ec 100644 --- a/wowup-electron/src/app/app.component.ts +++ b/wowup-electron/src/app/app.component.ts @@ -10,7 +10,7 @@ import { AnalyticsService } from "./services/analytics/analytics.service"; import { FileService } from "./services/files/file.service"; import { WowUpService } from "./services/wowup/wowup.service"; import { IconService } from "./services/icons/icon.service"; -import { filter } from "rxjs/operators"; +import { SessionService } from "./services/session/session.service"; const AUTO_UPDATE_PERIOD_MS = 60 * 60 * 1000; // 1 hour @@ -35,7 +35,8 @@ export class AppComponent implements AfterViewInit { private _wowUpService: WowUpService, private _dialog: MatDialog, private _addonService: AddonService, - private _iconService: IconService + private _iconService: IconService, + private _sessionService: SessionService ) {} ngAfterViewInit(): void { @@ -48,7 +49,10 @@ export class AppComponent implements AfterViewInit { } this.onAutoUpdateInterval(); - this._autoUpdateInterval = window.setInterval(this.onAutoUpdateInterval, AUTO_UPDATE_PERIOD_MS); + this._autoUpdateInterval = window.setInterval(() => { + this.onAutoUpdateInterval(); + this._sessionService.autoUpdateComplete(); + }, AUTO_UPDATE_PERIOD_MS); } openDialog(): void { diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts index e198fb2f..8103906b 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts @@ -36,7 +36,6 @@ import { WowUpService } from "../../services/wowup/wowup.service"; import { getEnumName } from "../../utils/enum.utils"; import { stringIncludes } from "../../utils/string.utils"; import { WowUpAddonService } from "../../services/wowup/wowup-addon.service"; -import { AddonChannelType } from "app/models/wowup/addon-channel-type"; @Component({ selector: "app-my-addons", @@ -47,13 +46,13 @@ import { AddonChannelType } from "app/models/wowup/addon-channel-type"; export class MyAddonsComponent implements OnInit, OnDestroy { @Input("tabIndex") tabIndex: number; - @ViewChild("addonContextMenuTrigger") contextMenu: MatMenuTrigger; - @ViewChild("addonMultiContextMenuTrigger") multiContextMenu: MatMenuTrigger; - @ViewChild("columnContextMenuTrigger") columnContextMenu: MatMenuTrigger; - @ViewChild("updateAllContextMenuTrigger") + @ViewChild("addonContextMenuTrigger", { static: false }) contextMenu: MatMenuTrigger; + @ViewChild("addonMultiContextMenuTrigger", { static: false }) multiContextMenu: MatMenuTrigger; + @ViewChild("columnContextMenuTrigger", { static: false }) columnContextMenu: MatMenuTrigger; + @ViewChild("updateAllContextMenuTrigger", { static: false }) updateAllContextMenu: MatMenuTrigger; @ViewChild(MatSort, { static: false }) sort: MatSort; - @ViewChild("table", { read: ElementRef }) table: ElementRef; + @ViewChild("table", { static: false, read: ElementRef }) table: ElementRef; private readonly _displayAddonsSrc = new BehaviorSubject([]); @@ -159,6 +158,11 @@ export class MyAddonsComponent implements OnInit, OnDestroy { this.lazyLoad(); }); + _sessionService.autoUpdateComplete$.subscribe(() => { + this._cdRef.markForCheck(); + this.onRefresh(); + }); + const addonInstalledSubscription = this.addonService.addonInstalled$.subscribe(this.onAddonInstalledEvent); const addonRemovedSubscription = this.addonService.addonRemoved$.subscribe(this.onAddonRemoved); @@ -637,7 +641,6 @@ export class MyAddonsComponent implements OnInit, OnDestroy { private loadAddons(clientType: WowClientType, rescan = false) { this.isBusy = true; this.enableControls = false; - this._cdRef.detectChanges(); console.log("Load-addons", clientType); diff --git a/wowup-electron/src/app/services/session/session.service.ts b/wowup-electron/src/app/services/session/session.service.ts index 402780b0..32f1f79d 100644 --- a/wowup-electron/src/app/services/session/session.service.ts +++ b/wowup-electron/src/app/services/session/session.service.ts @@ -9,25 +9,26 @@ import { WowUpService } from "../wowup/wowup.service"; providedIn: "root", }) export class SessionService { - private readonly _selectedClientTypeSrc = new BehaviorSubject( - WowClientType.None - ); + private readonly _selectedClientTypeSrc = new BehaviorSubject(WowClientType.None); private readonly _pageContextTextSrc = new BehaviorSubject(""); // right side bar text, context to the screen private readonly _statusTextSrc = new BehaviorSubject(""); // left side bar text, context to the app private readonly _selectedHomeTabSrc = new BehaviorSubject(0); + private readonly _autoUpdateCompleteSrc = new BehaviorSubject(0); public readonly selectedClientType$ = this._selectedClientTypeSrc.asObservable(); public readonly statusText$ = this._statusTextSrc.asObservable(); public readonly selectedHomeTab$ = this._selectedHomeTabSrc.asObservable(); public readonly pageContextText$ = this._pageContextTextSrc.asObservable(); + public readonly autoUpdateComplete$ = this._autoUpdateCompleteSrc.asObservable(); - constructor( - private _warcraftService: WarcraftService, - private _wowUpService: WowUpService - ) { + constructor(private _warcraftService: WarcraftService, private _wowUpService: WowUpService) { this.loadInitialClientType().pipe(first()).subscribe(); } + public autoUpdateComplete() { + this._autoUpdateCompleteSrc.next(Date.now()); + } + public setContextText(tabIndex: number, text: string) { if (tabIndex !== this._selectedHomeTabSrc.value) { return; @@ -62,15 +63,10 @@ export class SessionService { console.log("installedClientTypes", installedClientTypes); const lastSelectedType = this._wowUpService.lastSelectedClientType; console.log("lastSelectedType", lastSelectedType); - let initialClientType = installedClientTypes.length - ? installedClientTypes[0] - : WowClientType.None; + let initialClientType = installedClientTypes.length ? installedClientTypes[0] : WowClientType.None; // If the user has no stored type, or the type is no longer found just set it. - if ( - lastSelectedType == WowClientType.None || - !installedClientTypes.some((ct) => ct == lastSelectedType) - ) { + if (lastSelectedType == WowClientType.None || !installedClientTypes.some((ct) => ct == lastSelectedType)) { this._wowUpService.lastSelectedClientType = initialClientType; } else { initialClientType = lastSelectedType; diff --git a/wowup-electron/src/app/utils/string.utils.ts b/wowup-electron/src/app/utils/string.utils.ts index 350b0ab6..7bfab6aa 100644 --- a/wowup-electron/src/app/utils/string.utils.ts +++ b/wowup-electron/src/app/utils/string.utils.ts @@ -1,6 +1,17 @@ +import { createHash } from "crypto"; + export function stringIncludes(value: string, search: string) { if (value == null) { return false; } return value.trim().toLowerCase().indexOf(search.trim().toLowerCase()) >= 0; } + +/** + * Get the sha1 hash of a string + */ +export function getSha1Hash(str: string): string { + const shasum = createHash("sha1"); + shasum.update(str); + return shasum.digest("hex"); +} From 26ee8b56999c5b9899a520e0118dc54aca65c0c4 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:12:48 -0600 Subject: [PATCH 06/71] Wait until my-addons is loaded to subscribe --- .../app/pages/my-addons/my-addons.component.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts index 8103906b..ece76ef6 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts @@ -1,5 +1,6 @@ import { Overlay, OverlayRef } from "@angular/cdk/overlay"; import { + AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, @@ -43,7 +44,7 @@ import { WowUpAddonService } from "../../services/wowup/wowup-addon.service"; styleUrls: ["./my-addons.component.scss"], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class MyAddonsComponent implements OnInit, OnDestroy { +export class MyAddonsComponent implements OnInit, OnDestroy, AfterViewInit { @Input("tabIndex") tabIndex: number; @ViewChild("addonContextMenuTrigger", { static: false }) contextMenu: MatMenuTrigger; @@ -158,11 +159,6 @@ export class MyAddonsComponent implements OnInit, OnDestroy { this.lazyLoad(); }); - _sessionService.autoUpdateComplete$.subscribe(() => { - this._cdRef.markForCheck(); - this.onRefresh(); - }); - const addonInstalledSubscription = this.addonService.addonInstalled$.subscribe(this.onAddonInstalledEvent); const addonRemovedSubscription = this.addonService.addonRemoved$.subscribe(this.onAddonRemoved); @@ -197,6 +193,13 @@ export class MyAddonsComponent implements OnInit, OnDestroy { this.subscriptions.forEach((sub) => sub.unsubscribe()); } + public ngAfterViewInit(): void { + this._sessionService.autoUpdateComplete$.subscribe(() => { + this._cdRef.markForCheck(); + this.onRefresh(); + }); + } + public isLatestUpdateColumnVisible(): boolean { return this.columns.find((column) => column.name === "addon.latestVersion").visible; } From 578114dc6e94c5b9f5932ecd82e69d5a7ae2aabb Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:19:05 -0600 Subject: [PATCH 07/71] zonejs? --- wowup-electron/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 63f08a77..f6e88498 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -105,7 +105,7 @@ "typescript": "~4.0.5", "wait-on": "5.2.0", "webdriver-manager": "12.1.7", - "zone.js": "~0.11.3" + "zone.js": "0.10.3" }, "engines": { "node": ">=10.13.0" From 1431598fc8fe5cd9e2df62f05402f8a05f925120 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:25:44 -0600 Subject: [PATCH 08/71] Angular 11 --- wowup-electron/package.json | 24 +++++++++---------- wowup-electron/src/app/app-routing.module.ts | 2 +- wowup-electron/src/app/app.component.spec.ts | 6 ++--- .../external-link.directive.spec.ts | 4 ++-- .../app/pages/about/about.component.spec.ts | 4 ++-- .../get-addons/get-addons.component.spec.ts | 4 ++-- .../src/app/pages/home/home.component.spec.ts | 6 ++--- .../src/app/pipes/download-count.pipe.spec.ts | 4 ++-- ...get-addon-list-item-file-prop.pipe.spec.ts | 4 ++-- .../app/pipes/interface-format.pipe.spec.ts | 4 ++-- .../page-not-found.component.spec.ts | 4 ++-- 11 files changed, 33 insertions(+), 33 deletions(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index f6e88498..28a4626a 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -52,15 +52,15 @@ "@angular-eslint/eslint-plugin-template": "0.6.0-beta.0", "@angular-eslint/template-parser": "0.6.0-beta.0", "@angular/cli": "10.2.0", - "@angular/common": "10.2.2", - "@angular/compiler": "10.2.2", - "@angular/compiler-cli": "10.2.2", - "@angular/core": "10.2.2", - "@angular/forms": "10.2.2", - "@angular/language-service": "10.2.2", - "@angular/platform-browser": "10.2.2", - "@angular/platform-browser-dynamic": "10.2.2", - "@angular/router": "10.2.2", + "@angular/common": "11.0.0", + "@angular/compiler": "11.0.0", + "@angular/compiler-cli": "11.0.0", + "@angular/core": "11.0.0", + "@angular/forms": "11.0.0", + "@angular/language-service": "11.0.0", + "@angular/platform-browser": "11.0.0", + "@angular/platform-browser-dynamic": "11.0.0", + "@angular/router": "11.0.0", "@ngx-translate/core": "13.0.0", "@ngx-translate/http-loader": "6.0.0", "@types/adm-zip": "0.4.33", @@ -111,9 +111,9 @@ "node": ">=10.13.0" }, "dependencies": { - "@angular/animations": "~10.2.2", - "@angular/cdk": "10.2.7", - "@angular/material": "10.2.7", + "@angular/animations": "~11.0.0", + "@angular/cdk": "11.0.0", + "@angular/material": "11.0.0", "@fortawesome/fontawesome-svg-core": "1.2.32", "@fortawesome/free-brands-svg-icons": "5.15.1", "@fortawesome/free-regular-svg-icons": "5.15.1", diff --git a/wowup-electron/src/app/app-routing.module.ts b/wowup-electron/src/app/app-routing.module.ts index a910f458..30cbe855 100644 --- a/wowup-electron/src/app/app-routing.module.ts +++ b/wowup-electron/src/app/app-routing.module.ts @@ -16,7 +16,7 @@ const routes: Routes = [ ]; @NgModule({ - imports: [RouterModule.forRoot(routes), HomeRoutingModule], + imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' }), HomeRoutingModule], exports: [RouterModule], }) export class AppRoutingModule {} diff --git a/wowup-electron/src/app/app.component.spec.ts b/wowup-electron/src/app/app.component.spec.ts index c7972b19..541e52fd 100644 --- a/wowup-electron/src/app/app.component.spec.ts +++ b/wowup-electron/src/app/app.component.spec.ts @@ -1,11 +1,11 @@ -import { async, TestBed } from "@angular/core/testing"; +import { TestBed, waitForAsync } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; import { TranslateModule } from "@ngx-translate/core"; import { AppComponent } from "./app.component"; import { ElectronService } from "./services"; describe("AppComponent", () => { - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AppComponent], providers: [ElectronService], @@ -13,7 +13,7 @@ describe("AppComponent", () => { }).compileComponents(); })); - it("should create the app", async(() => { + it("should create the app", waitForAsync(() => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); diff --git a/wowup-electron/src/app/directives/external-link.directive.spec.ts b/wowup-electron/src/app/directives/external-link.directive.spec.ts index 705155bd..af391408 100644 --- a/wowup-electron/src/app/directives/external-link.directive.spec.ts +++ b/wowup-electron/src/app/directives/external-link.directive.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { ExternalLinkDirective } from "./external-link.directive"; describe("ExternalLinkDirective", () => { let directive: ExternalLinkDirective; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ExternalLinkDirective], }).compileComponents(); diff --git a/wowup-electron/src/app/pages/about/about.component.spec.ts b/wowup-electron/src/app/pages/about/about.component.spec.ts index 068c46f8..c541079e 100644 --- a/wowup-electron/src/app/pages/about/about.component.spec.ts +++ b/wowup-electron/src/app/pages/about/about.component.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { AboutComponent } from "./about.component"; describe("AboutComponent", () => { let component: AboutComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AboutComponent], }).compileComponents(); diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts b/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts index 69a2505e..1815a051 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { GetAddonsComponent } from "./get-addons.component"; describe("GetAddonsComponent", () => { let component: GetAddonsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [GetAddonsComponent], }).compileComponents(); diff --git a/wowup-electron/src/app/pages/home/home.component.spec.ts b/wowup-electron/src/app/pages/home/home.component.spec.ts index 8eb34c1c..87079c33 100644 --- a/wowup-electron/src/app/pages/home/home.component.spec.ts +++ b/wowup-electron/src/app/pages/home/home.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; import { TranslateModule } from "@ngx-translate/core"; import { HomeComponent } from "./home.component"; @@ -7,7 +7,7 @@ describe("HomeComponent", () => { let component: HomeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [HomeComponent], imports: [TranslateModule.forRoot(), RouterTestingModule], @@ -24,7 +24,7 @@ describe("HomeComponent", () => { expect(component).toBeTruthy(); }); - it("should render title in a h1 tag", async(() => { + it("should render title in a h1 tag", waitForAsync(() => { const compiled = fixture.debugElement.nativeElement; expect(compiled.querySelector("h1").textContent).toContain( "PAGES.HOME.TITLE" diff --git a/wowup-electron/src/app/pipes/download-count.pipe.spec.ts b/wowup-electron/src/app/pipes/download-count.pipe.spec.ts index 180898a1..9e4a0a4c 100644 --- a/wowup-electron/src/app/pipes/download-count.pipe.spec.ts +++ b/wowup-electron/src/app/pipes/download-count.pipe.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { DownloadCountPipe } from "./download-count.pipe"; describe("DownloadCountPipe", () => { let directive: DownloadCountPipe; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DownloadCountPipe], }).compileComponents(); diff --git a/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts b/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts index 00439374..d4013d87 100644 --- a/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts +++ b/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { GetAddonListItemFilePropPipe } from "./get-addon-list-item-file-prop.pipe"; describe("GetAddonListItemFilePropPipe", () => { let directive: GetAddonListItemFilePropPipe; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [GetAddonListItemFilePropPipe], }).compileComponents(); diff --git a/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts b/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts index aba5b4de..43b7fe82 100644 --- a/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts +++ b/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { InterfaceFormatPipe } from "./interface-format.pipe"; describe("InterfaceFormatPipe", () => { let directive: InterfaceFormatPipe; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [InterfaceFormatPipe], }).compileComponents(); diff --git a/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts b/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts index dd8bebbd..d4d8045e 100644 --- a/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts +++ b/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts @@ -1,11 +1,11 @@ -import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { PageNotFoundComponent } from "./page-not-found.component"; describe("PageNotFoundComponent", () => { let component: PageNotFoundComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [PageNotFoundComponent], }).compileComponents(); From e77cc61224dd15b06a7b07c8ddba9a5c598e4ae8 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:29:12 -0600 Subject: [PATCH 09/71] Karma? --- wowup-electron/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 28a4626a..148f63e7 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -88,7 +88,7 @@ "i18next-json-sync": "2.3.1", "jasmine-core": "3.6.0", "jasmine-spec-reporter": "6.0.0", - "karma": "5.2.3", + "karma": "5.1.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-electron": "6.3.1", "karma-jasmine": "4.0.1", From ed8b8d2f1c8f5f81742c1d298bff5c1ff590c507 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:34:35 -0600 Subject: [PATCH 10/71] Update angular cli --- wowup-electron/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 148f63e7..01df27f5 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -46,12 +46,12 @@ }, "devDependencies": { "@angular-builders/custom-webpack": "10.0.1", - "@angular-devkit/build-angular": "0.1002.0", + "@angular-devkit/build-angular": "0.1100.0", "@angular-eslint/builder": "0.6.0-beta.0", "@angular-eslint/eslint-plugin": "0.6.0-beta.0", "@angular-eslint/eslint-plugin-template": "0.6.0-beta.0", "@angular-eslint/template-parser": "0.6.0-beta.0", - "@angular/cli": "10.2.0", + "@angular/cli": "11.0.0", "@angular/common": "11.0.0", "@angular/compiler": "11.0.0", "@angular/compiler-cli": "11.0.0", From 6ce4338f2e8fea91cff7c29003a80a959f638048 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 14:55:07 -0600 Subject: [PATCH 11/71] update lint --- wowup-electron/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 01df27f5..b0423dd8 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -73,9 +73,9 @@ "@types/opossum": "4.1.1", "@types/slug": "0.9.1", "@types/uuid": "8.3.0", - "@typescript-eslint/eslint-plugin": "4.6.1", - "@typescript-eslint/eslint-plugin-tslint": "4.6.1", - "@typescript-eslint/parser": "4.6.1", + "@typescript-eslint/eslint-plugin": "4.7.0", + "@typescript-eslint/eslint-plugin-tslint": "4.7.0", + "@typescript-eslint/parser": "4.7.0", "chai": "4.2.0", "conventional-changelog-cli": "2.1.1", "core-js": "3.7.0", From 15edbf02ab7407d52cf887ce1330d91f1671a59c Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 15:45:16 -0600 Subject: [PATCH 12/71] Update main.ts --- wowup-electron/main.ts | 43 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index 09fa853c..533c2582 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -15,6 +15,7 @@ import { Subject } from "rxjs"; import { debounceTime } from "rxjs/operators"; import * as url from "url"; import * as platform from "./platform"; +import { minBy } from "lodash"; import { initializeAppUpdateIpcHandlers, initializeAppUpdater } from "./app-updater"; import "./ipc-events"; import { initializeIpcHanders } from "./ipc-events"; @@ -74,6 +75,40 @@ function canStartHidden() { return argv.hidden || app.getLoginItemSettings().wasOpenedAsHidden; } +function getNearestScreen(x: number, y: number) { + const displays = screen.getAllDisplays(); + return minBy(displays, (display) => Math.hypot(display.bounds.x - x, display.bounds.y - y)); +} + +function getMaxScreenX(display: Electron.Display) { + return display.bounds.x + display.bounds.width; +} + +function getMaxScreenY(display: Electron.Display) { + return display.bounds.y + display.bounds.height; +} + +function getConstrainedCoordinates(window: BrowserWindow) { + const bounds = window.getBounds(); + const nearestScreen = getNearestScreen(bounds.x, bounds.y); + + let x = bounds.x; + let y = bounds.y; + if (bounds.x < nearestScreen.bounds.x) { + x = nearestScreen.bounds.x; + } else if (bounds.x > getMaxScreenX(nearestScreen)) { + x = getMaxScreenX(nearestScreen); + } + + if (bounds.y < nearestScreen.bounds.y) { + y = nearestScreen.bounds.y; + } else if (bounds.y > getMaxScreenY(nearestScreen)) { + y = getMaxScreenY(nearestScreen); + } + + return { x, y }; +} + function windowStateManager(windowName: string, { width, height }: { width: number; height: number }) { let window: BrowserWindow; let windowState: WindowState; @@ -111,9 +146,15 @@ function windowStateManager(windowName: string, { width, height }: { width: numb function saveState() { log.info("saving window state"); + const bounds = window.getBounds(); + const constrained = getConstrainedCoordinates(window); + windowState.x = constrained.x; + windowState.y = constrained.y; + if (!window.isMaximized() && !window.isFullScreen()) { - windowState = { ...windowState, ...window.getBounds() }; + windowState = { ...windowState, width: bounds.width, height: bounds.height }; } + windowState.isMaximized = window.isMaximized(); windowState.isFullScreen = window.isFullScreen(); preferenceStore.set(`${windowName}-window-state`, windowState); From ed902864a77702e0c0fa723956665f2930178ecf Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 15:53:56 -0600 Subject: [PATCH 13/71] decompose a little --- wowup-electron/main.ts | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index 533c2582..fde1b179 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -88,25 +88,23 @@ function getMaxScreenY(display: Electron.Display) { return display.bounds.y + display.bounds.height; } +function constrainCoordinate(n: number, min: number, max: number) { + if (n < min) { + return min; + } else if (n > max) { + return max; + } + return n; +} + function getConstrainedCoordinates(window: BrowserWindow) { const bounds = window.getBounds(); const nearestScreen = getNearestScreen(bounds.x, bounds.y); - let x = bounds.x; - let y = bounds.y; - if (bounds.x < nearestScreen.bounds.x) { - x = nearestScreen.bounds.x; - } else if (bounds.x > getMaxScreenX(nearestScreen)) { - x = getMaxScreenX(nearestScreen); - } - - if (bounds.y < nearestScreen.bounds.y) { - y = nearestScreen.bounds.y; - } else if (bounds.y > getMaxScreenY(nearestScreen)) { - y = getMaxScreenY(nearestScreen); - } - - return { x, y }; + return { + x: constrainCoordinate(bounds.x, nearestScreen.bounds.x, getMaxScreenX(nearestScreen)), + y: constrainCoordinate(bounds.y, nearestScreen.bounds.y, getMaxScreenY(nearestScreen)), + }; } function windowStateManager(windowName: string, { width, height }: { width: number; height: number }) { From 5c2c444e08a5598ee9e7d92edc47cdd90b5a4b89 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 12 Nov 2020 16:10:20 -0600 Subject: [PATCH 14/71] add some github import logging --- wowup-electron/src/app/addon-providers/github-addon-provider.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wowup-electron/src/app/addon-providers/github-addon-provider.ts b/wowup-electron/src/app/addon-providers/github-addon-provider.ts index 26d71d76..673492d8 100644 --- a/wowup-electron/src/app/addon-providers/github-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/github-addon-provider.ts @@ -58,10 +58,12 @@ export class GitHubAddonProvider implements AddonProvider { const results = await this.getReleases(repoPath).toPromise(); const latestRelease = this.getLatestRelease(results); if (!latestRelease) { + console.log("latestRelease results", results); throw new Error(`No release found in ${addonUri}`); } const asset = this.getValidAsset(latestRelease, clientType); + console.log("latestRelease", latestRelease); if (asset == null) { throw new Error(`No release assets found in ${addonUri}`); } From 0628a55e6ccc8e7b937b947c821f255b7b791b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=83=81=ED=98=84=5FSoaa?= Date: Fri, 13 Nov 2020 16:19:38 +0900 Subject: [PATCH 15/71] - added korean localization --- wowup-electron/src/assets/i18n/ko.json | 350 ++++++++++++------------- 1 file changed, 175 insertions(+), 175 deletions(-) diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index b931ac58..539858df 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -1,256 +1,256 @@ { "APP": { - "AUTO_UPDATE_NOTIFICATION_BODY": "Automatically updated {count} {count, plural, =1{addon} other{addons}}.", - "AUTO_UPDATE_NOTIFICATION_TITLE": "Auto Updates", + "AUTO_UPDATE_NOTIFICATION_BODY": "{count} 개의 애드온이 자동업데이트됨", + "AUTO_UPDATE_NOTIFICATION_TITLE": "자동 업데이트", "SYSTEM_TRAY": { - "CHECK_UPDATE": "Check for Updates...", - "QUIT_ACTION": "Quit", - "SHOW_ACTION": "Show" + "CHECK_UPDATE": "업데이트 확인 중...", + "QUIT_ACTION": "종료", + "SHOW_ACTION": "창 열기" }, "WOWUP_UPDATE": { - "DOWNLOADED_TOOLTIP": "Install WowUp update", - "INSTALL_MESSAGE": "Do you want restart WowUp to install the update?", - "INSTALL_TITLE": "WowUp Update Ready", - "NOT_AVAILABLE": "Latest version of WowUp is already installed", - "PORTABLE_DOWNLOAD_MESSAGE": "Do you want to manually download the latest portable version?\n\nYou will need to close the app manually and copy over the new version.", - "PORTABLE_DOWNLOAD_TITLE": "Manual Download Required", - "SNACKBAR_ACTION": "Update", - "SNACKBAR_TEXT": "A new version of WowUp is available", - "TOOLTIP": "WowUp update available", - "UPDATE_ERROR": "Failed to get WowUp update" + "DOWNLOADED_TOOLTIP": "WowUp 업데이트 설치", + "INSTALL_MESSAGE": "업데이트를 설치하기 위해 WowUp을 재시작할까요?", + "INSTALL_TITLE": "WowUp 업데이트 준비됨", + "NOT_AVAILABLE": "최신 버전의 WowUp이 설치됨", + "PORTABLE_DOWNLOAD_MESSAGE": "최신 포터블 버전을 수동 다운로드하시겠습니까?\n\n앱을 수동으로 닫고 새 버전 파일로 엎어써야 합니다.", + "PORTABLE_DOWNLOAD_TITLE": "수동 다운로드 필요", + "SNACKBAR_ACTION": "업데이트", + "SNACKBAR_TEXT": "새 버전의 WowUp 설치 가능", + "TOOLTIP": "WowUp 업데이트가 있습니다.", + "UPDATE_ERROR": "업데이트 실패" } }, "COMMON": { "ADDON_STATE": { - "IGNORED": "Ignored", - "INSTALL": "Install", - "UNINSTALL": "Uninstall", + "IGNORED": "제외됨", + "INSTALL": "설치", + "UNINSTALL": "삭제", "UNKNOWN": "", - "UPDATE": "Update", - "UPTODATE": "Up to date" + "UPDATE": "업데이트", + "UPTODATE": "최신 버전" }, "ADDON_STATUS": { - "BACKINGUP": "Backing Up", - "COMPLETE": "Installed", - "DOWNLOADING": "Downloading", - "INSTALLING": "Installing", - "PENDING": "Pending", - "UNINSTALLING": "Uninstalling", - "UPDATING": "Updating..." + "BACKINGUP": "백업 중", + "COMPLETE": "설치됨", + "DOWNLOADING": "다운로드 중", + "INSTALLING": "설치 중", + "PENDING": "일시정지됨", + "UNINSTALLING": "삭제 중", + "UPDATING": "업데이트 중..." }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", - "DAYS_AGO": "{count} {count, plural, other{days}} ago", - "HOURS_AGO": "{count} {count, plural, other{hours}} ago", - "JUST_NOW": "Just now", - "MONTHS_AGO": "{count} {count, plural, one{month} other{months}} ago", - "YEARS_AGO": "{count} {count, plural, one{year} other{years}} ago", - "YESTERDAY": "Yesterday" + "DAYS_AGO": "{count}일 전", + "HOURS_AGO": "{count}시간 전", + "JUST_NOW": "방금", + "MONTHS_AGO": "{count}개월 전", + "YEARS_AGO": "{count}년 전", + "YESTERDAY": "어제" }, "DEPENDENCY": { - "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}" + "TOOLTIP": "{dependencyCount}개의 다른 애드온 참조" }, "DOWNLOAD_COUNT": { - "BILLION": "{count} billion", - "MILLION": "{count} million", - "THOUSAND": "{count} thousand" + "BILLION": "{count}b", + "MILLION": "{count}m", + "THOUSAND": "{count}k" }, "ENUM": { "ADDON_CHANNEL_TYPE": { - "ALPHA": "Alpha", - "BETA": "Beta", - "STABLE": "Stable" + "ALPHA": "알파", + "BETA": "베타", + "STABLE": "안정" } }, "PROGRESS_SPINNER": { - "LOADING": "Loading..." + "LOADING": "불러오는 중..." }, "SEARCH": { - "NO_ADDONS": "No addons found" + "NO_ADDONS": "애드온을 찾을 수 없습니다" } }, "DIALOGS": { "ADDON_DETAILS": { - "BY_AUTHOR": "By {authorName}", - "DEPENDENCY_TEXT": "This addon has {dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}", - "VIEW_IN_BROWSER_BUTTON": "View in browser", - "VIEW_ON_PROVIDER_PREFIX": "View on" + "BY_AUTHOR": "제작자: {authorName}", + "DEPENDENCY_TEXT": "이 애드온은 {dependencyCount}개의 다른 애드온을 참조합니다.", + "VIEW_IN_BROWSER_BUTTON": "브라우저에서 열기", + "VIEW_ON_PROVIDER_PREFIX": "다음에서 보기: " }, "ALERT": { - "POSITIVE_BUTTON": "Okay" + "POSITIVE_BUTTON": "확인" }, "CONFIRM": { - "NEGATIVE_BUTTON": "No", - "POSITIVE_BUTTON": "Yes" + "NEGATIVE_BUTTON": "아니오", + "POSITIVE_BUTTON": "네" }, "INSTALL_FROM_URL": { - "ADDON_URL_INPUT_LABEL": "Addon URL", - "ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub or WowInterface URL", - "CLOSE_BUTTON": "Close", - "DESCRIPTION": "If you want to install an addon directly from a URL paste it below to get started.", + "ADDON_URL_INPUT_LABEL": "애드온 URL 주소", + "ADDON_URL_INPUT_PLACEHOLDER": "예) GitHub 또는 WowInterface URL", + "CLOSE_BUTTON": "닫기", + "DESCRIPTION": "URL 주소로 직접 설치를 하려면 아래 입력란에 애드온 URL을 붙여넣으세요.", "ERROR": { - "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", - "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", - "INVALID_URL": "The given value is not a valid URL. Examples of valid addon URLs are:\n\t- https://github.com/teelolws/Altoholic-Retail\n\t- https://www.wowinterface.com/downloads/info25610-8.3-014.html\n\t- https://www.curseforge.com/wow/addons/altoholic", - "NO_ADDON_FOUND": "No addon was found, make sure your URL is pointing to the correct page.\n\nWhen installing from github, please make sure the repository has a release tag with a zip archive containing the addon.", - "TITLE": "Addon Installation Failed" + "FAILED_TO_CONNECT": "API 연결 실패. 잠시 후 다시 시도해주세요.", + "INSTALL_FAILED": "설치 실패! 뭔가 잘못됐습니다.다시 시도해주세요.\n\n이 메세지가 반복된다면, 디스코드의 #wow-support 채널에서 도움을 요청해보세요.", + "INVALID_URL": "URL 주소 형식이 잘못되었습니다. 올바른 애드온 주소 예제: \n\t- https://github.com/teelolws/Altoholic-Retail\n\t- https://www.wowinterface.com/downloads/info25610-8.3-014.html\n\t- https://www.curseforge.com/wow/addons/altoholic", + "NO_ADDON_FOUND": "애드온을 찾을 수 없습니다. 입력하신 주소가 올바른 애드온 페이지를 가리키고 있는지 확인해주세요.\n\nGithub에서 설치할 때는, 애드온을 zip 파일로 묶은 릴리즈 태그가 존재하는 저장소인지 확인하세요.", + "TITLE": "애드온 설치 실패" }, - "IMPORT_BUTTON": "Import", - "INSTALL_BUTTON": "Install", - "INSTALL_SUCCESS_LABEL": "Installed!", - "SUPPORTED_SOURCES": "Supports WowInterface and GitHub*", - "TITLE": "Install Addon URL" + "IMPORT_BUTTON": "가져오기", + "INSTALL_BUTTON": "설치", + "INSTALL_SUCCESS_LABEL": "설치됨!", + "SUPPORTED_SOURCES": "WowInterface 와 GitHub 주소가 지원됩니다", + "TITLE": "설치할 애드온 URL 주소" }, "TELEMETRY": { - "DESCRIPTION": "Help me improve WowUp by sending anonymous app install data and/or errors?", - "NEGATIVE_BUTTON": "No Thanks", - "POSITIVE_BUTTON": "Sure!", - "TITLE": "WowUp Telemetry" + "DESCRIPTION": "앱 설치 데이터 또는 오류를 익명으로 전송하여 WowUp 서비스 개선에 도움을 주시겠습니까?", + "NEGATIVE_BUTTON": "괜찮습니다.", + "POSITIVE_BUTTON": "물론!", + "TITLE": "원격 분석용 데이터 전송" } }, "PAGES": { "ABOUT": { - "CHANGE_LOG_SECTION_LABEL": "Change Log", + "CHANGE_LOG_SECTION_LABEL": "변경 이력", "TITLE": "WowUp.io", - "WEBSITE_LINK_LABEL": "Check out the website!" + "WEBSITE_LINK_LABEL": "웹사이트로 이동" }, "GET_ADDONS": { - "CLIENT_TYPE_SELECT_LABEL": "World of Warcraft", - "INSTALL_FROM_URL_BUTTON": "Install from URL", - "REFRESH_BUTTON": "Refresh", - "SEARCH_LABEL": "Search", + "CLIENT_TYPE_SELECT_LABEL": "월드 오브 워크래프트", + "INSTALL_FROM_URL_BUTTON": "URL 주소로 설치", + "REFRESH_BUTTON": "다시 불러오기", + "SEARCH_LABEL": "찾기", "TABLE": { - "ADDON_COLUMN_HEADER": "Addon", - "AUTHOR_COLUMN_HEADER": "Author(s)", - "DOWNLOAD_COUNT_COLUMN_HEADER": "Downloads", - "PROVIDER_COLUMN_HEADER": "Provider", - "RELEASED_AT_COLUMN_HEADER": "Released At", - "STATUS_COLUMN_HEADER": "Status" + "ADDON_COLUMN_HEADER": "애드온", + "AUTHOR_COLUMN_HEADER": "제작자", + "DOWNLOAD_COUNT_COLUMN_HEADER": "다운로드수", + "PROVIDER_COLUMN_HEADER": "제공자", + "RELEASED_AT_COLUMN_HEADER": "출시일", + "STATUS_COLUMN_HEADER": "상태" } }, "HOME": { - "ABOUT_TAB_TITLE": "About", - "GET_ADDONS_TAB_TITLE": "Get Addons", - "MY_ADDONS_TAB_TITLE": "My Addons", - "OPTIONS_TAB_TITLE": "Options" + "ABOUT_TAB_TITLE": "소개", + "GET_ADDONS_TAB_TITLE": "애드온 찾기", + "MY_ADDONS_TAB_TITLE": "내 애드온", + "OPTIONS_TAB_TITLE": "설정" }, "MY_ADDONS": { "ADDON_CONTEXT_MENU": { - "ADDONS_SELECTED": "{count} {count, plural, =1{addon} other{addons}} selected", - "ALPHA_ADDON_CHANNEL": "Alpha", - "AUTO_UPDATE_ADDON_BUTTON": "Auto Update", - "BETA_ADDON_CHANNEL": "Beta", - "CHANNEL_SUBMENT_TITLE": "Channel", - "IGNORE_ADDON_BUTTON": "Ignore", - "REINSTALL_ADDON_BUTTON": "Re-Install", - "REMOVE_ADDON_BUTTON": "Remove", - "SHOW_FOLDER": "Show Folder", - "STABLE_ADDON_CHANNEL": "Stable" + "ADDONS_SELECTED": "{count}개의 애드온이 선택됨", + "ALPHA_ADDON_CHANNEL": "알파", + "AUTO_UPDATE_ADDON_BUTTON": "자동 업데이트", + "BETA_ADDON_CHANNEL": "베타", + "CHANNEL_SUBMENT_TITLE": "채널", + "IGNORE_ADDON_BUTTON": "관리제외", + "REINSTALL_ADDON_BUTTON": "재설치", + "REMOVE_ADDON_BUTTON": "삭제", + "SHOW_FOLDER": "디렉토리 보기", + "STABLE_ADDON_CHANNEL": "안정" }, - "CHECK_UPDATES_BUTTON": "Check Updates", - "CHECK_UPDATES_BUTTON_TOOLTIP": "Check for latest addon updates", - "CLIENT_TYPE_SELECT_LABEL": "World of Warcraft", + "CHECK_UPDATES_BUTTON": "업데이트 체크", + "CHECK_UPDATES_BUTTON_TOOLTIP": "최신 애드온 업데이트를 체크", + "CLIENT_TYPE_SELECT_LABEL": "월드 오브 워크래프트", "COLUMNS_CONTEXT_MENU": { - "TITLE": "Show Columns" + "TITLE": "컬럼 보기" }, - "FILTER_LABEL": "Filter", + "FILTER_LABEL": "필터", "PAGE_CONTEXT_FOOTER": { - "ADDONS_INSTALLED": "{count} {count, plural, =1{addon} other{addons}}", - "JOIN_DISCORD": "Chat with us on Discord", - "PATREON_SUPPORT": "Support WowUp on Patreon", - "SEARCH_RESULTS": "{count} {count, plural, =1{result} other{results}}", - "VIEW_GITHUB": "Check out the code on GitHub", - "VIEW_GUIDE": "Check out our guide to see what WowUp can do" + "ADDONS_INSTALLED": "{count}개의 애드온", + "JOIN_DISCORD": "디스코드 입장", + "PATREON_SUPPORT": "Patreon에서 WowUp을 후원해주세요.", + "SEARCH_RESULTS": "{count}개의 결과", + "VIEW_GITHUB": "GitHub에서 코드 확인", + "VIEW_GUIDE": "WowUp 가이드 문서 보기" }, - "RESCAN_FOLDERS_BUTTON": "Re-Scan Folders", - "RESCAN_FOLDERS_BUTTON_TOOLTIP": "Scan your client folder for installed addons", - "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "TEXT_ELEMENT", - "RESCAN_FOLDERS_CONFIRMATION_TITLE": "TEXT_ELEMENT", + "RESCAN_FOLDERS_BUTTON": "디렉토리 재탐색", + "RESCAN_FOLDERS_BUTTON_TOOLTIP": "설치된 애드온 목록 확인을 위해 클라이언트 디렉토리를 탐색합니다", + "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "설치된 애드온을 찾기 위해 재탐색을 할 경우, 애드온 정보가 초기화될 수 있습니다. 특정 애드온이 인식되지 않았거나 버전 정보가 올바르게 표시되지 않을 경우에만 사용하세요. 탐색 작업 중 애드온이 삭제되지는 않으며, WowUp의 정보와 매칭작업만 이루어집니다.\n\n탐색 작업에 시작이 소요될 수 있습니다.", + "RESCAN_FOLDERS_CONFIRMATION_TITLE": "재탐색을 하시겠습니까?", "SPINNER": { - "GATHERING_ADDONS": "Gathering addons...", - "UPDATING": "Updating {updateCount}/{addonCount}", - "UPDATING_WITH_ADDON_NAME": "Updating {updateCount}/{addonCount}\n{clientType}: {addonName}" + "GATHERING_ADDONS": "애드온 수집 중...", + "UPDATING": "{updateCount}/{addonCount} 업데이트 중", + "UPDATING_WITH_ADDON_NAME": "{updateCount}/{addonCount} 업데이트 중\n{clientType}: {addonName}" }, "TABLE": { - "ADDON_COLUMN_HEADER": "Addon", - "ADDON_INSTALL_BUTTON": "Install", - "ADDON_UPDATE_BUTTON": "Update", - "AUTHOR_COLUMN_HEADER": "Author(s)", - "AUTO_UPDATE_ICON_TOOLTIP": "Auto update enabled", - "GAME_VERSION_COLUMN_HEADER": "Game Version", - "LATEST_VERSION_COLUMN_HEADER": "Latest Version", - "PROVIDER_COLUMN_HEADER": "Provider", - "PROVIDER_RELEASE_CHANNEL": "Provider Channel", - "RELEASED_AT_COLUMN_HEADER": "Released At", - "STATUS_COLUMN_HEADER": "Status", - "UPDATED_AT_COLUMN_HEADER": "Updated At" + "ADDON_COLUMN_HEADER": "애드온", + "ADDON_INSTALL_BUTTON": "설치", + "ADDON_UPDATE_BUTTON": "업데이트", + "AUTHOR_COLUMN_HEADER": "제작자", + "AUTO_UPDATE_ICON_TOOLTIP": "자동 업데이트 활성화됨", + "GAME_VERSION_COLUMN_HEADER": "게임 버전", + "LATEST_VERSION_COLUMN_HEADER": "최신 버전", + "PROVIDER_COLUMN_HEADER": "제공자", + "PROVIDER_RELEASE_CHANNEL": "제공자 채널", + "RELEASED_AT_COLUMN_HEADER": "출시일", + "STATUS_COLUMN_HEADER": "상태", + "UPDATED_AT_COLUMN_HEADER": "업데이트 날짜" }, "UNINSTALL_POPUP": { - "CONFIRMATION_ACTION_EXPLANATION": "This will remove all related folders from your World of Warcraft folder.", - "CONFIRMATION_LESS_THAN_THREE": "Are you sure you want to remove the following {count} addons?", - "CONFIRMATION_MORE_THAN_THREE": "Are you sure you want to remove the selected {count} addons?", - "CONFIRMATION_ONE": "Are you sure you want to remove {addonName}?", - "DEPENDENCY_MESSAGE": "{addonName} has {dependencyCount} {dependencyCount, plural, one{dependency} other{dependencies}}. Do you want to remove them also?", - "DEPENDENCY_TITLE": "Remove Addon Dependencies?", - "TITLE": "Uninstall {count, plural, =1{Addon} other{Addons}}?" + "CONFIRMATION_ACTION_EXPLANATION": "월드 오브 워크래프트 디렉토리에서 관련 파일 및 폴더가 모두 삭제됩니다.", + "CONFIRMATION_LESS_THAN_THREE": "정말 다음 {count}개의 애드온을 삭제하시겠습니까?", + "CONFIRMATION_MORE_THAN_THREE": "정말 선택한 {count}개의 애드온을 삭제하시겠습니까?", + "CONFIRMATION_ONE": "{addonName} 애드온을 삭제하시겠습니까?", + "DEPENDENCY_MESSAGE": "{addonName} 애드온이 참조하는 {dependencyCount} 개의 애드온이 추가설치되었습니다. 해당 애드온도 삭제할까요?", + "DEPENDENCY_TITLE": "참조하는 다른 애드온 삭제 확인", + "TITLE": "애드온 삭제" }, - "UPDATE_ALL_BUTTON": "Update All", - "UPDATE_ALL_BUTTON_TOOLTIP": "Update all addons for this client", + "UPDATE_ALL_BUTTON": "모두 업데이트", + "UPDATE_ALL_BUTTON_TOOLTIP": "이 클라이언트의 모든 애드온을 업데이트합니다", "UPDATE_ALL_CONTEXT_MENU": { - "UPDATE_ALL_CLIENTS_BUTTON": "Update All Clients", - "UPDATE_RETAIL_CLASSIC_BUTTON": "Update Retail/Classic" + "UPDATE_ALL_CLIENTS_BUTTON": "모든 클라이언트 업데이트", + "UPDATE_RETAIL_CLASSIC_BUTTON": "리테일/클래식 업데이트" } }, "OPTIONS": { "APPLICATION": { - "CURRENT_LANGUAGE_LABEL": "Current Language", - "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Enable/Disable various system notification popups, such as auto updated addons.", - "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Enable system notifications", - "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "When closing the WowUp window, minimize to the menu bar.", - "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "When closing the WowUp window, minimize to the taskbar notification area.", - "MINIMIZE_ON_CLOSE_LABEL": "Minimize on Close", - "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "Changing the default language requires the application to restart.", - "SET_LANGUAGE_CONFIRMATION_LABEL": "Setting a new default language", - "SET_LANGUAGE_DESCRIPTION": "Select a language to change to", - "SET_LANGUAGE_LABEL": "Set Language", - "START_MINIMIZED_DESCRIPTION": "...and will not show up on the screen", - "START_MINIMIZED_LABEL": "Launch WowUp minimized", - "START_WITH_SYSTEM_DESCRIPTION": "WowUp will be launched immediately after your operational system is loaded...", - "START_WITH_SYSTEM_LABEL": "Launch WowUp with system", - "TELEMETRY_DESCRIPTION": "Help improve WowUp by sending anonymous install data and/or errors.", - "TELEMETRY_LABEL": "Telemetry", - "TITLE": "Application", - "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Do you want to restart?", - "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Disabling hardware acceleration might solve FPS issues and fix other rendering issues in this app. Changing this setting requires a restart.", - "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "Disabling hardware acceleration requires the application to restart.", - "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "Enabling hardware acceleration requires the application to restart.", - "USE_HARDWARE_ACCELERATION_LABEL": "Enable Hardware Acceleration" + "CURRENT_LANGUAGE_LABEL": "현재 언어", + "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "애드온 자동업데이트 등과 같은 다양한 시스템 알림 팝업 활성화 여부", + "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "시스템 알림 활성화", + "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "WowUp 창을 닫으면 메뉴바로 최소화", + "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "WowUp 창을 닫으면 시스템 트레이로 최소화", + "MINIMIZE_ON_CLOSE_LABEL": "종료 시 최소화", + "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "기본 언어를 바꾸려면 애플리케이션을 다시 시작해야 합니다.", + "SET_LANGUAGE_CONFIRMATION_LABEL": "새 기본 언어 설정", + "SET_LANGUAGE_DESCRIPTION": "언어를 선택하세요.", + "SET_LANGUAGE_LABEL": "언어 설정", + "START_MINIMIZED_DESCRIPTION": "최소화된 채로 시작합니다.", + "START_MINIMIZED_LABEL": "시작 시 최소화", + "START_WITH_SYSTEM_DESCRIPTION": "OS 시동 시에 WowUp이 자동으로 실행됩니다.", + "START_WITH_SYSTEM_LABEL": "시동 시 자동 실행", + "TELEMETRY_DESCRIPTION": "앱 설치 데이터 또는 오류를 익명으로 전송하여 WowUp 서비스 개선에 도움을 줍니다.", + "TELEMETRY_LABEL": "데이터 전송", + "TITLE": "애픒리케이션", + "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "재시작하시겠습니까?", + "USE_HARDWARE_ACCELERATION_DESCRIPTION": "하드웨어 가속을 비활성화 하면 FPS 또는 다른 렌더링 이슈 해결이 가능합니다. 변경 시 재시작이 필요합니다", + "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "하드웨어 가속을 비활성화 하려면 재시작이 필요합니다.", + "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "하드웨어 가속을 활성화 하려면 재시작이 필요합니다.", + "USE_HARDWARE_ACCELERATION_LABEL": "하드웨어 가속 활성화" }, "DEBUG": { - "DEBUG_DATA_BUTTON": "Dump Debug Data", + "DEBUG_DATA_BUTTON": "디버그 데이터 덤프", "DEBUG_DATA_DESCRIPTION": "Log debug data to help with diagnosing potential issues. This can be found in your latest log file for the curious.", - "DEBUG_DATA_LABEL": "Debug Data", - "LOG_FILES_BUTTON": "Show Log Files", - "LOG_FILES_DESCRIPTION": "Open the folder that contains your last couple of log files.", - "LOG_FILES_LABEL": "Log Files", - "TITLE": "Debug" + "DEBUG_DATA_LABEL": "디버그 데이터", + "LOG_FILES_BUTTON": "로그 파일 보기", + "LOG_FILES_DESCRIPTION": "최근 로그파일이 포함된 폴더 열기", + "LOG_FILES_LABEL": "로그 파일", + "TITLE": "디버그" }, "TABS": { - "APPLICATION": "Application", - "CLIENTS": "Clients", - "DEBUG": "Debug" + "APPLICATION": "애플리케이션", + "CLIENTS": "클라이언트", + "DEBUG": "디버그" }, "WOW": { - "AUTO_UPDATE_DESCRIPTION": "Newly installed addons will be set to auto update by default", - "AUTO_UPDATE_LABEL": "Auto Update", - "CLIENT_TYPE_INPUT_HINT": "The folder that contains the {clientTypeName} client folder \"{clientFolderName}\"", - "CLIENT_TYPE_PATH_LABEL": "{clientTypeName} path", - "DEFAULT_ADDON_CHANNEL_LABEL": "Default Addon Channel", - "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Addon Channel", - "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "Select", - "RESCAN_CLIENTS_BUTTON": "Re-Scan", - "RESCAN_CLIENTS_LABEL": "Rescan installed World of Warcraft products", - "TITLE": "World of Warcraft" + "AUTO_UPDATE_DESCRIPTION": "새로 설치되는 애드온의 자동업데이트 옵션을 활성화합니다.", + "AUTO_UPDATE_LABEL": "자동 업데이트", + "CLIENT_TYPE_INPUT_HINT": "{clientTypeName} 클라이언트 \"{clientFolderName}\" 디렉토리를 포함하는 위치", + "CLIENT_TYPE_PATH_LABEL": "{clientTypeName} 설치 위치", + "DEFAULT_ADDON_CHANNEL_LABEL": "기본 애드온 채널", + "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "애드온 채널", + "OPEN_WOW_DIRECTORY_SELECT_BUTTON": "선택", + "RESCAN_CLIENTS_BUTTON": "재탐색", + "RESCAN_CLIENTS_LABEL": "설치된 월드 오브 워크래프트 제품 재탐색", + "TITLE": "월드 오브 워크래프트" } } } From e0723675780ff85d99d2efd0e3ed44bfe056cf78 Mon Sep 17 00:00:00 2001 From: Dean Campbell Date: Thu, 12 Nov 2020 23:43:21 -0800 Subject: [PATCH 16/71] Add url install download count translation --- .../install-from-url-dialog.component.html | 3 +-- wowup-electron/src/assets/i18n/de.json | 1 + wowup-electron/src/assets/i18n/en.json | 1 + wowup-electron/src/assets/i18n/es.json | 5 +++-- wowup-electron/src/assets/i18n/fr.json | 9 +++++---- wowup-electron/src/assets/i18n/it.json | 1 + wowup-electron/src/assets/i18n/ko.json | 1 + wowup-electron/src/assets/i18n/nb.json | 1 + wowup-electron/src/assets/i18n/pt.json | 1 + wowup-electron/src/assets/i18n/ru.json | 1 + wowup-electron/src/assets/i18n/zh.json | 1 + 11 files changed, 17 insertions(+), 8 deletions(-) diff --git a/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.html b/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.html index a0ca6fb5..0f177134 100644 --- a/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.html +++ b/wowup-electron/src/app/components/install-from-url-dialog/install-from-url-dialog.component.html @@ -42,8 +42,7 @@

{{ addon.name }}

{{ addon.author }}

- {{ addon.downloadCount | downloadCount }} downloads on - {{ addon.providerName }} + {{ "DIALOGS.INSTALL_FROM_URL.DOWNLOAD_COUNT" | translate:{count: addon.downloadCount, textCount: (addon.downloadCount | downloadCount), provider: addon.providerName} }}

diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index 4b8b0367..dc48e4f2 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "z.B. GitHub oder WowInterface URL", "CLOSE_BUTTON": "Schließen", "DESCRIPTION": "Wenn Sie ein Addon direkt von einer URL installieren möchten, fügen Sie es unten in der Zeile ein.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Keine Verbindung mit der API möglich, warte ein wenig und versuche es erneut.", "INSTALL_FAILED": "Beim Versuch das Addon zu installieren ist etwas schief gelaufen, bitte versuche er erneut.\n\nWenn diese Nachricht weiterhin erscheint, kannst du auf unsrem Discord im Kamlen #wow-support nach Hilfe fragen.", diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 5fc535d6..90be3ca7 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub or WowInterface URL", "CLOSE_BUTTON": "Close", "DESCRIPTION": "If you want to install an addon directly from a URL paste it below to get started.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index 904cb620..d9a72099 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Ejemplo: URL de GitHub o WowInterface", "CLOSE_BUTTON": "Cerrar", "DESCRIPTION": "Si desea instalar un addon directamente desde una URL, péguelo a continuación para comenzar.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "No se pudo conectar con la API. Por favor, espere un momento y vuelva a intentarlo.", "INSTALL_FAILED": "Ocurrió un error al intentar instalar el addon. Por favor, inténtelo de nuevo.\n\nSi se sigue mostrando este mensaje, puede obtener ayuda en Discord en el canal #wow-support.", @@ -190,9 +191,9 @@ "CONFIRMATION_LESS_THAN_THREE": "¿Quiere eliminar los siguientes {count} addons?", "CONFIRMATION_MORE_THAN_THREE": "¿Quiere eliminar los {count} addons seleccionados?", "CONFIRMATION_ONE": "¿Quiere eliminar {addonName}?", - "TITLE": "¿Desinstalar {count, plural, =1{Addon} other{Addons}}?", "DEPENDENCY_MESSAGE": "{addonName} tiene {dependencyCount} {dependencyCount, plural, one{dependencia} other{dependencias}}. ¿Quiere eliminarlas también?", - "DEPENDENCY_TITLE": "¿Eliminar Dependencias del Addon?" + "DEPENDENCY_TITLE": "¿Eliminar Dependencias del Addon?", + "TITLE": "¿Desinstalar {count, plural, =1{Addon} other{Addons}}?" }, "UPDATE_ALL_BUTTON": "Actualizar Todo", "UPDATE_ALL_BUTTON_TOOLTIP": "Actualizar todos los addons para este cliente", diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 2398948a..585cc307 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -14,7 +14,7 @@ "NOT_AVAILABLE": "La dernière version de WowUp est prêtre à être installée", "PORTABLE_DOWNLOAD_MESSAGE": "Do you want to manually download the latest portable version?\n\nYou will need to close the app manually and copy over the new version.", "PORTABLE_DOWNLOAD_TITLE": "Téléchargement manuel requis", - "SNACKBAR_ACTION": "Mise à jour ", "Vérifier si Mis ou Mise" + "SNACKBAR_ACTION": "Mise à jour ", "SNACKBAR_TEXT": "Une nouvelle version de WowUp est disponible", "TOOLTIP": "Mise à jour de WowUp disponible", "UPDATE_ERROR": "Impossible d'obtenir la mise à jour de WowUp" @@ -30,8 +30,8 @@ "UPTODATE": "À JOUR" }, "ADDON_STATUS": { - "BACKINGUP": "SAUVEGARDE", "à vérifier" - "COMPLETE": "ACHEVÉ", "à vérifier" + "BACKINGUP": "SAUVEGARDE", + "COMPLETE": "ACHEVÉ", "DOWNLOADING": "TÉLÉCHARGEMENT", "INSTALLING": "INSTALLATION", "PENDING": "EN ATTENTE", @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Ex. URL de GitHub ou WowInterface", "CLOSE_BUTTON": "Fermer", "DESCRIPTION": "Si vous voulez installer un addon directement à partir d'une URL, collez-là ci-dessous.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", @@ -228,7 +229,7 @@ }, "DEBUG": { "DEBUG_DATA_BUTTON": "Dump des données de débogage", - "DEBUG_DATA_DESCRIPTION": "Log les données de débogage pour aider à diagnostiquer les problèmes potentiels. Cela peut être trouvé dans votre dernier fichier journal pour les curieux.", "à améliorer !!" + "DEBUG_DATA_DESCRIPTION": "Log les données de débogage pour aider à diagnostiquer les problèmes potentiels. Cela peut être trouvé dans votre dernier fichier journal pour les curieux.", "DEBUG_DATA_LABEL": "Déboguer les données", "LOG_FILES_BUTTON": "Afficher les fichiers de log", "LOG_FILES_DESCRIPTION": "Ouvrez le dossier qui contient vos derniers fichiers journaux.", diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json index 96c0d0a1..aeb26c20 100644 --- a/wowup-electron/src/assets/i18n/it.json +++ b/wowup-electron/src/assets/i18n/it.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "URL di esempio GitHub o WowInterface", "CLOSE_BUTTON": "Chiudi", "DESCRIPTION": "Se si desidera installare un addon direttamente da un URL incollarlo qui sotto per iniziare.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Impossibile connettersi all'API, per favore riprovare più tardi.", "INSTALL_FAILED": "Qualcosa è andato storto nell'installazione dell'addon, per favore riprovare.\n\nSe questo messaggio continua ad apparire puoi chiederci aiuto su Discord, in #wow-support channel.", diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index b931ac58..70e41599 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub or WowInterface URL", "CLOSE_BUTTON": "Close", "DESCRIPTION": "If you want to install an addon directly from a URL paste it below to get started.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json index 744b58af..aa73d046 100644 --- a/wowup-electron/src/assets/i18n/nb.json +++ b/wowup-electron/src/assets/i18n/nb.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "F.Eks. GitHub eller WowInterface URL", "CLOSE_BUTTON": "Lukk", "DESCRIPTION": "Hvis du vil installere en utvidelse direkte fra en URL kan du lime den inn i feltet nedenfor.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json index 7e31b57d..b883f521 100644 --- a/wowup-electron/src/assets/i18n/pt.json +++ b/wowup-electron/src/assets/i18n/pt.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub ou WowInterface URL", "CLOSE_BUTTON": "Fechar", "DESCRIPTION": "Se você deseja instalar um addon diretamente de uma URL, cole-a abaixo para iniciar.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Não foi possível conectar à API, por favor espere um pouco e tente novamente.", "INSTALL_FAILED": "Algo deu errado ao tentar instalar o addon, por favor tente novamente.\n\nSe esta mensagem continuar aparecendo, você pode conseguir ajuda no Discord no canal #wow-support.", diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index 642ce0bd..08106647 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Например ссылки GitHub или WowInterface", "CLOSE_BUTTON": "Закрыть", "DESCRIPTION": "Если вы хотите установить модификацию непосредственно по ссылке, вставьте её ниже, чтобы начать.", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{загрузка} few{загрузки} other{загрузок}} на {provider}", "ERROR": { "FAILED_TO_CONNECT": "Не удается подключиться к API, подождите немного и повторите попытку.", "INSTALL_FAILED": "Что-то пошло не так при попытке установить модификацию, попытайтесь снова.\n\nЕсли это сообщение продолжает появляться, вы можете получить помощь в канале #wow-support нашего Discord сообщества.", diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index 6761dcde..a6e08b35 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -88,6 +88,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "例如,GitHub 或 WowInterface URL", "CLOSE_BUTTON": "关闭", "DESCRIPTION": "如需直接从某 URL 安装插件,请将其粘贴到下面以开始安装。", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "无法连接 API,请稍后重试。", "INSTALL_FAILED": "安装插件时出现了一些错误,请重试。\n\n如果一直出现此消息,可以加入 Discord #wow-support 频道寻求帮助(英语)。", From 2ec9f1df390a2e6bcc4924eacb68cfa2674637da Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 13 Nov 2020 09:08:38 -0600 Subject: [PATCH 17/71] minor changes --- wowup-electron/package.json | 2 +- .../src/app/services/electron/electron.service.ts | 12 ++++++++++++ wowup-electron/src/environments/environment.prod.ts | 11 ++--------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index b0423dd8..9aba7c26 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.0.0-beta.11", + "version": "2.0.0-beta.12", "description": "Word of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/app/services/electron/electron.service.ts b/wowup-electron/src/app/services/electron/electron.service.ts index e68e22d5..bfd7c020 100644 --- a/wowup-electron/src/app/services/electron/electron.service.ts +++ b/wowup-electron/src/app/services/electron/electron.service.ts @@ -195,6 +195,18 @@ export class ElectronService { return new Notification(title, options); } + public isHandlingProtocol(protocol: string): boolean { + return this.remote.app.isDefaultProtocolClient(protocol); + } + + public setHandleProtocol(protocol: string, enable: boolean) { + if (enable) { + return this.remote.app.setAsDefaultProtocolClient(protocol); + } else { + return this.remote.app.removeAsDefaultProtocolClient(protocol); + } + } + public async sendIpcValueMessage(channel: string, value: TIN): Promise { const request: ValueRequest = { value, diff --git a/wowup-electron/src/environments/environment.prod.ts b/wowup-electron/src/environments/environment.prod.ts index 05986723..64b3269f 100644 --- a/wowup-electron/src/environments/environment.prod.ts +++ b/wowup-electron/src/environments/environment.prod.ts @@ -6,14 +6,7 @@ export const AppConfig = { rollbarAccessKey: "d01c11314a064572b11acee18d880650", googleAnalyticsId: "UA-92563227-4", wowupRepositoryUrl: "https://github.com/WowUp/WowUp", - firebaseConfig: { - apiKey: "AIzaSyBvZ1_ldinsxeh-iRI53REm8j1CPcQuIBw", - authDomain: "wowup-893c6.firebaseapp.com", - databaseURL: "https://wowup-893c6.firebaseio.com", - projectId: "wowup-893c6", - storageBucket: "wowup-893c6.appspot.com", - messagingSenderId: "914166112595", - appId: "1:914166112595:web:cdb02d231e5f9802b541a6", - measurementId: "G-V646RWJ5NK", + azure: { + applicationInsightsKey: "4a53e8d9-796c-4f80-b1a6-9a058374dd6d", }, }; From 1c8d2208e9b01d30f7c11ed7260444a4ab18def4 Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 13 Nov 2020 11:07:59 -0600 Subject: [PATCH 18/71] Add Horde/Alliance styles --- wowup-electron/src/app/app.component.html | 2 +- wowup-electron/src/app/app.component.ts | 6 +- .../options-app-section.component.html | 34 ++- .../options-app-section.component.ts | 16 +- .../titlebar/titlebar.component.html | 25 ++- .../titlebar/titlebar.component.scss | 19 +- .../components/titlebar/titlebar.component.ts | 32 +-- wowup-electron/src/app/models/wowup/theme.ts | 4 + .../src/app/services/wowup/wowup.service.ts | 13 ++ wowup-electron/src/assets/changelog.json | 6 + wowup-electron/src/assets/i18n/en.json | 9 +- .../src/assets/images/alliance-1.png | Bin 0 -> 47326 bytes wowup-electron/src/assets/images/horde-1.png | Bin 0 -> 69629 bytes .../src/assets/images/wowup-white-1.png | Bin 0 -> 18481 bytes wowup-electron/src/common/constants.ts | 8 +- wowup-electron/src/custom-theme.scss | 200 ++++++++++++++++-- wowup-electron/src/styles.scss | 45 ++-- wowup-electron/src/variables.scss | 10 + 18 files changed, 337 insertions(+), 92 deletions(-) create mode 100644 wowup-electron/src/app/models/wowup/theme.ts create mode 100644 wowup-electron/src/assets/images/alliance-1.png create mode 100644 wowup-electron/src/assets/images/horde-1.png create mode 100644 wowup-electron/src/assets/images/wowup-white-1.png diff --git a/wowup-electron/src/app/app.component.html b/wowup-electron/src/app/app.component.html index f7910679..32bf6813 100644 --- a/wowup-electron/src/app/app.component.html +++ b/wowup-electron/src/app/app.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/wowup-electron/src/app/app.component.ts b/wowup-electron/src/app/app.component.ts index 228b31ec..750cad36 100644 --- a/wowup-electron/src/app/app.component.ts +++ b/wowup-electron/src/app/app.component.ts @@ -32,11 +32,11 @@ export class AppComponent implements AfterViewInit { private _electronService: ElectronService, private _fileService: FileService, private translate: TranslateService, - private _wowUpService: WowUpService, private _dialog: MatDialog, private _addonService: AddonService, private _iconService: IconService, - private _sessionService: SessionService + private _sessionService: SessionService, + private wowUpService: WowUpService ) {} ngAfterViewInit(): void { @@ -77,7 +77,7 @@ export class AppComponent implements AfterViewInit { return; } - if (this._wowUpService.enableSystemNotifications) { + if (this.wowUpService.enableSystemNotifications) { const iconPath = await this._fileService.getAssetFilePath("wowup_logo_512np.png"); const translated = await this.translate .get(["APP.AUTO_UPDATE_NOTIFICATION_TITLE", "APP.AUTO_UPDATE_NOTIFICATION_BODY"], { diff --git a/wowup-electron/src/app/components/options-app-section/options-app-section.component.html b/wowup-electron/src/app/components/options-app-section/options-app-section.component.html index fbe84b87..f06b47de 100644 --- a/wowup-electron/src/app/components/options-app-section/options-app-section.component.html +++ b/wowup-electron/src/app/components/options-app-section/options-app-section.component.html @@ -21,6 +21,25 @@
+ +
+
+
+
+ {{ "PAGES.OPTIONS.APPLICATION.THEME_LABEL" | translate }} +
+ {{ "PAGES.OPTIONS.APPLICATION.THEME_DESCRIPTION" | translate }} +
+ + {{ "PAGES.OPTIONS.APPLICATION.CURRENT_LANGUAGE_LABEL" | translate }} + + + {{ theme.display | translate }} + + + +
+
@@ -43,8 +62,7 @@ {{ "PAGES.OPTIONS.APPLICATION.MINIMIZE_ON_CLOSE_LABEL" | translate }}
- +
{{ minimizeOnCloseDescription }} @@ -58,8 +76,7 @@
+ (change)="onEnableSystemNotifications($event)"> @@ -74,8 +91,7 @@ {{ "PAGES.OPTIONS.APPLICATION.USE_HARDWARE_ACCELERATION_LABEL" | translate }} - + {{ "PAGES.OPTIONS.APPLICATION.USE_HARDWARE_ACCELERATION_DESCRIPTION" | translate }} @@ -90,8 +106,7 @@ {{ "PAGES.OPTIONS.APPLICATION.START_WITH_SYSTEM_DESCRIPTION" | translate }} + (change)="onStartWithSystemChange($event)"> @@ -105,8 +120,7 @@ {{ "PAGES.OPTIONS.APPLICATION.START_MINIMIZED_DESCRIPTION" | translate }} + (change)="onStartMinimizedChange($event)"> diff --git a/wowup-electron/src/app/components/options-app-section/options-app-section.component.ts b/wowup-electron/src/app/components/options-app-section/options-app-section.component.ts index af066405..6e366e18 100644 --- a/wowup-electron/src/app/components/options-app-section/options-app-section.component.ts +++ b/wowup-electron/src/app/components/options-app-section/options-app-section.component.ts @@ -3,10 +3,13 @@ import { MatDialog } from "@angular/material/dialog"; import { MatSelectChange } from "@angular/material/select"; import { MatSlideToggleChange } from "@angular/material/slide-toggle"; import { TranslateService } from "@ngx-translate/core"; -import { ElectronService } from "app/services"; -import { AnalyticsService } from "app/services/analytics/analytics.service"; -import { WowUpService } from "app/services/wowup/wowup.service"; +import { ElectronService } from "../../services"; +import { AnalyticsService } from "../../services/analytics/analytics.service"; +import { SessionService } from "../../services/session/session.service"; +import { WowUpService } from "../../services/wowup/wowup.service"; +import { Theme } from "../../models/wowup/theme"; import { ConfirmDialogComponent } from "../confirm-dialog/confirm-dialog.component"; +import { ALLIANCE_THEME, DEFAULT_THEME, HORDE_THEME } from "common/constants"; interface LocaleListItem { localeId: string; @@ -39,11 +42,18 @@ export class OptionsAppSectionComponent implements OnInit { { localeId: "zh", label: "简体中文" }, ]; + public themes: Theme[] = [ + { display: "APP.THEME.DEFAULT", class: DEFAULT_THEME }, + { display: "APP.THEME.ALLIANCE", class: ALLIANCE_THEME }, + { display: "APP.THEME.HORDE", class: HORDE_THEME }, + ]; + constructor( private _analyticsService: AnalyticsService, private _dialog: MatDialog, private _electronService: ElectronService, private _translateService: TranslateService, + public sessionService: SessionService, public wowupService: WowUpService ) {} diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.html b/wowup-electron/src/app/components/titlebar/titlebar.component.html index 1dacb6fb..0387d369 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.html +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.html @@ -1,34 +1,39 @@ -
-
-
- + +
+
WowUp.io
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.scss b/wowup-electron/src/app/components/titlebar/titlebar.component.scss index 84bd945e..e931d814 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.scss +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.scss @@ -10,7 +10,25 @@ height: 15px; width: 15px; } + + .theme-logo { + z-index: 1; + position: fixed; + top: 0; + left: 4px; + height: 78px; + opacity: 0.3; + overflow: hidden; + + img { + position: relative; + left: 0; + height: 150%; + width: auto; + } + } } + .mac { height: 22px; } @@ -64,7 +82,6 @@ z-index: 2500; &:hover { - background-color: $purple-2; cursor: pointer; } diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.ts b/wowup-electron/src/app/components/titlebar/titlebar.component.ts index 504238f4..1a4cce00 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.ts +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.ts @@ -1,4 +1,5 @@ import { Component, NgZone, OnDestroy, OnInit } from "@angular/core"; +import { ALLIANCE_THEME, DEFAULT_THEME, HORDE_THEME } from "common/constants"; import { platform } from "os"; import { Subscription } from "rxjs"; import { AppConfig } from "../../../environments/environment"; @@ -21,16 +22,10 @@ export class TitlebarComponent implements OnInit, OnDestroy { private _subscriptions: Subscription[] = []; - constructor( - public electronService: ElectronService, - private _wowUpService: WowUpService, - private _ngZone: NgZone - ) { - const windowMaximizedSubscription = this.electronService.windowMaximized$.subscribe( - (maximized) => { - this._ngZone.run(() => (this.isMaximized = maximized)); - } - ); + constructor(public electronService: ElectronService, private _wowUpService: WowUpService, private _ngZone: NgZone) { + const windowMaximizedSubscription = this.electronService.windowMaximized$.subscribe((maximized) => { + this._ngZone.run(() => (this.isMaximized = maximized)); + }); this._subscriptions = [windowMaximizedSubscription]; } @@ -41,6 +36,18 @@ export class TitlebarComponent implements OnInit, OnDestroy { this._subscriptions.forEach((subscription) => subscription.unsubscribe()); } + getLogoPath() { + switch (this._wowUpService.currentTheme) { + case HORDE_THEME: + return "assets/images/horde-1.png"; + case ALLIANCE_THEME: + return "assets/images/alliance-1.png"; + case DEFAULT_THEME: + default: + return "assets/images/wowup-white-1.png"; + } + } + onClickClose() { if (this._wowUpService.collapseToTray) { this.electronService.hideWindow(); @@ -57,10 +64,7 @@ export class TitlebarComponent implements OnInit, OnDestroy { const win = this.electronService.remote.getCurrentWindow(); if (this.isMac) { - const action = this.electronService.remote.systemPreferences.getUserDefault( - "AppleActionOnDoubleClick", - "string" - ); + const action = this.electronService.remote.systemPreferences.getUserDefault("AppleActionOnDoubleClick", "string"); if (action === "Maximize") { if (win.isMaximized()) { win.unmaximize(); diff --git a/wowup-electron/src/app/models/wowup/theme.ts b/wowup-electron/src/app/models/wowup/theme.ts new file mode 100644 index 00000000..0c5b554b --- /dev/null +++ b/wowup-electron/src/app/models/wowup/theme.ts @@ -0,0 +1,4 @@ +export interface Theme { + display: string; + class: string; +} diff --git a/wowup-electron/src/app/services/wowup/wowup.service.ts b/wowup-electron/src/app/services/wowup/wowup.service.ts index e007dcf3..80a147d9 100644 --- a/wowup-electron/src/app/services/wowup/wowup.service.ts +++ b/wowup-electron/src/app/services/wowup/wowup.service.ts @@ -27,6 +27,8 @@ import { MY_ADDONS_SORT_ORDER, GET_ADDONS_HIDDEN_COLUMNS_KEY, GET_ADDONS_SORT_ORDER, + CURRENT_THEME_KEY, + DEFAULT_THEME, } from "../../../common/constants"; import { WowClientType } from "../../models/warcraft/wow-client-type"; import { AddonChannelType } from "../../models/wowup/addon-channel-type"; @@ -150,6 +152,16 @@ export class WowUpService { this._preferenceChangeSrc.next({ key, value: value.toString() }); } + public get currentTheme() { + return this._preferenceStorageService.get(CURRENT_THEME_KEY); + } + + public set currentTheme(value: string) { + const key = CURRENT_THEME_KEY; + this._preferenceStorageService.set(key, value); + this._preferenceChangeSrc.next({ key, value: value }); + } + public get useHardwareAcceleration() { const preference = this._preferenceStorageService.findByKey(USE_HARDWARE_ACCELERATION_PREFERENCE_KEY); return preference === "true"; @@ -333,6 +345,7 @@ export class WowUpService { this.setDefaultPreference(ENABLE_SYSTEM_NOTIFICATIONS_PREFERENCE_KEY, true); this.setDefaultPreference(COLLAPSE_TO_TRAY_PREFERENCE_KEY, true); this.setDefaultPreference(USE_HARDWARE_ACCELERATION_PREFERENCE_KEY, true); + this.setDefaultPreference(CURRENT_THEME_KEY, DEFAULT_THEME); this.setDefaultPreference(WOWUP_RELEASE_CHANNEL_PREFERENCE_KEY, this.getDefaultReleaseChannel()); this.setDefaultClientPreferences(); } diff --git a/wowup-electron/src/assets/changelog.json b/wowup-electron/src/assets/changelog.json index 6699d382..f1e0793a 100644 --- a/wowup-electron/src/assets/changelog.json +++ b/wowup-electron/src/assets/changelog.json @@ -1,5 +1,11 @@ { "ChangeLogs": [ + { + "Version": "2.0.0-beta.12", + "changes": [ + "" + ] + }, { "Version": "2.0.0-beta.11", "changes": ["Italian locale updates (Bito)", "Fix a bug with the Spanish locale file"] diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 90be3ca7..194b41ff 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -18,6 +18,11 @@ "SNACKBAR_TEXT": "A new version of WowUp is available", "TOOLTIP": "WowUp update available", "UPDATE_ERROR": "Failed to get WowUp update" + }, + "THEME": { + "DEFAULT": "Default", + "HORDE": "Horde", + "ALLIANCE": "Alliance" } }, "COMMON": { @@ -225,7 +230,9 @@ "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Disabling hardware acceleration might solve FPS issues and fix other rendering issues in this app. Changing this setting requires a restart.", "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "Disabling hardware acceleration requires the application to restart.", "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "Enabling hardware acceleration requires the application to restart.", - "USE_HARDWARE_ACCELERATION_LABEL": "Enable Hardware Acceleration" + "USE_HARDWARE_ACCELERATION_LABEL": "Enable Hardware Acceleration", + "THEME_LABEL": "Color Theme", + "THEME_DESCRIPTION": "Change the color theme to whatever you like" }, "DEBUG": { "DEBUG_DATA_BUTTON": "Dump Debug Data", diff --git a/wowup-electron/src/assets/images/alliance-1.png b/wowup-electron/src/assets/images/alliance-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8ed809d7851bce39e794c9a8c18caa2533422a GIT binary patch literal 47326 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 z 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 literal 0 HcmV?d00001 diff --git a/wowup-electron/src/assets/images/wowup-white-1.png b/wowup-electron/src/assets/images/wowup-white-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4884fd02a16be568be3f576ea5d94853f28625c5 GIT binary patch literal 18481 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%0D2-PK^z}lYtOjB5QRkOE=B)#y! zdK17N!y=%Q1g2u^)<|T^HXBa!EdZ@4tP8no7$W2*em|m&Aq6UnaHbZT!VBce=<06;{5^SyOuCuFIyRc5hrK< zkzKaVMKn>y6a_%<48yK`*id>WXvatav`T{d*gH8Ga1HIxH2@DQl-^szI!#T zl~5(O_oU00U_KYm18YituDXlv1Ln>x=Q=t~nxs9R)0Ebk^KfTyGcRO!N3uk*;DbaNyCU)nmm ztk85xUL~CR8ezcsh9tcSr1jwj|Lo6!2=l)wg0{+s_5;fkz@#q(@2WB@l{rRP-%&~9 z3J^#^1Hk=5K{HLQo_J)5ek13V?q)GtV{I) zRl77K`UOsad|F?fgx3NGUJ8FX=$D>6#yQjTB+}fbb@0=|gvDyc zet-FR@;{N59U^0ZcDBD*!c+r$qD}5uG-B;-12l0BQZo^41k1AjBDV!{-HnRqqBsnwMlM}0#)MW{x4@ZT3OTlrdpcNa79pZ{5s^WNz=soby#6QF|2N) zl(2E~*^EPwcR9df{$2ta2f1c2gcXC&OWchPVL`QtO7{P2By7>2*e8BmA={sKX&v%u z%C*kK1_j{ES9!&wCl(+Y%O_powcZ)_AMAgBw>a^>uYHPxu;<4Ngx{LQK_2v2s5kDU z#jHpSks_5ZU-=Kf0Xha+D*xVFZogMk1Nrd=Lab=QF)gnW%8`IQ9?wx43)E9M!RAy6 zwaDKJz9pc?C`al1=}-a~{mwH7|NHNM5%~WgFfi$WBH$BgadYs~zzc#0JGR Date: Fri, 13 Nov 2020 11:23:11 -0600 Subject: [PATCH 19/71] Fix label --- .../options-app-section/options-app-section.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/app/components/options-app-section/options-app-section.component.html b/wowup-electron/src/app/components/options-app-section/options-app-section.component.html index f06b47de..10a74178 100644 --- a/wowup-electron/src/app/components/options-app-section/options-app-section.component.html +++ b/wowup-electron/src/app/components/options-app-section/options-app-section.component.html @@ -31,7 +31,7 @@ {{ "PAGES.OPTIONS.APPLICATION.THEME_DESCRIPTION" | translate }}

- {{ "PAGES.OPTIONS.APPLICATION.CURRENT_LANGUAGE_LABEL" | translate }} + {{ "PAGES.OPTIONS.APPLICATION.THEME_LABEL" | translate }} {{ theme.display | translate }} From 997591d772fe94a59abfad9a2258ac85deff19f4 Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 13 Nov 2020 15:25:45 -0600 Subject: [PATCH 20/71] Beta prep --- wowup-electron/src/assets/changelog.json | 8 +++++++- wowup-electron/src/assets/i18n/de.json | 7 +++++++ wowup-electron/src/assets/i18n/en.json | 16 ++++++++-------- wowup-electron/src/assets/i18n/es.json | 7 +++++++ wowup-electron/src/assets/i18n/fr.json | 7 +++++++ wowup-electron/src/assets/i18n/it.json | 7 +++++++ wowup-electron/src/assets/i18n/ko.json | 7 +++++++ wowup-electron/src/assets/i18n/nb.json | 7 +++++++ wowup-electron/src/assets/i18n/pt.json | 7 +++++++ wowup-electron/src/assets/i18n/ru.json | 7 +++++++ wowup-electron/src/assets/i18n/zh.json | 7 +++++++ 11 files changed, 78 insertions(+), 9 deletions(-) diff --git a/wowup-electron/src/assets/changelog.json b/wowup-electron/src/assets/changelog.json index f1e0793a..3a06d43b 100644 --- a/wowup-electron/src/assets/changelog.json +++ b/wowup-electron/src/assets/changelog.json @@ -3,7 +3,13 @@ { "Version": "2.0.0-beta.12", "changes": [ - "" + "German locale updates (Glow)", + "French locale updates (Galiwyx)", + "Chinese locale updates (Cyano Hao)", + "Korean locale updates ()", + "Auto update timer will now refresh the 'My Addons' list", + "Update to Angular 11", + "Fix issue with window snap fullscreen not saving screen" ] }, { diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index dc48e4f2..077d246f 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Beenden", "SHOW_ACTION": "Öffnen" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "WowUp Update installieren", "INSTALL_MESSAGE": "Willst du WowUp neu Starten um das Update zu installieren?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Starte WowUp mit dem System", "TELEMETRY_DESCRIPTION": "Helfen Sie WowUp zu verbessern, indem Sie anonyme Installationsdaten und/oder Fehler senden.", "TELEMETRY_LABEL": "Telemetrie", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Applikation", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Neustart der App?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Das Deaktivieren der Hardwarebeschleunigung kann FPS Probleme und Probleme beim Rendern beheben. Eine Änderung dieser Einstellung benötigt einen Neustart der App.", diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 194b41ff..f2221bfa 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Quit", "SHOW_ACTION": "Show" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Install WowUp update", "INSTALL_MESSAGE": "Do you want to restart WowUp and install the update?", @@ -18,11 +23,6 @@ "SNACKBAR_TEXT": "A new version of WowUp is available", "TOOLTIP": "WowUp update available", "UPDATE_ERROR": "Failed to get WowUp update" - }, - "THEME": { - "DEFAULT": "Default", - "HORDE": "Horde", - "ALLIANCE": "Alliance" } }, "COMMON": { @@ -225,14 +225,14 @@ "START_WITH_SYSTEM_LABEL": "Launch WowUp with system", "TELEMETRY_DESCRIPTION": "Help improve WowUp by sending anonymous install data and/or errors.", "TELEMETRY_LABEL": "Telemetry", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Application", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Do you want to restart?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Disabling hardware acceleration might solve FPS issues and fix other rendering issues in this app. Changing this setting requires a restart.", "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "Disabling hardware acceleration requires the application to restart.", "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "Enabling hardware acceleration requires the application to restart.", - "USE_HARDWARE_ACCELERATION_LABEL": "Enable Hardware Acceleration", - "THEME_LABEL": "Color Theme", - "THEME_DESCRIPTION": "Change the color theme to whatever you like" + "USE_HARDWARE_ACCELERATION_LABEL": "Enable Hardware Acceleration" }, "DEBUG": { "DEBUG_DATA_BUTTON": "Dump Debug Data", diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index d9a72099..16e79467 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Salir", "SHOW_ACTION": "Mostrar" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Instalar actualización de WowUp", "INSTALL_MESSAGE": "¿Quiere reiniciar WowUp para instalar la actualización?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Iniciar WowUp con el sistema", "TELEMETRY_DESCRIPTION": "Ayuda a mejorar WowUp enviando datos de instalación y/o errores de forma anónima.", "TELEMETRY_LABEL": "Telemetría", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Aplicación", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "¿Quiere reiniciar la aplicación?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Desactivar la aceleración por hardware puede resolver problemas de FPS y corregir otros problemas de renderizado en esta aplicación. Es necesario reiniciar tras cambiar esta opción.", diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 585cc307..a2cd86e3 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Quitter", "SHOW_ACTION": "Montrer" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installer la mise à jour WowUp", "INSTALL_MESSAGE": "Voulez-vous redémarrer WowUp pour installer la mise à jour ?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Launch WowUp with system", "TELEMETRY_DESCRIPTION": "Aidez à améliorer WowUp en envoyant des données d'installation et / ou des erreurs anonymes.", "TELEMETRY_LABEL": "Télémétrie", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Application", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "TEXT_ELEMENT", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "TEXT_ELEMENT", diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json index aeb26c20..058fb73a 100644 --- a/wowup-electron/src/assets/i18n/it.json +++ b/wowup-electron/src/assets/i18n/it.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Chiudi", "SHOW_ACTION": "Mostra" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installa l'aggiornamento di WowUp", "INSTALL_MESSAGE": "Vuoi riavviare WowUp per installare l'aggiornamento?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Lancia WowUp all'avvio del sistema", "TELEMETRY_DESCRIPTION": "Aiuta a migliorare WowUp inviando dati di installazione e/o errori anonimi.", "TELEMETRY_LABEL": "Telemetria", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Applicazione", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Vuoi riavviare?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "La disabilitazione dell'accelerazione hardware potrebbe risolvere i problemi di FPS e altri problemi di rendering in questa app. La modifica di questa impostazione richiede un riavvio.", diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index e86fcb80..7fa3eeb5 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "종료", "SHOW_ACTION": "창 열기" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "WowUp 업데이트 설치", "INSTALL_MESSAGE": "업데이트를 설치하기 위해 WowUp을 재시작할까요?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "시동 시 자동 실행", "TELEMETRY_DESCRIPTION": "앱 설치 데이터 또는 오류를 익명으로 전송하여 WowUp 서비스 개선에 도움을 줍니다.", "TELEMETRY_LABEL": "데이터 전송", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "애픒리케이션", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "재시작하시겠습니까?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "하드웨어 가속을 비활성화 하면 FPS 또는 다른 렌더링 이슈 해결이 가능합니다. 변경 시 재시작이 필요합니다", diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json index aa73d046..1387ff30 100644 --- a/wowup-electron/src/assets/i18n/nb.json +++ b/wowup-electron/src/assets/i18n/nb.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Quit", "SHOW_ACTION": "Show" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installer oppdatering til WowUp", "INSTALL_MESSAGE": "Vil du restarte WowUp for å installere oppdateringen?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Start WowUp sammen med maskinen", "TELEMETRY_DESCRIPTION": "Hjelp til med å forbedre WowUp ved å sende anonyme data og feilmeldinger.", "TELEMETRY_LABEL": "Telemetri", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Applikasjon", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Vil du restarte?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Deaktivering av maskinvareakselerasjon kan løse FPS-problemer og andre renderproblemer i appen. Denne endringen krever en restart", diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json index b883f521..2806a983 100644 --- a/wowup-electron/src/assets/i18n/pt.json +++ b/wowup-electron/src/assets/i18n/pt.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Sair", "SHOW_ACTION": "Mostrar" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Instalar atualização do WowUp", "INSTALL_MESSAGE": "Você gostaria de reiniciar o WowUp para instalar a atualização?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Iniciar WowUp com o sistema", "TELEMETRY_DESCRIPTION": "Ajude a melhorar o WowUp enviando dados e/ou erros de instalação anonimamente.", "TELEMETRY_LABEL": "Telemetria", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Aplicativo", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Você quer reiniciar", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Desabilitar aceleração de hardware pode solucionar problemas de FPS de corrigir outros problemas de renderização no app. Mudar esta opção exige reiniciar o aplicativo.", diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index 08106647..ba82c47b 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "Выход", "SHOW_ACTION": "Показать" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Установить обновление WowUp", "INSTALL_MESSAGE": "Вы хотите перезапустить WowUp чтобы установить обновление?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Запускать WowUp вместе со стартом системы", "TELEMETRY_DESCRIPTION": "Помогите улучшить WowUp, отправив анонимные данные об установке и/или ошибках.", "TELEMETRY_LABEL": "Телеметрия", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "Приложение", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Хотите перезапустить приложение?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Отключение аппаратного ускорения может решить проблемы с количеством кадров в секунду и исправить другие неполадки с приложением. Изменение этой настройки требует перезапуск приложения.", diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index a6e08b35..d94a4802 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -7,6 +7,11 @@ "QUIT_ACTION": "退出", "SHOW_ACTION": "显示" }, + "THEME": { + "ALLIANCE": "Alliance", + "DEFAULT": "Default", + "HORDE": "Horde" + }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "安装 WowUp 更新", "INSTALL_MESSAGE": "是否重新启动 WowUp 以完成更新?", @@ -220,6 +225,8 @@ "START_WITH_SYSTEM_LABEL": "登录后自动启动 WowUp", "TELEMETRY_DESCRIPTION": "发送匿名应用安装数据和错误信息以帮助改进 WowUp。", "TELEMETRY_LABEL": "遥测", + "THEME_DESCRIPTION": "Change the color theme to whatever you like", + "THEME_LABEL": "Color Theme", "TITLE": "应用程序", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "是否重新启动?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "禁用硬件加速可能会提高 FPS 并修复其他渲染问题。更改此项需要重新启动。", From 04371b0a0a16853c25dfb8a8b954b60298df402a Mon Sep 17 00:00:00 2001 From: john liddell Date: Fri, 13 Nov 2020 15:45:33 -0600 Subject: [PATCH 21/71] upddate angular again --- wowup-electron/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 9aba7c26..3e5ffdb0 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -46,12 +46,12 @@ }, "devDependencies": { "@angular-builders/custom-webpack": "10.0.1", - "@angular-devkit/build-angular": "0.1100.0", + "@angular-devkit/build-angular": "0.1100.1", "@angular-eslint/builder": "0.6.0-beta.0", "@angular-eslint/eslint-plugin": "0.6.0-beta.0", "@angular-eslint/eslint-plugin-template": "0.6.0-beta.0", "@angular-eslint/template-parser": "0.6.0-beta.0", - "@angular/cli": "11.0.0", + "@angular/cli": "11.0.1", "@angular/common": "11.0.0", "@angular/compiler": "11.0.0", "@angular/compiler-cli": "11.0.0", From 7a6ab6340e1bfee7dee9c78a099a0cfa7b0f5fbb Mon Sep 17 00:00:00 2001 From: Oleksandr <72464426+Medoke@users.noreply.github.com> Date: Sat, 14 Nov 2020 00:05:46 +0200 Subject: [PATCH 22/71] Color theme translation RU --- wowup-electron/src/assets/i18n/ru.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index ba82c47b..8448c7bf 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -8,9 +8,9 @@ "SHOW_ACTION": "Показать" }, "THEME": { - "ALLIANCE": "Alliance", - "DEFAULT": "Default", - "HORDE": "Horde" + "ALLIANCE": "Альянс", + "DEFAULT": "По умолчанию", + "HORDE": "Орда" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Установить обновление WowUp", @@ -225,8 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Запускать WowUp вместе со стартом системы", "TELEMETRY_DESCRIPTION": "Помогите улучшить WowUp, отправив анонимные данные об установке и/или ошибках.", "TELEMETRY_LABEL": "Телеметрия", - "THEME_DESCRIPTION": "Change the color theme to whatever you like", - "THEME_LABEL": "Color Theme", + "THEME_DESCRIPTION": "Изменить цветовую тему по вкусу", + "THEME_LABEL": "Цветовая тема", "TITLE": "Приложение", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Хотите перезапустить приложение?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Отключение аппаратного ускорения может решить проблемы с количеством кадров в секунду и исправить другие неполадки с приложением. Изменение этой настройки требует перезапуск приложения.", From 26c70d1f6ef6e23703d7123f29b805519e5f92d1 Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 13 Nov 2020 16:20:21 -0600 Subject: [PATCH 23/71] Create horde-fade.png --- wowup-electron/src/assets/images/horde-fade.png | Bin 0 -> 66467 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 wowup-electron/src/assets/images/horde-fade.png diff --git a/wowup-electron/src/assets/images/horde-fade.png b/wowup-electron/src/assets/images/horde-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..7e925124eceb7cac7f4974f52fe95c679ae3a1ae GIT binary patch literal 66467 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�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 VgQ3jpAs_H-O?5rB{1aCH`#;Eh;LHF3 literal 0 HcmV?d00001 From 5ef1c82c8acbee2c6c69d00e3f123fcb84923759 Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 13 Nov 2020 16:21:26 -0600 Subject: [PATCH 24/71] Update horde-fade.png --- .../src/assets/images/horde-fade.png | Bin 66467 -> 58080 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/wowup-electron/src/assets/images/horde-fade.png b/wowup-electron/src/assets/images/horde-fade.png index 7e925124eceb7cac7f4974f52fe95c679ae3a1ae..4bd0036fc0ca276e102196b7cb6ae941392120f2 100644 GIT binary patch literal 58080 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�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 VgQ3jpAs_H-O?5rB{1aCH`#;Eh;LHF3 From 848c9751ec7b539af97e0d2000c8fc14ef381070 Mon Sep 17 00:00:00 2001 From: john liddell Date: Fri, 13 Nov 2020 16:33:24 -0600 Subject: [PATCH 25/71] background thing --- .../titlebar/titlebar.component.scss | 7 ++++++ .../app/pages/options/options.component.html | 3 ++- .../app/pages/options/options.component.scss | 25 ++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.scss b/wowup-electron/src/app/components/titlebar/titlebar.component.scss index e931d814..2fe4ac9a 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.scss +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.scss @@ -26,11 +26,18 @@ height: 150%; width: auto; } + } } .mac { height: 22px; + + .theme-logo { + height: 70px; + right: 4px; + left: initial; + } } .windows, .linux { diff --git a/wowup-electron/src/app/pages/options/options.component.html b/wowup-electron/src/app/pages/options/options.component.html index c2d414b6..026b47a5 100644 --- a/wowup-electron/src/app/pages/options/options.component.html +++ b/wowup-electron/src/app/pages/options/options.component.html @@ -7,7 +7,8 @@ }" >
-
\ No newline at end of file +
diff --git a/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html b/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html index cfa26f13..88bb7532 100644 --- a/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html +++ b/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html @@ -7,9 +7,7 @@
{{ "PAGES.OPTIONS.DEBUG.LOG_FILES_LABEL" | translate }}
- {{ - "PAGES.OPTIONS.DEBUG.LOG_FILES_DESCRIPTION" | translate - }} + {{ "PAGES.OPTIONS.DEBUG.LOG_FILES_DESCRIPTION" | translate }}
- +
diff --git a/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.ts b/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.ts index 530937d4..86f7feb4 100644 --- a/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.ts +++ b/wowup-electron/src/app/components/options-wow-section/options-wow-section.component.ts @@ -21,17 +21,12 @@ export class OptionsWowSectionComponent implements OnInit { public wowUpReleaseChannels: { type: WowUpReleaseChannelType; name: string; - }[] = getEnumList(WowUpReleaseChannelType).map( - (type: WowUpReleaseChannelType) => ({ - type, - name: getEnumName(WowUpReleaseChannelType, type), - }) - ); + }[] = getEnumList(WowUpReleaseChannelType).map((type: WowUpReleaseChannelType) => ({ + type, + name: getEnumName(WowUpReleaseChannelType, type), + })); - constructor( - private _warcraftService: WarcraftService, - private _wowupService: WowUpService - ) {} + constructor(private _warcraftService: WarcraftService, private _wowupService: WowUpService) {} ngOnInit(): void { this.wowUpReleaseChannel = this._wowupService.wowUpReleaseChannel; diff --git a/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.html b/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.html index 7c01b492..3fc9cd0e 100644 --- a/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.html +++ b/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.html @@ -1,28 +1,34 @@
-
+
{{ thumbnailLetter }}
-
+
{{ isAlphaChannel ? "Alpha" : "Beta" }}
- {{ - addon.name - }} + {{ addon.name }}
- + {{ addon | getAddonListItemFileProp: "version":channel }}
-
-
\ No newline at end of file +
diff --git a/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.spec.ts b/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.spec.ts index bc905799..4a0bbf6e 100644 --- a/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.spec.ts +++ b/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.spec.ts @@ -4,12 +4,9 @@ import { PotentialAddonTableColumnComponent } from "./potential-addon-table-colu describe("PotentialAddonTableColumnComponent", () => { it("should create", () => { - inject( - [GetAddonListItemFilePropPipe], - (propPipe: GetAddonListItemFilePropPipe) => { - const pipe = new PotentialAddonTableColumnComponent(propPipe); - expect(pipe).toBeTruthy(); - } - ); + inject([GetAddonListItemFilePropPipe], (propPipe: GetAddonListItemFilePropPipe) => { + const pipe = new PotentialAddonTableColumnComponent(propPipe); + expect(pipe).toBeTruthy(); + }); }); }); diff --git a/wowup-electron/src/app/components/progress-button/progress-button.component.html b/wowup-electron/src/app/components/progress-button/progress-button.component.html index eea571f7..bf56788e 100644 --- a/wowup-electron/src/app/components/progress-button/progress-button.component.html +++ b/wowup-electron/src/app/components/progress-button/progress-button.component.html @@ -1,15 +1,4 @@ - diff --git a/wowup-electron/src/app/components/progress-button/progress-button.component.ts b/wowup-electron/src/app/components/progress-button/progress-button.component.ts index 5a4ba51d..4c72eeac 100644 --- a/wowup-electron/src/app/components/progress-button/progress-button.component.ts +++ b/wowup-electron/src/app/components/progress-button/progress-button.component.ts @@ -1,12 +1,4 @@ -import { - Component, - EventEmitter, - Input, - OnChanges, - OnInit, - Output, - SimpleChanges, -} from "@angular/core"; +import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from "@angular/core"; @Component({ selector: "app-progress-button", diff --git a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.ts b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.ts index cd801afa..8705e4f5 100644 --- a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.ts +++ b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.ts @@ -14,10 +14,8 @@ export class ProgressSpinnerComponent implements OnInit { constructor(private _translateService: TranslateService) {} ngOnInit(): void { - this._translateService - .get("COMMON.PROGRESS_SPINNER.LOADING") - .subscribe((translatedStr) => { - this.defaultMessage = translatedStr; - }); + this._translateService.get("COMMON.PROGRESS_SPINNER.LOADING").subscribe((translatedStr) => { + this.defaultMessage = translatedStr; + }); } } diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.html b/wowup-electron/src/app/components/titlebar/titlebar.component.html index 0387d369..1e9b671f 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.html +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.html @@ -1,8 +1,11 @@ -
+ }" +> @@ -25,16 +28,22 @@
-
+
-
+
-
\ No newline at end of file +
diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.scss b/wowup-electron/src/app/components/titlebar/titlebar.component.scss index 2fe4ac9a..7c0fe988 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.scss +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.scss @@ -26,7 +26,6 @@ height: 150%; width: auto; } - } } diff --git a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html index 2a52033a..b3f34df5 100644 --- a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html +++ b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html @@ -3,8 +3,7 @@
{{ - "PAGES.OPTIONS.WOW.CLIENT_TYPE_PATH_LABEL" - | translate: { clientTypeName: clientTypeName } + "PAGES.OPTIONS.WOW.CLIENT_TYPE_PATH_LABEL" | translate: { clientTypeName: clientTypeName } }} @@ -35,9 +34,7 @@

{{ "PAGES.OPTIONS.WOW.DEFAULT_ADDON_CHANNEL_LABEL" | translate }}

- {{ - "PAGES.OPTIONS.WOW.DEFAULT_ADDON_CHANNEL_SELECT_LABEL" | translate - }} + {{ "PAGES.OPTIONS.WOW.DEFAULT_ADDON_CHANNEL_SELECT_LABEL" | translate }} - {{ channel.name | translate }} + {{ + channel.name | translate + }}

{{ "PAGES.OPTIONS.WOW.AUTO_UPDATE_LABEL" | translate }}

- {{ - "PAGES.OPTIONS.WOW.AUTO_UPDATE_DESCRIPTION" | translate - }} + {{ "PAGES.OPTIONS.WOW.AUTO_UPDATE_DESCRIPTION" | translate }}
{ it("should create", () => { inject( - [ - MatDialog, - ElectronService, - WarcraftService, - WowUpService, - ChangeDetectorRef, - ], + [MatDialog, ElectronService, WarcraftService, WowUpService, ChangeDetectorRef], ( matDialog: MatDialog, electronService: ElectronService, diff --git a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts index b9a3e261..7716031d 100644 --- a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts +++ b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts @@ -1,10 +1,4 @@ -import { - ChangeDetectorRef, - Component, - Input, - OnDestroy, - OnInit, -} from "@angular/core"; +import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from "@angular/core"; import { MatDialog } from "@angular/material/dialog"; import { MatSelectChange } from "@angular/material/select"; import { MatSlideToggleChange } from "@angular/material/slide-toggle"; @@ -50,33 +44,23 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { ) { this.addonChannelInfos = this.getAddonChannelInfos(); - const warcraftProductSubscription = this._warcraftService.products$.subscribe( - (products) => { - const product = products.find((p) => p.clientType === this.clientType); - if (product) { - this.clientLocation = product.location; - this._cdRef.detectChanges(); - } + const warcraftProductSubscription = this._warcraftService.products$.subscribe((products) => { + const product = products.find((p) => p.clientType === this.clientType); + if (product) { + this.clientLocation = product.location; + this._cdRef.detectChanges(); } - ); + }); this.subscriptions.push(warcraftProductSubscription); } ngOnInit(): void { - this.selectedAddonChannelType = this._wowupService.getDefaultAddonChannel( - this.clientType - ); - this.clientAutoUpdate = this._wowupService.getDefaultAutoUpdate( - this.clientType - ); + this.selectedAddonChannelType = this._wowupService.getDefaultAddonChannel(this.clientType); + this.clientAutoUpdate = this._wowupService.getDefaultAutoUpdate(this.clientType); this.clientTypeName = getEnumName(WowClientType, this.clientType); - this.clientFolderName = this._warcraftService.getClientFolderName( - this.clientType - ); - this.clientLocation = this._warcraftService.getClientLocation( - this.clientType - ); + this.clientFolderName = this._warcraftService.getClientFolderName(this.clientType); + this.clientLocation = this._warcraftService.getClientLocation(this.clientType); } ngOnDestroy(): void { @@ -108,14 +92,10 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { }); } - private async selectWowClientPath( - clientType: WowClientType - ): Promise { - const dialogResult = await this._electronService.remote.dialog.showOpenDialog( - { - properties: ["openDirectory"], - } - ); + private async selectWowClientPath(clientType: WowClientType): Promise { + const dialogResult = await this._electronService.remote.dialog.showOpenDialog({ + properties: ["openDirectory"], + }); if (dialogResult.canceled) { return ""; @@ -129,28 +109,15 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { console.log("dialogResult", selectedPath); - const clientRelativePath = this._warcraftService.getClientRelativePath( - clientType, - selectedPath - ); + const clientRelativePath = this._warcraftService.getClientRelativePath(clientType, selectedPath); - if ( - this._warcraftService.setWowFolderPath(clientType, clientRelativePath) - ) { + if (this._warcraftService.setWowFolderPath(clientType, clientRelativePath)) { return clientRelativePath; } - const clientFolderName = this._warcraftService.getClientFolderName( - clientType - ); - const clientExecutableName = this._warcraftService.getExecutableName( - clientType - ); - const clientExecutablePath = path.join( - clientRelativePath, - clientFolderName, - clientExecutableName - ); + const clientFolderName = this._warcraftService.getClientFolderName(clientType); + const clientExecutableName = this._warcraftService.getExecutableName(clientType); + const clientExecutablePath = path.join(clientRelativePath, clientFolderName, clientExecutableName); const dialogRef = this._dialog.open(AlertDialogComponent, { data: { title: `Alert`, diff --git a/wowup-electron/src/app/directives/external-link.directive.spec.ts b/wowup-electron/src/app/directives/external-link.directive.spec.ts index af391408..4658aab3 100644 --- a/wowup-electron/src/app/directives/external-link.directive.spec.ts +++ b/wowup-electron/src/app/directives/external-link.directive.spec.ts @@ -5,11 +5,13 @@ describe("ExternalLinkDirective", () => { let directive: ExternalLinkDirective; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [ExternalLinkDirective], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ExternalLinkDirective], + }).compileComponents(); + }) + ); it("should create an instance", () => { fixture = TestBed.createComponent(ExternalLinkDirective); diff --git a/wowup-electron/src/app/interceptors/default-headers.interceptor.ts b/wowup-electron/src/app/interceptors/default-headers.interceptor.ts index 1b243055..7b5762f5 100644 --- a/wowup-electron/src/app/interceptors/default-headers.interceptor.ts +++ b/wowup-electron/src/app/interceptors/default-headers.interceptor.ts @@ -1,8 +1,4 @@ -import { - HttpHandler, - HttpInterceptor, - HttpRequest, -} from "@angular/common/http"; +import { HttpHandler, HttpInterceptor, HttpRequest } from "@angular/common/http"; import { Injectable } from "@angular/core"; @Injectable() diff --git a/wowup-electron/src/app/pages/about/about.component.html b/wowup-electron/src/app/pages/about/about.component.html index 9e6b8e85..3c503304 100644 --- a/wowup-electron/src/app/pages/about/about.component.html +++ b/wowup-electron/src/app/pages/about/about.component.html @@ -1,16 +1,25 @@ -
+ }" +>

{{ "PAGES.ABOUT.TITLE" | translate }}

v{{ version }}
@@ -28,4 +37,4 @@
-
\ No newline at end of file +
diff --git a/wowup-electron/src/app/pages/about/about.component.spec.ts b/wowup-electron/src/app/pages/about/about.component.spec.ts index c541079e..623ea854 100644 --- a/wowup-electron/src/app/pages/about/about.component.spec.ts +++ b/wowup-electron/src/app/pages/about/about.component.spec.ts @@ -5,11 +5,13 @@ describe("AboutComponent", () => { let component: AboutComponent; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [AboutComponent], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [AboutComponent], + }).compileComponents(); + }) + ); beforeEach(() => { fixture = TestBed.createComponent(AboutComponent); diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.html b/wowup-electron/src/app/pages/get-addons/get-addons.component.html index cb6e58e8..bd0ac485 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.html +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.html @@ -1,19 +1,22 @@ -
+ }" +>
- {{ - "PAGES.GET_ADDONS.CLIENT_TYPE_SELECT_LABEL" | translate - }} - - + {{ "PAGES.GET_ADDONS.CLIENT_TYPE_SELECT_LABEL" | translate }} + + {{ warcraftService.getClientDisplayName(clientType) }} @@ -22,23 +25,40 @@
- {{ - "PAGES.GET_ADDONS.SEARCH_LABEL" | translate - }} + {{ "PAGES.GET_ADDONS.SEARCH_LABEL" | translate }} -
- -
@@ -54,24 +74,34 @@
- +
- - - + +
{{ "PAGES.GET_ADDONS.TABLE.ADDON_COLUMN_HEADER" | translate }} - + - {{ - "PAGES.GET_ADDONS.TABLE.DOWNLOAD_COUNT_COLUMN_HEADER" | translate - }} + {{ "PAGES.GET_ADDONS.TABLE.DOWNLOAD_COUNT_COLUMN_HEADER" | translate }} {{ element.downloadCount | downloadCount }} @@ -83,14 +113,19 @@ {{ "PAGES.GET_ADDONS.TABLE.RELEASED_AT_COLUMN_HEADER" | translate }} - -
+ +
{{ releasedAt | relativeDuration }}
@@ -124,23 +159,35 @@ {{ "PAGES.GET_ADDONS.TABLE.STATUS_COLUMN_HEADER" | translate }}
- +
-
-
+
@@ -149,9 +196,13 @@
- + {{ column.display | translate }} - \ No newline at end of file + diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts b/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts index 1815a051..34fd46e4 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.spec.ts @@ -5,11 +5,13 @@ describe("GetAddonsComponent", () => { let component: GetAddonsComponent; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [GetAddonsComponent], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [GetAddonsComponent], + }).compileComponents(); + }) + ); beforeEach(() => { fixture = TestBed.createComponent(GetAddonsComponent); diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.ts b/wowup-electron/src/app/pages/get-addons/get-addons.component.ts index f60e9d51..e2179d7e 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.ts +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.ts @@ -138,7 +138,7 @@ export class GetAddonsComponent implements OnInit, OnDestroy { if (this._automaticSort) { return; } - + if (this.table) { this.table.nativeElement.scrollIntoView({ behavior: "smooth" }); } diff --git a/wowup-electron/src/app/pages/home/home.component.html b/wowup-electron/src/app/pages/home/home.component.html index 6aa0c8e3..b374637a 100644 --- a/wowup-electron/src/app/pages/home/home.component.html +++ b/wowup-electron/src/app/pages/home/home.component.html @@ -8,22 +8,13 @@ [(selectedIndex)]="selectedIndex" (selectedIndexChange)="onSelectedIndexChange($event)" > - + - + - + diff --git a/wowup-electron/src/app/pages/home/home.component.spec.ts b/wowup-electron/src/app/pages/home/home.component.spec.ts index 87079c33..fc6a6df3 100644 --- a/wowup-electron/src/app/pages/home/home.component.spec.ts +++ b/wowup-electron/src/app/pages/home/home.component.spec.ts @@ -7,12 +7,14 @@ describe("HomeComponent", () => { let component: HomeComponent; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [HomeComponent], - imports: [TranslateModule.forRoot(), RouterTestingModule], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [HomeComponent], + imports: [TranslateModule.forRoot(), RouterTestingModule], + }).compileComponents(); + }) + ); beforeEach(() => { fixture = TestBed.createComponent(HomeComponent); @@ -24,10 +26,11 @@ describe("HomeComponent", () => { expect(component).toBeTruthy(); }); - it("should render title in a h1 tag", waitForAsync(() => { - const compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelector("h1").textContent).toContain( - "PAGES.HOME.TITLE" - ); - })); + it( + "should render title in a h1 tag", + waitForAsync(() => { + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector("h1").textContent).toContain("PAGES.HOME.TITLE"); + }) + ); }); diff --git a/wowup-electron/src/app/pages/home/home.module.ts b/wowup-electron/src/app/pages/home/home.module.ts index 1789c56b..a39340ae 100644 --- a/wowup-electron/src/app/pages/home/home.module.ts +++ b/wowup-electron/src/app/pages/home/home.module.ts @@ -62,13 +62,7 @@ import { HomeComponent } from "./home.component"; OptionsAppSectionComponent, OptionsDebugSectionComponent, ], - imports: [ - CommonModule, - SharedModule, - HomeRoutingModule, - MatModule, - DirectiveModule, - ], + imports: [CommonModule, SharedModule, HomeRoutingModule, MatModule, DirectiveModule], providers: [DatePipe, GetAddonListItemFilePropPipe], }) export class HomeModule {} diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.html b/wowup-electron/src/app/pages/my-addons/my-addons.component.html index c951140e..307bd5d8 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.html +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.html @@ -1,14 +1,21 @@ -
+ }" +>
{{ "PAGES.MY_ADDONS.CLIENT_TYPE_SELECT_LABEL" | translate }} - + {{ warcraftService.getClientDisplayName(clientType) }} @@ -20,28 +27,55 @@ {{ "PAGES.MY_ADDONS.FILTER_LABEL" | translate }} -
- - -
@@ -57,15 +91,26 @@
- +
@@ -83,9 +128,14 @@ - @@ -94,8 +144,12 @@ - @@ -104,9 +158,14 @@ - @@ -141,8 +200,11 @@
{{ element.addon.providerSource }}
- + @@ -160,24 +222,42 @@ - + - +
{{ "PAGES.MY_ADDONS.TABLE.ADDON_COLUMN_HEADER" | translate }} - + {{ "PAGES.MY_ADDONS.TABLE.UPDATED_AT_COLUMN_HEADER" | translate }} + matTooltipPosition="above" + matTooltipShowDelay="500" + > {{ element.installedAt | relativeDuration }} {{ "PAGES.MY_ADDONS.TABLE.LATEST_VERSION_COLUMN_HEADER" | translate }} + {{ element.addon.latestVersion }} {{ "PAGES.MY_ADDONS.TABLE.RELEASED_AT_COLUMN_HEADER" | translate }} + matTooltipPosition="above" + matTooltipShowDelay="500" + > {{ element.addon.releasedAt | relativeDuration }}
-
+
-
+
{{ listItem.thumbnailLetter }} @@ -192,45 +272,97 @@
- + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.IGNORE_ADDON_BUTTON" | translate }} - + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.AUTO_UPDATE_ADDON_BUTTON" | translate }} - - - - - + + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.STABLE_ADDON_CHANNEL" | translate }} - + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.BETA_ADDON_CHANNEL" | translate }} - + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.ALPHA_ADDON_CHANNEL" | translate }} @@ -238,21 +370,33 @@ -
+
PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.ADDONS_SELECTED
- + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.IGNORE_ADDON_BUTTON" | translate }} - + (change)="onClickAutoUpdateAddons($event, listItems)" + > {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.AUTO_UPDATE_ADDON_BUTTON" | translate }}
- + {{ column.display | translate }}
-
-
+
- - - \ No newline at end of file + diff --git a/wowup-electron/src/app/pages/options/options.component.html b/wowup-electron/src/app/pages/options/options.component.html index fd108449..d692ea2f 100644 --- a/wowup-electron/src/app/pages/options/options.component.html +++ b/wowup-electron/src/app/pages/options/options.component.html @@ -1,13 +1,16 @@ -
+ }" +> diff --git a/wowup-electron/src/app/pages/options/options.component.scss b/wowup-electron/src/app/pages/options/options.component.scss index ca527cfb..ff1bef95 100644 --- a/wowup-electron/src/app/pages/options/options.component.scss +++ b/wowup-electron/src/app/pages/options/options.component.scss @@ -21,9 +21,9 @@ z-index: 1; overflow: hidden; - img { - height: 100vh; - } + img { + height: 100vh; + } } .nav-container { diff --git a/wowup-electron/src/app/pipes/download-count.pipe.spec.ts b/wowup-electron/src/app/pipes/download-count.pipe.spec.ts index 9e4a0a4c..5ce1c232 100644 --- a/wowup-electron/src/app/pipes/download-count.pipe.spec.ts +++ b/wowup-electron/src/app/pipes/download-count.pipe.spec.ts @@ -5,11 +5,13 @@ describe("DownloadCountPipe", () => { let directive: DownloadCountPipe; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [DownloadCountPipe], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [DownloadCountPipe], + }).compileComponents(); + }) + ); it("should create an instance", () => { fixture = TestBed.createComponent(DownloadCountPipe); diff --git a/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts b/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts index d4013d87..109731d0 100644 --- a/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts +++ b/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.spec.ts @@ -5,11 +5,13 @@ describe("GetAddonListItemFilePropPipe", () => { let directive: GetAddonListItemFilePropPipe; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [GetAddonListItemFilePropPipe], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [GetAddonListItemFilePropPipe], + }).compileComponents(); + }) + ); it("should create an instance", () => { fixture = TestBed.createComponent(GetAddonListItemFilePropPipe); diff --git a/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.ts b/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.ts index ff13e3ea..adb96a43 100644 --- a/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.ts +++ b/wowup-electron/src/app/pipes/get-addon-list-item-file-prop.pipe.ts @@ -8,11 +8,7 @@ import * as SearchResults from "../utils/search-result.utils"; name: "getAddonListItemFileProp", }) export class GetAddonListItemFilePropPipe implements PipeTransform { - transform( - item: GetAddonListItem, - prop: string, - channel: AddonChannelType - ): any { + transform(item: GetAddonListItem, prop: string, channel: AddonChannelType): any { let file = SearchResults.getLatestFile(item.searchResult, channel); if (!file) { file = _.first(_.orderBy(item.searchResult.files, "releaseDate", "desc")); diff --git a/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts b/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts index 43b7fe82..354c0050 100644 --- a/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts +++ b/wowup-electron/src/app/pipes/interface-format.pipe.spec.ts @@ -5,11 +5,13 @@ describe("InterfaceFormatPipe", () => { let directive: InterfaceFormatPipe; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [InterfaceFormatPipe], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [InterfaceFormatPipe], + }).compileComponents(); + }) + ); it("should create an instance", () => { fixture = TestBed.createComponent(InterfaceFormatPipe); diff --git a/wowup-electron/src/app/pipes/relative-duration-pipe.spec.ts b/wowup-electron/src/app/pipes/relative-duration-pipe.spec.ts index 36cb866d..3a9baf7a 100644 --- a/wowup-electron/src/app/pipes/relative-duration-pipe.spec.ts +++ b/wowup-electron/src/app/pipes/relative-duration-pipe.spec.ts @@ -5,12 +5,9 @@ import { RelativeDurationPipe } from "./relative-duration-pipe"; describe("RelativeDurationPipe", () => { it("create an instance", () => { - inject( - [DatePipe, TranslateService], - (datePipe: DatePipe, translateService: TranslateService) => { - const pipe = new RelativeDurationPipe(translateService); - expect(pipe).toBeTruthy(); - } - ); + inject([DatePipe, TranslateService], (datePipe: DatePipe, translateService: TranslateService) => { + const pipe = new RelativeDurationPipe(translateService); + expect(pipe).toBeTruthy(); + }); }); }); diff --git a/wowup-electron/src/app/services/download/download.service.ts b/wowup-electron/src/app/services/download/download.service.ts index ce918e3f..aff7ec9b 100644 --- a/wowup-electron/src/app/services/download/download.service.ts +++ b/wowup-electron/src/app/services/download/download.service.ts @@ -28,10 +28,7 @@ export class DownloadSevice { const eventHandler = (_evt: any, arg: DownloadStatus) => { if (arg.type !== DownloadStatusType.Progress) { - this._electronService.ipcRenderer.off( - request.responseKey, - eventHandler - ); + this._electronService.ipcRenderer.off(request.responseKey, eventHandler); } switch (arg.type) { diff --git a/wowup-electron/src/app/services/files/file.service.ts b/wowup-electron/src/app/services/files/file.service.ts index aabc08bc..60b581d1 100644 --- a/wowup-electron/src/app/services/files/file.service.ts +++ b/wowup-electron/src/app/services/files/file.service.ts @@ -25,24 +25,15 @@ export class FileService { constructor(private _electronService: ElectronService) {} public async getAssetFilePath(fileName: string) { - return await this._electronService.ipcRenderer.invoke( - GET_ASSET_FILE_PATH, - fileName - ); + return await this._electronService.ipcRenderer.invoke(GET_ASSET_FILE_PATH, fileName); } public async createDirectory(directoryPath: string) { - return await this._electronService.ipcRenderer.invoke( - CREATE_DIRECTORY_CHANNEL, - directoryPath - ); + return await this._electronService.ipcRenderer.invoke(CREATE_DIRECTORY_CHANNEL, directoryPath); } public async showDirectory(sourceDir: string) { - return await this._electronService.ipcRenderer.invoke( - SHOW_DIRECTORY, - sourceDir - ); + return await this._electronService.ipcRenderer.invoke(SHOW_DIRECTORY, sourceDir); } public async pathExists(sourcePath: string): Promise { @@ -50,10 +41,7 @@ export class FileService { return Promise.resolve(false); } - return await this._electronService.ipcRenderer.invoke( - PATH_EXISTS_CHANNEL, - sourcePath - ); + return await this._electronService.ipcRenderer.invoke(PATH_EXISTS_CHANNEL, sourcePath); } /** @@ -64,19 +52,13 @@ export class FileService { throw new Error("remove sourcePath required"); } - return await this._electronService.ipcRenderer.invoke( - DELETE_DIRECTORY_CHANNEL, - sourcePath - ); + return await this._electronService.ipcRenderer.invoke(DELETE_DIRECTORY_CHANNEL, sourcePath); } /** * Copy a file or folder */ - public async copy( - sourceFilePath: string, - destinationFilePath: string - ): Promise { + public async copy(sourceFilePath: string, destinationFilePath: string): Promise { const request: CopyFileRequest = { destinationFilePath, sourceFilePath, @@ -96,33 +78,21 @@ export class FileService { } public async readFile(sourcePath: string): Promise { - return await this._electronService.ipcRenderer.invoke( - READ_FILE_CHANNEL, - sourcePath - ); + return await this._electronService.ipcRenderer.invoke(READ_FILE_CHANNEL, sourcePath); } public async writeFile(sourcePath: string, contents: string): Promise { - return await this._electronService.ipcRenderer.invoke( - WRITE_FILE_CHANNEL, - sourcePath, - contents, - ); + return await this._electronService.ipcRenderer.invoke(WRITE_FILE_CHANNEL, sourcePath, contents); } public async listDirectories(sourcePath: string): Promise { - return await this._electronService.ipcRenderer.invoke( - LIST_DIRECTORIES_CHANNEL, - sourcePath - ); + return await this._electronService.ipcRenderer.invoke(LIST_DIRECTORIES_CHANNEL, sourcePath); } public listEntries(sourcePath: string, filter: string) { const globFilter = globrex(filter); - return fs - .readdirSync(sourcePath, { withFileTypes: true }) - .filter((entry) => !!globFilter.regex.test(entry.name)); + return fs.readdirSync(sourcePath, { withFileTypes: true }).filter((entry) => !!globFilter.regex.test(entry.name)); } public listFiles(sourcePath: string, filter: string) { @@ -134,10 +104,7 @@ export class FileService { .map((entry) => entry.name); } - public async unzipFile( - zipFilePath: string, - outputFolder: string - ): Promise { + public async unzipFile(zipFilePath: string, outputFolder: string): Promise { console.log("unzipFile", zipFilePath); const request: UnzipRequest = { @@ -146,9 +113,6 @@ export class FileService { responseKey: uuidv4(), }; - return await this._electronService.ipcRenderer.invoke( - UNZIP_FILE_CHANNEL, - request - ); + return await this._electronService.ipcRenderer.invoke(UNZIP_FILE_CHANNEL, request); } } diff --git a/wowup-electron/src/app/services/storage/addon-storage.service.ts b/wowup-electron/src/app/services/storage/addon-storage.service.ts index e97c864a..6d05e598 100644 --- a/wowup-electron/src/app/services/storage/addon-storage.service.ts +++ b/wowup-electron/src/app/services/storage/addon-storage.service.ts @@ -70,19 +70,13 @@ export class AddonStorageService { return addons[0]; } - public getAllForClientType( - clientType: WowClientType, - validator?: (addon: Addon) => boolean - ) { + public getAllForClientType(clientType: WowClientType, validator?: (addon: Addon) => boolean) { const addons: Addon[] = []; this.query((store) => { for (const result of store) { const addon = result[1] as Addon; - if ( - addon.clientType === clientType && - (!validator || validator(addon)) - ) { + if (addon.clientType === clientType && (!validator || validator(addon))) { addons.push(addon); } } diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.ts b/wowup-electron/src/app/services/warcraft/warcraft.service.ts index 8b6d6529..aa1bd156 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.ts +++ b/wowup-electron/src/app/services/warcraft/warcraft.service.ts @@ -40,16 +40,12 @@ const BETA_LOCATION_KEY = "wow_beta_location"; export class WarcraftService { private readonly _impl: WarcraftServiceImpl; private readonly _productsSrc = new BehaviorSubject([]); - private readonly _installedClientTypesSrc = new BehaviorSubject< - WowClientType[] | undefined - >(undefined); + private readonly _installedClientTypesSrc = new BehaviorSubject(undefined); private _productDbPath = ""; public products$ = this._productsSrc.asObservable(); - public productsReady$ = this.products$.pipe( - filter((products) => Array.isArray(products)) - ); + public productsReady$ = this.products$.pipe(filter((products) => Array.isArray(products))); public installedClientTypes$ = this._installedClientTypesSrc.asObservable(); @@ -66,9 +62,7 @@ export class WarcraftService { map((productDbPath) => (this._productDbPath = productDbPath)), map(() => this.scanProducts()), switchMap(() => from(this.getWowClientTypes())), - map((installedClientTypes) => - this._installedClientTypesSrc.next(installedClientTypes) - ) + map((installedClientTypes) => this._installedClientTypesSrc.next(installedClientTypes)) ) .subscribe(); } @@ -123,9 +117,7 @@ export class WarcraftService { public getProductLocation(clientType: WowClientType) { const clientFolderName = this.getClientFolderName(clientType); - const clientLocation = this._productsSrc.value.find( - (product) => product.name === clientFolderName - ); + const clientLocation = this._productsSrc.value.find((product) => product.name === clientFolderName); return clientLocation?.location ?? ""; } @@ -147,9 +139,7 @@ export class WarcraftService { continue; } - console.log( - `clientLocation ${clientLocation}, productLocation ${productLocation}` - ); + console.log(`clientLocation ${clientLocation}, productLocation ${productLocation}`); if (this.arePathsEqual(clientLocation, productLocation)) { continue; } @@ -178,9 +168,7 @@ export class WarcraftService { return addonFolders; } - const directories = await this._fileService.listDirectories( - addonFolderPath - ); + const directories = await this._fileService.listDirectories(addonFolderPath); // const directories = files.filter(dirent => dirent.isDirectory()).map(dirent => dirent.name); for (let i = 0; i < directories.length; i += 1) { const dir = directories[i]; @@ -193,10 +181,7 @@ export class WarcraftService { return addonFolders; } - private async getAddonFolder( - addonFolderPath: string, - dir: string - ): Promise { + private async getAddonFolder(addonFolderPath: string, dir: string): Promise { try { const dirPath = path.join(addonFolderPath, dir); const dirFiles = fs.readdirSync(dirPath); @@ -233,10 +218,7 @@ export class WarcraftService { return this._preferenceStorageService.set(clientLocationKey, clientPath); } - public setWowFolderPath( - clientType: WowClientType, - folderPath: string - ): boolean { + public setWowFolderPath(clientType: WowClientType, folderPath: string): boolean { const relativePath = this.getClientRelativePath(clientType, folderPath); if (!this.isClientFolder(clientType, relativePath)) { @@ -246,11 +228,7 @@ export class WarcraftService { this.setClientLocation(clientType, relativePath); from(this.getWowClientTypes()) - .pipe( - map((wowClientTypes) => - this._installedClientTypesSrc.next(wowClientTypes) - ) - ) + .pipe(map((wowClientTypes) => this._installedClientTypesSrc.next(wowClientTypes))) .subscribe(); return true; @@ -259,10 +237,7 @@ export class WarcraftService { public getClientRelativePath(clientType: WowClientType, folderPath: string) { const clientFolderName = this.getClientFolderName(clientType); const clientFolderIdx = folderPath.indexOf(clientFolderName); - const relativePath = - clientFolderIdx === -1 - ? folderPath - : folderPath.substring(0, clientFolderIdx); + const relativePath = clientFolderIdx === -1 ? folderPath : folderPath.substring(0, clientFolderIdx); return path.normalize(relativePath); } @@ -272,11 +247,7 @@ export class WarcraftService { const relativePath = this.getClientRelativePath(clientType, folderPath); const executableName = this.getExecutableName(clientType); - const executablePath = path.join( - relativePath, - clientFolderName, - executableName - ); + const executablePath = path.join(relativePath, clientFolderName, executableName); return fs.existsSync(executablePath); } @@ -345,12 +316,7 @@ export class WarcraftService { case WowClientType.Beta: return BETA_LOCATION_KEY; default: - throw new Error( - `Failed to get client location key: ${clientType}, ${getEnumName( - WowClientType, - clientType - )}` - ); + throw new Error(`Failed to get client location key: ${clientType}, ${getEnumName(WowClientType, clientType)}`); } } diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.win.ts b/wowup-electron/src/app/services/warcraft/warcraft.service.win.ts index 50173276..f3057067 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.win.ts +++ b/wowup-electron/src/app/services/warcraft/warcraft.service.win.ts @@ -14,11 +14,7 @@ export class WarcraftServiceWin implements WarcraftServiceImpl { const driveNames = diskInfo.map((i) => i.mounted); for (const name of driveNames) { - const agentPath = path.join( - name, - WINDOWS_BLIZZARD_AGENT_PATH, - BLIZZARD_PRODUCT_DB_NAME - ); + const agentPath = path.join(name, WINDOWS_BLIZZARD_AGENT_PATH, BLIZZARD_PRODUCT_DB_NAME); const exists = await FileUtils.exists(agentPath); if (exists) { diff --git a/wowup-electron/src/app/services/wowup-api/wowup-api.service.ts b/wowup-electron/src/app/services/wowup-api/wowup-api.service.ts index c527d394..ebb799bb 100644 --- a/wowup-electron/src/app/services/wowup-api/wowup-api.service.ts +++ b/wowup-electron/src/app/services/wowup-api/wowup-api.service.ts @@ -16,8 +16,6 @@ export class WowUpApiService { public getLatestVersion(): Observable { const url = new URL(`${API_URL}/wowup/latest`); - return this._httpClient - .get(url.toString()) - .pipe(tap((res) => console.log(res))); + return this._httpClient.get(url.toString()).pipe(tap((res) => console.log(res))); } } diff --git a/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts b/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts index d4d8045e..c627e396 100644 --- a/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts +++ b/wowup-electron/src/app/shared/components/page-not-found/page-not-found.component.spec.ts @@ -5,11 +5,13 @@ describe("PageNotFoundComponent", () => { let component: PageNotFoundComponent; let fixture: ComponentFixture; - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [PageNotFoundComponent], - }).compileComponents(); - })); + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [PageNotFoundComponent], + }).compileComponents(); + }) + ); beforeEach(() => { fixture = TestBed.createComponent(PageNotFoundComponent); diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index afa20c04..bd852ca0 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -196,7 +196,7 @@ "CONFIRMATION_LESS_THAN_THREE": "¿Quiere eliminar los siguientes {count} addons?", "CONFIRMATION_MORE_THAN_THREE": "¿Quiere eliminar los {count} addons seleccionados?", "CONFIRMATION_ONE": "¿Quiere eliminar {addonName}?", - + "DEPENDENCY_MESSAGE": "{addonName} tiene {dependencyCount} {dependencyCount, plural, one{dependencia} other{dependencias}}. ¿Quiere eliminarlas también?", "DEPENDENCY_TITLE": "¿Eliminar Dependencias del Addon?", "TITLE": "¿Desinstalar {count, plural, =1{Addon} other{Addons}}?" diff --git a/wowup-electron/src/common/curse/curse-dependency-type.ts b/wowup-electron/src/common/curse/curse-dependency-type.ts index fbd1224f..460e1f45 100644 --- a/wowup-electron/src/common/curse/curse-dependency-type.ts +++ b/wowup-electron/src/common/curse/curse-dependency-type.ts @@ -1,8 +1,8 @@ export enum CurseDependencyType { - EmbeddedLibrary = 1, - OptionalDependency = 2, - RequiredDependency = 3, - Tool = 4, - Incompatible = 5, - Include = 6 -} \ No newline at end of file + EmbeddedLibrary = 1, + OptionalDependency = 2, + RequiredDependency = 3, + Tool = 4, + Incompatible = 5, + Include = 6, +} diff --git a/wowup-electron/src/common/utils/number.utils.ts b/wowup-electron/src/common/utils/number.utils.ts index 4d060a39..3f21b0cd 100644 --- a/wowup-electron/src/common/utils/number.utils.ts +++ b/wowup-electron/src/common/utils/number.utils.ts @@ -1,9 +1,4 @@ -export function isBetween( - val: number, - min: number, - max: number, - inclusive: boolean = false -) { +export function isBetween(val: number, min: number, max: number, inclusive: boolean = false) { if (inclusive) { return val >= min && val <= max; } else { diff --git a/wowup-electron/src/common/wowup/wowup-folder-scanner.ts b/wowup-electron/src/common/wowup/wowup-folder-scanner.ts index 0c92a924..4e28c15e 100644 --- a/wowup-electron/src/common/wowup/wowup-folder-scanner.ts +++ b/wowup-electron/src/common/wowup/wowup-folder-scanner.ts @@ -76,10 +76,7 @@ export class WowUpFolderScanner { return path.join(directory, tocFile); } - private async getMatchingFiles( - folderPath: string, - filePaths: string[] - ): Promise { + private async getMatchingFiles(folderPath: string, filePaths: string[]): Promise { const parentDir = path.dirname(folderPath) + path.sep; const matchingFileList: string[] = []; const fileInfoList: string[] = []; @@ -101,10 +98,7 @@ export class WowUpFolderScanner { return matchingFileList; } - private async processIncludeFile( - matchingFileList: string[], - fileInfo: string - ) { + private async processIncludeFile(matchingFileList: string[], fileInfo: string) { if (!fs.existsSync(fileInfo) || matchingFileList.indexOf(fileInfo) !== -1) { return; } @@ -138,10 +132,7 @@ export class WowUpFolderScanner { } } - private getFileInclusionMatches( - fileInfo: string, - fileContent: string - ): string[] | null { + private getFileInclusionMatches(fileInfo: string, fileContent: string): string[] | null { const ext = path.extname(fileInfo); switch (ext) { case ".xml": diff --git a/wowup-electron/src/environments/environment.ts b/wowup-electron/src/environments/environment.ts index a913816b..84f52b7e 100644 --- a/wowup-electron/src/environments/environment.ts +++ b/wowup-electron/src/environments/environment.ts @@ -7,6 +7,6 @@ export const AppConfig = { googleAnalyticsId: "UA-92563227-4", wowupRepositoryUrl: "https://github.com/WowUp/WowUp", azure: { - applicationInsightsKey: "4a53e8d9-796c-4f80-b1a6-9a058374dd6d" - } + applicationInsightsKey: "4a53e8d9-796c-4f80-b1a6-9a058374dd6d", + }, }; diff --git a/wowup-electron/src/index.html b/wowup-electron/src/index.html index 20fed5f1..d2f5a2ea 100644 --- a/wowup-electron/src/index.html +++ b/wowup-electron/src/index.html @@ -11,10 +11,7 @@ content="default-src ws: file: data: http: https: 'unsafe-eval' 'unsafe-inline';" /> - + @@ -31,11 +28,7 @@ align-items: center; " > - +
diff --git a/wowup-electron/src/test.ts b/wowup-electron/src/test.ts index da810f05..ccffd394 100644 --- a/wowup-electron/src/test.ts +++ b/wowup-electron/src/test.ts @@ -2,18 +2,12 @@ import "zone.js/dist/zone-testing"; import { getTestBed } from "@angular/core/testing"; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting, -} from "@angular/platform-browser-dynamic/testing"; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from "@angular/platform-browser-dynamic/testing"; declare const require: any; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); // Then we find all the tests. const context = require.context("./", true, /\.spec\.ts$/); // And load the modules. diff --git a/wowup-electron/src/variables.scss b/wowup-electron/src/variables.scss index 4f22717a..e04e7b99 100644 --- a/wowup-electron/src/variables.scss +++ b/wowup-electron/src/variables.scss @@ -22,11 +22,11 @@ $epic-color: #a335ee; $artifact: #dbcc78; // HORDE -$horde-red-1: #8C1616; +$horde-red-1: #8c1616; $horde-red-2: #6e1d1d; $horde-red-3: #5e1d1d; // ALLIANCE $alliance-blue-1: #34488b; $alliance-blue-2: #33437a; -$alliance-blue-3: #2a355a; \ No newline at end of file +$alliance-blue-3: #2a355a; diff --git a/wowup-electron/system-tray.ts b/wowup-electron/system-tray.ts index 991c0de2..e8eca812 100644 --- a/wowup-electron/system-tray.ts +++ b/wowup-electron/system-tray.ts @@ -5,10 +5,7 @@ import { SystemTrayConfig } from "./src/common/wowup/system-tray-config"; let _trayRef: Tray; -export function createTray( - window: BrowserWindow, - config: SystemTrayConfig -): boolean { +export function createTray(window: BrowserWindow, config: SystemTrayConfig): boolean { _trayRef?.destroy(); console.log("Creating tray"); diff --git a/wowup-electron/window-state.ts b/wowup-electron/window-state.ts index 2a8caad4..351a7eca 100644 --- a/wowup-electron/window-state.ts +++ b/wowup-electron/window-state.ts @@ -1,7 +1,7 @@ import { BrowserWindow, screen } from "electron"; import * as log from "electron-log"; import * as Store from "electron-store"; -import { minBy } from 'lodash'; +import { minBy } from "lodash"; import { Subject } from "rxjs"; import { debounceTime } from "rxjs/operators"; import { WindowState } from "./src/common/models/window-state"; @@ -108,4 +108,4 @@ export function windowStateManager(windowName: string, { width, height }: { widt ...windowState, monitorState, }; -} \ No newline at end of file +} From 29d0d952571078ae72b12a7a3aa3b29ac79fec42 Mon Sep 17 00:00:00 2001 From: john liddell Date: Fri, 13 Nov 2020 21:53:22 -0600 Subject: [PATCH 34/71] Fix #377 --- wowup-electron/main.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index 442c7faf..cf50dee1 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -135,16 +135,13 @@ function createWindow(): BrowserWindow { if (platform.isMac) { win.on("close", (e) => { - if (appIsQuitting) { + if (appIsQuitting || preferenceStore.get(COLLAPSE_TO_TRAY_PREFERENCE_KEY) !== "true") { return; } e.preventDefault(); win.hide(); - - if (preferenceStore.get(COLLAPSE_TO_TRAY_PREFERENCE_KEY) === "true") { - app.dock.hide(); - } + app.dock.hide(); }); } @@ -228,9 +225,9 @@ try { app.on("window-all-closed", () => { // On OS X it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== "darwin") { + // if (process.platform !== "darwin") { app.quit(); - } + // } }); app.on("activate", () => { From f7571275a73acde81cfd246d043ca35b751488a7 Mon Sep 17 00:00:00 2001 From: Glow <23194902+Nils89@users.noreply.github.com> Date: Sat, 14 Nov 2020 10:20:45 +0100 Subject: [PATCH 35/71] Update de.json --- wowup-electron/src/assets/i18n/de.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index 077d246f..b01d386d 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -8,8 +8,8 @@ "SHOW_ACTION": "Öffnen" }, "THEME": { - "ALLIANCE": "Alliance", - "DEFAULT": "Default", + "ALLIANCE": "Allianz", + "DEFAULT": "Standard", "HORDE": "Horde" }, "WOWUP_UPDATE": { @@ -225,8 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Starte WowUp mit dem System", "TELEMETRY_DESCRIPTION": "Helfen Sie WowUp zu verbessern, indem Sie anonyme Installationsdaten und/oder Fehler senden.", "TELEMETRY_LABEL": "Telemetrie", - "THEME_DESCRIPTION": "Change the color theme to whatever you like", - "THEME_LABEL": "Color Theme", + "THEME_DESCRIPTION": "Ändere das Farbschma nach deinen Wünschen", + "THEME_LABEL": "Farbschema", "TITLE": "Applikation", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Neustart der App?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Das Deaktivieren der Hardwarebeschleunigung kann FPS Probleme und Probleme beim Rendern beheben. Eine Änderung dieser Einstellung benötigt einen Neustart der App.", From f8c0988223f310de95ded5e6863f412073edf30f Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 10:18:34 -0600 Subject: [PATCH 36/71] Update es.json --- wowup-electron/src/assets/i18n/es.json | 1 - 1 file changed, 1 deletion(-) diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index bd852ca0..3d37a979 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -196,7 +196,6 @@ "CONFIRMATION_LESS_THAN_THREE": "¿Quiere eliminar los siguientes {count} addons?", "CONFIRMATION_MORE_THAN_THREE": "¿Quiere eliminar los {count} addons seleccionados?", "CONFIRMATION_ONE": "¿Quiere eliminar {addonName}?", - "DEPENDENCY_MESSAGE": "{addonName} tiene {dependencyCount} {dependencyCount, plural, one{dependencia} other{dependencias}}. ¿Quiere eliminarlas también?", "DEPENDENCY_TITLE": "¿Eliminar Dependencias del Addon?", "TITLE": "¿Desinstalar {count, plural, =1{Addon} other{Addons}}?" From 27750f205b4ff89d7a73ddb9e0aa61269951964b Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 10:25:33 -0600 Subject: [PATCH 37/71] Update changelog.json --- wowup-electron/src/assets/changelog.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/wowup-electron/src/assets/changelog.json b/wowup-electron/src/assets/changelog.json index 3a06d43b..7adb456d 100644 --- a/wowup-electron/src/assets/changelog.json +++ b/wowup-electron/src/assets/changelog.json @@ -3,13 +3,19 @@ { "Version": "2.0.0-beta.12", "changes": [ + "Russian locale updates (Medok)", "German locale updates (Glow)", "French locale updates (Galiwyx)", - "Chinese locale updates (Cyano Hao)", - "Korean locale updates ()", + "Chinese locale updates (CyanoHao)", + "Korean locale updates (soaakim)", + "Spanish locale updates (SkollVargr)", + "Add the ability to localize the 'Install by URL' download count (chops)", + "Add a new theming feature for Alliance and Horde", "Auto update timer will now refresh the 'My Addons' list", "Update to Angular 11", - "Fix issue with window snap fullscreen not saving screen" + "Fix issue with window snap fullscreen not saving screen", + "Fix an issue with the app icon not showing up on ubuntu", + "The app will now quit if you close the window on Mac and 'Minimize to Tray' is off" ] }, { From b50807a0d6b0bd78504f3e59221b6ec82d628006 Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 10:31:17 -0600 Subject: [PATCH 38/71] Update main.ts --- wowup-electron/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index cf50dee1..45bf1d85 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -226,7 +226,7 @@ try { // On OS X it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q // if (process.platform !== "darwin") { - app.quit(); + app.quit(); // } }); From 388ee60ee02c74637d212c8c12f231509df9217d Mon Sep 17 00:00:00 2001 From: NoobTaco Date: Sat, 14 Nov 2020 10:35:53 -0800 Subject: [PATCH 39/71] Updated horde and alliance theme colors to be more readable --- wowup-electron/src/variables.scss | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/wowup-electron/src/variables.scss b/wowup-electron/src/variables.scss index e04e7b99..8dfb83e2 100644 --- a/wowup-electron/src/variables.scss +++ b/wowup-electron/src/variables.scss @@ -22,11 +22,11 @@ $epic-color: #a335ee; $artifact: #dbcc78; // HORDE -$horde-red-1: #8c1616; -$horde-red-2: #6e1d1d; -$horde-red-3: #5e1d1d; +$horde-red-1: #8c1616; // Header Color +$horde-red-2: #ff8e8e; // Option toggle color +$horde-red-3: #ef8e8e; // Scroll bar toggle color // ALLIANCE -$alliance-blue-1: #34488b; -$alliance-blue-2: #33437a; -$alliance-blue-3: #2a355a; +$alliance-blue-1: #162c57; // Header color +$alliance-blue-2: #8ea4cf; // Option toggle color +$alliance-blue-3: #7ea4cf; // Scroll bar toggle color From e29a44c4972c28fb755647aea27b008e82a38891 Mon Sep 17 00:00:00 2001 From: Dean Campbell Date: Sat, 14 Nov 2020 11:13:55 -0800 Subject: [PATCH 40/71] Fix de syntax error --- wowup-electron/src/assets/i18n/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index b01d386d..b25bbba0 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -53,7 +53,7 @@ "YESTERDAY": "Gestern" }, "DEPENDENCY": { - "TOOLTIP": "{dependencyCount} {dependencyCount, plural, one{Abhängigkeit} other{Abhängigkeiten} benötigt}" + "TOOLTIP": "{dependencyCount} {dependencyCount, plural, one{Abhängigkeit} other{Abhängigkeiten}} benötigt" }, "DOWNLOAD_COUNT": { "BILLION": "{count} Milliarden", From 55ab023b9330c3f91a3bce271d7da27d45dd94aa Mon Sep 17 00:00:00 2001 From: Galiwyx <206181+Galiwyx@users.noreply.github.com> Date: Sat, 14 Nov 2020 20:45:07 +0100 Subject: [PATCH 41/71] Update fr.json --- wowup-electron/src/assets/i18n/fr.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 833aa32c..5b3f6bf1 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -27,21 +27,21 @@ }, "COMMON": { "ADDON_STATE": { - "IGNORED": "IGNORÉ", - "INSTALL": "INSTALLER", - "UNINSTALL": "DÉSINSTALLER", + "IGNORED": "Ignoré", + "INSTALL": "Installer", + "UNINSTALL": "Désinstaller", "UNKNOWN": "", - "UPDATE": "MISE À JOUR", - "UPTODATE": "À JOUR" + "UPDATE": "Mise à jour", + "UPTODATE": "À jour" }, "ADDON_STATUS": { - "BACKINGUP": "SAUVEGARDE", - "COMPLETE": "ACHEVÉ", - "DOWNLOADING": "TÉLÉCHARGEMENT", - "INSTALLING": "INSTALLATION", - "PENDING": "EN ATTENTE", - "UNINSTALLING": "DÉSINSTALLATION", - "UPDATING": "EN COURS DE MISE À JOUR" + "BACKINGUP": "Sauvegarde", + "COMPLETE": "Installé", + "DOWNLOADING": "Téléchargement", + "INSTALLING": "Installation", + "PENDING": "En attente", + "UNINSTALLING": "Désinstallation", + "UPDATING": "En cours de mise à jour" }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", From aa4078dbdb5d712e36927df9f55f4a85a2f23595 Mon Sep 17 00:00:00 2001 From: Zazou89 <206181+Zazou89@users.noreply.github.com> Date: Sat, 14 Nov 2020 20:50:39 +0100 Subject: [PATCH 42/71] New nickname :p --- wowup-electron/src/assets/changelog.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/assets/changelog.json b/wowup-electron/src/assets/changelog.json index 7adb456d..7cfb5e57 100644 --- a/wowup-electron/src/assets/changelog.json +++ b/wowup-electron/src/assets/changelog.json @@ -5,7 +5,7 @@ "changes": [ "Russian locale updates (Medok)", "German locale updates (Glow)", - "French locale updates (Galiwyx)", + "French locale updates (Zazou)", "Chinese locale updates (CyanoHao)", "Korean locale updates (soaakim)", "Spanish locale updates (SkollVargr)", From 3a2511ca056e5b5dcac4c2ac09a0c37b0d2a3d11 Mon Sep 17 00:00:00 2001 From: NoobTaco Date: Sat, 14 Nov 2020 12:52:05 -0800 Subject: [PATCH 43/71] Tied the filter bar to theme color --- wowup-electron/src/custom-theme.scss | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/wowup-electron/src/custom-theme.scss b/wowup-electron/src/custom-theme.scss index bda933b1..7f39be3a 100644 --- a/wowup-electron/src/custom-theme.scss +++ b/wowup-electron/src/custom-theme.scss @@ -153,6 +153,14 @@ $horde-theme: mat-dark-theme( background-color: $horde-red-2 !important; } + .mat-form-field-ripple { + background-color: $horde-red-2 !important; + } + + .mat-form-field.mat-focused .mat-form-field-label { + color: $horde-red-2 !important; + } + ::-webkit-scrollbar-track { background-color: $dark-2; } @@ -172,7 +180,7 @@ $horde-theme: mat-dark-theme( $alliance-pallette: ( 50: #e8eaf6, 100: $alliance-blue-1, - 200: #504fa1, + 200: $alliance-blue-2, 300: #383773, 400: #5c6bc0, 500: #3f51b5, @@ -229,6 +237,14 @@ $alliance-theme: mat-dark-theme( background-color: $alliance-blue-3 !important; } + .mat-form-field-ripple { + background-color: $alliance-blue-2 !important; + } + + .mat-form-field.mat-focused .mat-form-field-label { + color: $alliance-blue-2 !important; + } + ::-webkit-scrollbar-track { background-color: $dark-2; } From c6b1e826894e25aa2c7ba9ec65bbb36801b9b2c0 Mon Sep 17 00:00:00 2001 From: Bito <72380594+Bito98@users.noreply.github.com> Date: Sun, 15 Nov 2020 00:15:15 +0100 Subject: [PATCH 44/71] Update it.json --- wowup-electron/src/assets/i18n/it.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json index 058fb73a..0c437dfa 100644 --- a/wowup-electron/src/assets/i18n/it.json +++ b/wowup-electron/src/assets/i18n/it.json @@ -8,9 +8,9 @@ "SHOW_ACTION": "Mostra" }, "THEME": { - "ALLIANCE": "Alliance", + "ALLIANCE": "Alleanza", "DEFAULT": "Default", - "HORDE": "Horde" + "HORDE": "Orda" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installa l'aggiornamento di WowUp", @@ -142,7 +142,7 @@ }, "MY_ADDONS": { "ADDON_CONTEXT_MENU": { - "ADDONS_SELECTED": "{count} {count, plural, =1{addon} other{addons}} selected", + "ADDONS_SELECTED": "{count} {count, plural, =1{addon} other{addons}} {count, plural, =1{selezionato} other{selezionati}}", "ALPHA_ADDON_CHANNEL": "Alfa", "AUTO_UPDATE_ADDON_BUTTON": "Aggiornamento Automatico", "BETA_ADDON_CHANNEL": "Beta", @@ -196,8 +196,8 @@ "CONFIRMATION_LESS_THAN_THREE": "Sei sicuro di voler rimuovere {count, plural, =1{il seguente} other{i seguenti}} {count, plural, one{addon} other{{count} addons}}??", "CONFIRMATION_MORE_THAN_THREE": "Sei sicuro di voler rimuovere i {count} addons selezionati?", "CONFIRMATION_ONE": "Sei sicuro di voler rimuovere {addonName}?", - "DEPENDENCY_MESSAGE": "{addonName} has {dependencyCount} {dependencyCount, plural, one{dependency} other{dependencies}}. Do you want to remove them also?", - "DEPENDENCY_TITLE": "Remove Addon Dependencies?", + "DEPENDENCY_MESSAGE": "{addonName} ha {dependencyCount} {dependencyCount, plural, one{dipendenza} other{dipendnenze}}. Vuoi rimuovere anche queste?", + "DEPENDENCY_TITLE": "Rimuovere Dipendenze dell'Addon?", "TITLE": "Disinstallare {count, plural, =1{l'addon} other{gli addons}}?" }, "UPDATE_ALL_BUTTON": "Aggiorna Tutto", @@ -209,7 +209,7 @@ }, "OPTIONS": { "APPLICATION": { - "CURRENT_LANGUAGE_LABEL": "Lingua Attuale", + "CURRENT_LANGUAGE_LABEL": "Lingua Corrente", "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Abilita/Disabilita i vari popup di notifica del sistema, come gli addons aggiornati automaticamente", "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Abilita notifiche di sistema", "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "Quando si chiude la finestra WowUp, minimizzare nella barra dei menu", @@ -225,8 +225,8 @@ "START_WITH_SYSTEM_LABEL": "Lancia WowUp all'avvio del sistema", "TELEMETRY_DESCRIPTION": "Aiuta a migliorare WowUp inviando dati di installazione e/o errori anonimi.", "TELEMETRY_LABEL": "Telemetria", - "THEME_DESCRIPTION": "Change the color theme to whatever you like", - "THEME_LABEL": "Color Theme", + "THEME_DESCRIPTION": "Cambia il tema del colore come preferisci", + "THEME_LABEL": "Tema Colore", "TITLE": "Applicazione", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Vuoi riavviare?", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "La disabilitazione dell'accelerazione hardware potrebbe risolvere i problemi di FPS e altri problemi di rendering in questa app. La modifica di questa impostazione richiede un riavvio.", From b3dc523831aac8e607da9b0d426f444d7aa63573 Mon Sep 17 00:00:00 2001 From: NoobTaco Date: Sat, 14 Nov 2020 15:48:17 -0800 Subject: [PATCH 45/71] Updated horde and alliance colors as well as tweaked over all background color. --- wowup-electron/src/variables.scss | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wowup-electron/src/variables.scss b/wowup-electron/src/variables.scss index 8dfb83e2..aaeb9b6e 100644 --- a/wowup-electron/src/variables.scss +++ b/wowup-electron/src/variables.scss @@ -2,10 +2,10 @@ $blue-1: #315891; $blue-2: #24416c; $highlight: #01baef; -$dark-1: #666666; -$dark-2: #555555; -$dark-3: #444444; -$dark-4: #333333; +$dark-1: #555555; +$dark-2: #444444; +$dark-3: #333333; +$dark-4: #222222; $purple-1: #6b69d6; $purple-2: #504fa1; @@ -23,10 +23,10 @@ $artifact: #dbcc78; // HORDE $horde-red-1: #8c1616; // Header Color -$horde-red-2: #ff8e8e; // Option toggle color -$horde-red-3: #ef8e8e; // Scroll bar toggle color +$horde-red-2: #c24a3d; // Option toggle color +$horde-red-3: #590000; // Scroll bar toggle color // ALLIANCE $alliance-blue-1: #162c57; // Header color -$alliance-blue-2: #8ea4cf; // Option toggle color -$alliance-blue-3: #7ea4cf; // Scroll bar toggle color +$alliance-blue-2: #455484; // Option toggle color +$alliance-blue-3: #00002e; // Scroll bar toggle color From 6fe47ebb1fe6110c70a19ec304925a7c2625a53b Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 22:06:22 -0600 Subject: [PATCH 46/71] lower opacity a little --- wowup-electron/src/app/pages/options/options.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/app/pages/options/options.component.scss b/wowup-electron/src/app/pages/options/options.component.scss index ff1bef95..7e384b80 100644 --- a/wowup-electron/src/app/pages/options/options.component.scss +++ b/wowup-electron/src/app/pages/options/options.component.scss @@ -12,7 +12,7 @@ .theme-logo { content: ""; - opacity: 0.03; + opacity: 0.02; position: absolute; top: 0; left: 0; From 7bceeb677af21317c095c2ad2f4ac84cf583b20f Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 22:26:21 -0600 Subject: [PATCH 47/71] Fix bug with NB language --- wowup-electron/src/assets/i18n/nb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json index 1387ff30..3a71dff0 100644 --- a/wowup-electron/src/assets/i18n/nb.json +++ b/wowup-electron/src/assets/i18n/nb.json @@ -1,6 +1,6 @@ { "APP": { - "AUTO_UPDATE_NOTIFICATION_BODY": "{count} {count, plural, =1{utvidelse} other{utvidelse} ble automatisk oppdatert}.", + "AUTO_UPDATE_NOTIFICATION_BODY": "{count} {count, plural, =1{utvidelse} other{utvidelse}} ble automatisk oppdatert.", "AUTO_UPDATE_NOTIFICATION_TITLE": "Automatiske Oppdateringer", "SYSTEM_TRAY": { "CHECK_UPDATE": "Check for Updates...", From 682db896cd5297dd4e15f483b67ece4e7221dd52 Mon Sep 17 00:00:00 2001 From: john liddell Date: Sat, 14 Nov 2020 23:14:00 -0600 Subject: [PATCH 48/71] Update ko.json --- wowup-electron/src/assets/i18n/ko.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index 7fa3eeb5..2bb78412 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -93,7 +93,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "예) GitHub 또는 WowInterface URL", "CLOSE_BUTTON": "닫기", "DESCRIPTION": "URL 주소로 직접 설치를 하려면 아래 입력란에 애드온 URL을 붙여넣으세요.", - "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", + "DOWNLOAD_COUNT": "{textCount} {count, plural, =1{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "API 연결 실패. 잠시 후 다시 시도해주세요.", "INSTALL_FAILED": "설치 실패! 뭔가 잘못됐습니다.다시 시도해주세요.\n\n이 메세지가 반복된다면, 디스코드의 #wow-support 채널에서 도움을 요청해보세요.", From ef09aed4f78c77c376296ab8f0595b0b42c0f237 Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 23:20:49 -0600 Subject: [PATCH 49/71] fix ZH locale --- wowup-electron/src/assets/i18n/en.json | 16 ++++++++-------- wowup-electron/src/assets/i18n/zh.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index f2221bfa..88502dfc 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -45,15 +45,15 @@ }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", - "DAYS_AGO": "{count} {count, plural, one{day} other{days}} ago", - "HOURS_AGO": "{count} {count, plural, one{hour} other{hours}} ago", + "DAYS_AGO": "{count} {count, plural, =1{day} other{days}} ago", + "HOURS_AGO": "{count} {count, plural, =1{hour} other{hours}} ago", "JUST_NOW": "Just now", - "MONTHS_AGO": "{count} {count, plural, one{month} other{months}} ago", - "YEARS_AGO": "{count} {count, plural, one{year} other{years}} ago", + "MONTHS_AGO": "{count} {count, plural, =1{month} other{months}} ago", + "YEARS_AGO": "{count} {count, plural, =1{year} other{years}} ago", "YESTERDAY": "Yesterday" }, "DEPENDENCY": { - "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}" + "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, =1{dependency} other{dependencies}}" }, "DOWNLOAD_COUNT": { "BILLION": "{count} billion", @@ -77,7 +77,7 @@ "DIALOGS": { "ADDON_DETAILS": { "BY_AUTHOR": "By {authorName}", - "DEPENDENCY_TEXT": "This addon has {dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}", + "DEPENDENCY_TEXT": "This addon has {dependencyCount} required {dependencyCount, plural, =1{dependency} other{dependencies}}", "VIEW_IN_BROWSER_BUTTON": "View in browser", "VIEW_ON_PROVIDER_PREFIX": "View on" }, @@ -93,7 +93,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub or WowInterface URL", "CLOSE_BUTTON": "Close", "DESCRIPTION": "If you want to install an addon directly from a URL paste it below to get started.", - "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", + "DOWNLOAD_COUNT": "{textCount} {count, plural, =1{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "Cannot connect to API, please wait a bit and try again.", "INSTALL_FAILED": "Something went wrong when trying to install the addon, please try again.\n\nIf this message keeps showing up, you can get help on Discord in the #wow-support channel.", @@ -196,7 +196,7 @@ "CONFIRMATION_LESS_THAN_THREE": "Are you sure you want to remove the following {count} addons?", "CONFIRMATION_MORE_THAN_THREE": "Are you sure you want to remove the selected {count} addons?", "CONFIRMATION_ONE": "Are you sure you want to remove {addonName}?", - "DEPENDENCY_MESSAGE": "{addonName} has {dependencyCount} {dependencyCount, plural, one{dependency} other{dependencies}}. Do you want to remove them also?", + "DEPENDENCY_MESSAGE": "{addonName} has {dependencyCount} {dependencyCount, plural, =1{dependency} other{dependencies}}. Do you want to remove them also?", "DEPENDENCY_TITLE": "Remove Addon Dependencies?", "TITLE": "Uninstall {count, plural, =1{Addon} other{Addons}}?" }, diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index d94a4802..f35655b1 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -93,7 +93,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "例如,GitHub 或 WowInterface URL", "CLOSE_BUTTON": "关闭", "DESCRIPTION": "如需直接从某 URL 安装插件,请将其粘贴到下面以开始安装。", - "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", + "DOWNLOAD_COUNT": "{textCount} {count, plural, =1{download} other{downloads}} on {provider}", "ERROR": { "FAILED_TO_CONNECT": "无法连接 API,请稍后重试。", "INSTALL_FAILED": "安装插件时出现了一些错误,请重试。\n\n如果一直出现此消息,可以加入 Discord #wow-support 频道寻求帮助(英语)。", From 42095f0fdc9ea9842b5675a4a0f68df9f219e7ab Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 23:40:03 -0600 Subject: [PATCH 50/71] More tweaking --- wowup-electron/src/custom-theme.scss | 12 ++---------- wowup-electron/src/styles.scss | 7 +++++++ wowup-electron/src/variables.scss | 14 ++++++++------ 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/wowup-electron/src/custom-theme.scss b/wowup-electron/src/custom-theme.scss index 7f39be3a..6135be8f 100644 --- a/wowup-electron/src/custom-theme.scss +++ b/wowup-electron/src/custom-theme.scss @@ -105,7 +105,7 @@ $horde-pallette: ( 800: #283593, 900: #1a237e, A100: $horde-red-1, - A200: $horde-red-2, + A200: $horde-control, A400: $horde-red-3, A700: #6874bb, contrast: ( @@ -157,10 +157,6 @@ $horde-theme: mat-dark-theme( background-color: $horde-red-2 !important; } - .mat-form-field.mat-focused .mat-form-field-label { - color: $horde-red-2 !important; - } - ::-webkit-scrollbar-track { background-color: $dark-2; } @@ -189,7 +185,7 @@ $alliance-pallette: ( 800: #283593, 900: #1a237e, A100: $alliance-blue-1, - A200: $alliance-blue-2, + A200: $alliance-control, A400: $alliance-blue-3, A700: #6874bb, contrast: ( @@ -241,10 +237,6 @@ $alliance-theme: mat-dark-theme( background-color: $alliance-blue-2 !important; } - .mat-form-field.mat-focused .mat-form-field-label { - color: $alliance-blue-2 !important; - } - ::-webkit-scrollbar-track { background-color: $dark-2; } diff --git a/wowup-electron/src/styles.scss b/wowup-electron/src/styles.scss index 341700b6..24a2b8cc 100644 --- a/wowup-electron/src/styles.scss +++ b/wowup-electron/src/styles.scss @@ -430,6 +430,13 @@ snack-bar-container { z-index: 2; } +.mat-input-element { + caret-color: $white-3 !important; +} +.mat-form-field.mat-focused .mat-form-field-label { + color: $white-2 !important; +} + th.mat-header-cell .mat-sort-header-container.mat-sort-header-sorted .mat-sort-header-arrow { opacity: 1 !important; transform: translateY(0) !important; diff --git a/wowup-electron/src/variables.scss b/wowup-electron/src/variables.scss index aaeb9b6e..7e42a957 100644 --- a/wowup-electron/src/variables.scss +++ b/wowup-electron/src/variables.scss @@ -2,10 +2,10 @@ $blue-1: #315891; $blue-2: #24416c; $highlight: #01baef; -$dark-1: #555555; -$dark-2: #444444; -$dark-3: #333333; -$dark-4: #222222; +$dark-1: #666666; +$dark-2: #555555; +$dark-3: #444444; +$dark-4: #333333; $purple-1: #6b69d6; $purple-2: #504fa1; @@ -23,10 +23,12 @@ $artifact: #dbcc78; // HORDE $horde-red-1: #8c1616; // Header Color -$horde-red-2: #c24a3d; // Option toggle color +$horde-red-2: #9e1d1d; // Option toggle color $horde-red-3: #590000; // Scroll bar toggle color +$horde-control: #c24a3d; // Option toggle color // ALLIANCE $alliance-blue-1: #162c57; // Header color -$alliance-blue-2: #455484; // Option toggle color +$alliance-blue-2: #2b4a88; // Option toggle color $alliance-blue-3: #00002e; // Scroll bar toggle color +$alliance-control: #406abd; // Option toggle color From 4a77e7595c119c23450b1db8992c262e218a7afc Mon Sep 17 00:00:00 2001 From: jliddev Date: Sat, 14 Nov 2020 23:54:50 -0600 Subject: [PATCH 51/71] Fix some unthemed elements --- wowup-electron/src/app/app.component.ts | 24 ++++++++++++++++--- .../src/app/pages/about/about.component.html | 2 +- .../src/app/pages/about/about.component.scss | 2 +- wowup-electron/src/custom-theme.scss | 12 ++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/wowup-electron/src/app/app.component.ts b/wowup-electron/src/app/app.component.ts index eb3f584b..a02cd704 100644 --- a/wowup-electron/src/app/app.component.ts +++ b/wowup-electron/src/app/app.component.ts @@ -1,7 +1,14 @@ -import { AfterViewInit, ChangeDetectionStrategy, Component } from "@angular/core"; +import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit } from "@angular/core"; import { MatDialog } from "@angular/material/dialog"; import { TranslateService } from "@ngx-translate/core"; -import { CREATE_TRAY_MENU_CHANNEL } from "../common/constants"; +import { OverlayContainer } from "@angular/cdk/overlay"; +import { + ALLIANCE_THEME, + CREATE_TRAY_MENU_CHANNEL, + CURRENT_THEME_KEY, + DEFAULT_THEME, + HORDE_THEME, +} from "../common/constants"; import { SystemTrayConfig } from "../common/wowup/system-tray-config"; import { TelemetryDialogComponent } from "./components/telemetry-dialog/telemetry-dialog.component"; import { ElectronService } from "./services"; @@ -11,6 +18,7 @@ import { FileService } from "./services/files/file.service"; import { WowUpService } from "./services/wowup/wowup.service"; import { IconService } from "./services/icons/icon.service"; import { SessionService } from "./services/session/session.service"; +import { filter } from "rxjs/operators"; const AUTO_UPDATE_PERIOD_MS = 60 * 60 * 1000; // 1 hour @@ -20,7 +28,7 @@ const AUTO_UPDATE_PERIOD_MS = 60 * 60 * 1000; // 1 hour styleUrls: ["./app.component.scss"], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class AppComponent implements AfterViewInit { +export class AppComponent implements OnInit, AfterViewInit { private _autoUpdateInterval?: number; public get quitEnabled() { @@ -36,9 +44,19 @@ export class AppComponent implements AfterViewInit { private _addonService: AddonService, private _iconService: IconService, private _sessionService: SessionService, + public overlayContainer: OverlayContainer, public wowUpService: WowUpService ) {} + ngOnInit(): void { + this.overlayContainer.getContainerElement().classList.add(this.wowUpService.currentTheme); + + this.wowUpService.preferenceChange$.pipe(filter((pref) => pref.key === CURRENT_THEME_KEY)).subscribe((pref) => { + this.overlayContainer.getContainerElement().classList.remove(HORDE_THEME, ALLIANCE_THEME, DEFAULT_THEME); + this.overlayContainer.getContainerElement().classList.add(pref.value); + }); + } + ngAfterViewInit(): void { this.createSystemTray(); diff --git a/wowup-electron/src/app/pages/about/about.component.html b/wowup-electron/src/app/pages/about/about.component.html index 3c503304..3612207e 100644 --- a/wowup-electron/src/app/pages/about/about.component.html +++ b/wowup-electron/src/app/pages/about/about.component.html @@ -29,7 +29,7 @@ {{ "PAGES.ABOUT.CHANGE_LOG_SECTION_LABEL" | translate }}
    -
  • +
  • {{ cl.Version }}
    {{ cl.Description }}
    {{ formatChanges(cl) }}
    diff --git a/wowup-electron/src/app/pages/about/about.component.scss b/wowup-electron/src/app/pages/about/about.component.scss index 748d4019..cd4cd2e2 100644 --- a/wowup-electron/src/app/pages/about/about.component.scss +++ b/wowup-electron/src/app/pages/about/about.component.scss @@ -49,7 +49,7 @@ .changelog { list-style-type: none; margin: 1em 0; - border-left: 3px solid $purple-1; + border-left: 3px solid; padding: 0.5em 1em 1em 1em; background-color: $dark-4; diff --git a/wowup-electron/src/custom-theme.scss b/wowup-electron/src/custom-theme.scss index 6135be8f..9f99795c 100644 --- a/wowup-electron/src/custom-theme.scss +++ b/wowup-electron/src/custom-theme.scss @@ -61,6 +61,10 @@ $candy-app-theme: mat-dark-theme( ) ); +.border-primary { + border-color: $purple-1; +} + .bg-primary { background-color: $purple-1; } @@ -141,6 +145,10 @@ $horde-theme: mat-dark-theme( .horde-theme { @include angular-material-color($horde-theme); + .border-primary { + border-color: $horde-red-1 !important; + } + .bg-primary { background-color: $horde-red-1 !important; } @@ -221,6 +229,10 @@ $alliance-theme: mat-dark-theme( .alliance-theme { @include angular-material-color($alliance-theme); + .border-primary { + border-color: $alliance-blue-1 !important; + } + .bg-primary { background-color: $alliance-blue-1 !important; } From 1faf47b88c656e9641911036d3ae88249e7024b5 Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 15 Nov 2020 00:01:44 -0600 Subject: [PATCH 52/71] Beta 13 prep --- wowup-electron/package.json | 2 +- wowup-electron/src/assets/changelog.json | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 3e5ffdb0..6403107c 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.0.0-beta.12", + "version": "2.0.0-beta.13", "description": "Word of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/assets/changelog.json b/wowup-electron/src/assets/changelog.json index 7cfb5e57..2e7d119d 100644 --- a/wowup-electron/src/assets/changelog.json +++ b/wowup-electron/src/assets/changelog.json @@ -1,5 +1,17 @@ { "ChangeLogs": [ + { + "Version": "2.0.0-beta.13", + "changes": [ + "German locale updates (chops)", + "French locale updates (Zazou)", + "Italian locale updates (Bito)", + "Theme updates (NoobTaco)", + "Fix Korean locale", + "Fix Chinese locale", + "Fix NB locale" + ] + }, { "Version": "2.0.0-beta.12", "changes": [ From 3fb2e165bce22a7e5fbdd0fe0080f846974043ad Mon Sep 17 00:00:00 2001 From: Glow <23194902+Nils89@users.noreply.github.com> Date: Sun, 15 Nov 2020 08:49:49 +0100 Subject: [PATCH 53/71] Update de.json --- wowup-electron/src/assets/i18n/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index b25bbba0..4bc96a06 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -93,7 +93,7 @@ "ADDON_URL_INPUT_PLACEHOLDER": "z.B. GitHub oder WowInterface URL", "CLOSE_BUTTON": "Schließen", "DESCRIPTION": "Wenn Sie ein Addon direkt von einer URL installieren möchten, fügen Sie es unten in der Zeile ein.", - "DOWNLOAD_COUNT": "{textCount} {count, plural, one{download} other{downloads}} on {provider}", + "DOWNLOAD_COUNT": "{textCount} {count, plural, one{Download} other{Downloads}} auf {provider}", "ERROR": { "FAILED_TO_CONNECT": "Keine Verbindung mit der API möglich, warte ein wenig und versuche es erneut.", "INSTALL_FAILED": "Beim Versuch das Addon zu installieren ist etwas schief gelaufen, bitte versuche er erneut.\n\nWenn diese Nachricht weiterhin erscheint, kannst du auf unsrem Discord im Kamlen #wow-support nach Hilfe fragen.", From 69970cc87b185ec1e22ef1e9978629b7f82d87f6 Mon Sep 17 00:00:00 2001 From: Diogo Autilio Date: Sun, 15 Nov 2020 11:39:29 -0300 Subject: [PATCH 54/71] Update pt.json --- wowup-electron/src/assets/i18n/pt.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json index 2806a983..a5c59216 100644 --- a/wowup-electron/src/assets/i18n/pt.json +++ b/wowup-electron/src/assets/i18n/pt.json @@ -8,9 +8,9 @@ "SHOW_ACTION": "Mostrar" }, "THEME": { - "ALLIANCE": "Alliance", - "DEFAULT": "Default", - "HORDE": "Horde" + "ALLIANCE": "Aliança", + "DEFAULT": "Padrão", + "HORDE": "Horda" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Instalar atualização do WowUp", @@ -18,7 +18,7 @@ "INSTALL_TITLE": "Atualização do WowUp Pronta", "NOT_AVAILABLE": "A última atualização do WowUp já está instalada", "PORTABLE_DOWNLOAD_MESSAGE": "Do you want to manually download the latest portable version?\n\nYou will need to close the app manually and copy over the new version.", - "PORTABLE_DOWNLOAD_TITLE": "Manual Download Required", + "PORTABLE_DOWNLOAD_TITLE": "Download manual é necessário", "SNACKBAR_ACTION": "Atualizar", "SNACKBAR_TEXT": "Uma nova versão do WowUp está disponível", "TOOLTIP": "Atualização do WowUp disponível", @@ -53,11 +53,11 @@ "YESTERDAY": "Ontem" }, "DEPENDENCY": { - "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, one{dependency} other{dependencies}}" + "TOOLTIP": "{dependencyCount} required {dependencyCount, plural, one{dependência} other{dependências}}" }, "DOWNLOAD_COUNT": { - "BILLION": "{count} bilhão", - "MILLION": "{count} milhão", + "BILLION": "{count} {count, plural, one{bilhão} other{bilhões}}", + "MILLION": "{count} {count, plural, one{milhão} other{milhões}}", "THOUSAND": "{count} mil" }, "ENUM": { @@ -226,7 +226,7 @@ "TELEMETRY_DESCRIPTION": "Ajude a melhorar o WowUp enviando dados e/ou erros de instalação anonimamente.", "TELEMETRY_LABEL": "Telemetria", "THEME_DESCRIPTION": "Change the color theme to whatever you like", - "THEME_LABEL": "Color Theme", + "THEME_LABEL": "Cor do tema", "TITLE": "Aplicativo", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "Você quer reiniciar", "USE_HARDWARE_ACCELERATION_DESCRIPTION": "Desabilitar aceleração de hardware pode solucionar problemas de FPS de corrigir outros problemas de renderização no app. Mudar esta opção exige reiniciar o aplicativo.", From 66e98d6f6d3ad042d9389afcebdf6977387cc583 Mon Sep 17 00:00:00 2001 From: NoobTaco Date: Sun, 15 Nov 2020 08:01:28 -0800 Subject: [PATCH 55/71] More tweaking on color pallet. I used a material palette generator to provide colors that will work better together. This is just a small tweak to the colors, but should be more pleasing on the eye. --- wowup-electron/src/variables.scss | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/wowup-electron/src/variables.scss b/wowup-electron/src/variables.scss index 7e42a957..0b350cd7 100644 --- a/wowup-electron/src/variables.scss +++ b/wowup-electron/src/variables.scss @@ -22,13 +22,15 @@ $epic-color: #a335ee; $artifact: #dbcc78; // HORDE -$horde-red-1: #8c1616; // Header Color -$horde-red-2: #9e1d1d; // Option toggle color -$horde-red-3: #590000; // Scroll bar toggle color -$horde-control: #c24a3d; // Option toggle color +// Material Color Palette - http://mcg.mbitson.com/#!?horde=%238c1616 +$horde-red-1: #8c1616; // Header Color - Primary 500 +$horde-red-2: #9d3939; // Second Color - Primary 400 +$horde-red-3: #5c0606; // Scroll bar toggle color - Primary 900 +$horde-control: #ff5b5b; // Option toggle color - Accent 200 // ALLIANCE -$alliance-blue-1: #162c57; // Header color -$alliance-blue-2: #2b4a88; // Option toggle color -$alliance-blue-3: #00002e; // Scroll bar toggle color -$alliance-control: #406abd; // Option toggle color +// Material Color Palette - http://mcg.mbitson.com/#!?alliance=%23162c57 +$alliance-blue-1: #162c57; // Header color - Primary 500 +$alliance-blue-2: #394c70; // Secondary color - Primary 400 +$alliance-blue-3: #06102c; // Scroll bar toggle color - Primary 900 +$alliance-control: #335eff; // Option toggle color - Accent 200 From 5e15be1de44314eb72b36ec65a6e92ccd89d2aec Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 15 Nov 2020 10:10:37 -0600 Subject: [PATCH 56/71] Add more logging to try and diagnose unresponsive ui --- wowup-electron/main.ts | 55 +++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index 45bf1d85..4afb1813 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -5,6 +5,7 @@ import { Menu, MenuItem, MenuItemConstructorOptions, + powerMonitor, } from "electron"; import * as log from "electron-log"; import * as Store from "electron-store"; @@ -93,7 +94,7 @@ function createWindow(): BrowserWindow { webSecurity: false, enableRemoteModule: true, }, - minWidth: 900, + minWidth: 940, minHeight: 550, show: false, }; @@ -118,6 +119,23 @@ function createWindow(): BrowserWindow { win.webContents.userAgent = USER_AGENT; + // See https://www.electronjs.org/docs/api/web-contents#event-render-process-gone + win.webContents.on("render-process-gone", (evt, details) => { + log.error("webContents render-process-gone"); + log.error(evt); + log.error(details); + }); + + // See https://www.electronjs.org/docs/api/web-contents#event-unresponsive + win.webContents.on("unresponsive", () => { + log.error("webContents unresponsive"); + }); + + // See https://www.electronjs.org/docs/api/web-contents#event-responsive + win.webContents.on("responsive", () => { + log.error("webContents responsive"); + }); + win.once("ready-to-show", () => { if (canStartHidden()) { return; @@ -165,23 +183,6 @@ function createWindow(): BrowserWindow { ); } - // Emitted when the window is closed. - // win.on('closed', () => { - // // Dereference the window object, usually you would store window - // // in an array if your app supports multi windows, this is the time - // // when you should delete the corresponding element. - // win = null; - // }); - - // win.on('minimize', function (event) { - // event.preventDefault(); - // win.hide(); - // }); - - // win.on('restore', function (event) { - // win.show(); - // }); - return win; } @@ -204,7 +205,7 @@ try { }); } - app.allowRendererProcessReuse = true; + app.allowRendererProcessReuse = false; // This method will be called when Electron has finished // initialization and is ready to create browser windows. @@ -242,6 +243,22 @@ try { createWindow(); } }); + + powerMonitor.on("resume", () => { + log.info("powerMonitor resume"); + }); + + powerMonitor.on("suspend", () => { + log.info("powerMonitor suspend"); + }); + + powerMonitor.on("lock-screen", () => { + log.info("powerMonitor lock-screen"); + }); + + powerMonitor.on("unlock-screen", () => { + log.info("powerMonitor unlock-screen"); + }); } catch (e) { // Catch Error // throw e; From bafa7892275f29182c9e4b98703a8dceb85b1f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=83=81=ED=98=84=5FSoaa?= Date: Mon, 16 Nov 2020 12:04:01 +0900 Subject: [PATCH 57/71] - [i18n][ko] fixed typo and updated new messages --- wowup-electron/src/assets/i18n/ko.json | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index 2bb78412..68f808b8 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -3,20 +3,20 @@ "AUTO_UPDATE_NOTIFICATION_BODY": "{count} 개의 애드온이 자동업데이트됨", "AUTO_UPDATE_NOTIFICATION_TITLE": "자동 업데이트", "SYSTEM_TRAY": { - "CHECK_UPDATE": "업데이트 확인 중...", + "CHECK_UPDATE": "업데이트 확인", "QUIT_ACTION": "종료", "SHOW_ACTION": "창 열기" }, "THEME": { - "ALLIANCE": "Alliance", - "DEFAULT": "Default", - "HORDE": "Horde" + "ALLIANCE": "얼라이언스", + "DEFAULT": "기본", + "HORDE": "호드" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "WowUp 업데이트 설치", - "INSTALL_MESSAGE": "업데이트를 설치하기 위해 WowUp을 재시작할까요?", + "INSTALL_MESSAGE": "업데이트를 설치하기 위해 프로그램을 재시작할까요?", "INSTALL_TITLE": "WowUp 업데이트 준비됨", - "NOT_AVAILABLE": "최신 버전의 WowUp이 설치됨", + "NOT_AVAILABLE": "최신 버전입니다", "PORTABLE_DOWNLOAD_MESSAGE": "최신 포터블 버전을 수동 다운로드하시겠습니까?\n\n앱을 수동으로 닫고 새 버전 파일로 엎어써야 합니다.", "PORTABLE_DOWNLOAD_TITLE": "수동 다운로드 필요", "SNACKBAR_ACTION": "업데이트", @@ -135,7 +135,7 @@ } }, "HOME": { - "ABOUT_TAB_TITLE": "소개", + "ABOUT_TAB_TITLE": "프로그램 소개", "GET_ADDONS_TAB_TITLE": "애드온 찾기", "MY_ADDONS_TAB_TITLE": "내 애드온", "OPTIONS_TAB_TITLE": "설정" @@ -170,7 +170,7 @@ }, "RESCAN_FOLDERS_BUTTON": "디렉토리 재탐색", "RESCAN_FOLDERS_BUTTON_TOOLTIP": "설치된 애드온 목록 확인을 위해 클라이언트 디렉토리를 탐색합니다", - "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "설치된 애드온을 찾기 위해 재탐색을 할 경우, 애드온 정보가 초기화될 수 있습니다. 특정 애드온이 인식되지 않았거나 버전 정보가 올바르게 표시되지 않을 경우에만 사용하세요. 탐색 작업 중 애드온이 삭제되지는 않으며, WowUp의 정보와 매칭작업만 이루어집니다.\n\n탐색 작업에 시작이 소요될 수 있습니다.", + "RESCAN_FOLDERS_CONFIRMATION_DESCRIPTION": "설치된 애드온을 찾기 위해 재탐색을 할 경우, 애드온 정보가 초기화될 수 있습니다. 특정 애드온이 인식되지 않았거나 버전 정보가 올바르게 표시되지 않을 경우에만 사용하세요. 탐색 작업 중 애드온이 삭제되지는 않으며, WowUp의 정보와 매칭작업만 이루어집니다.\n\n탐색 작업에 시간이 소요될 수 있습니다.", "RESCAN_FOLDERS_CONFIRMATION_TITLE": "재탐색을 하시겠습니까?", "SPINNER": { "GATHERING_ADDONS": "애드온 수집 중...", @@ -212,8 +212,8 @@ "CURRENT_LANGUAGE_LABEL": "현재 언어", "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "애드온 자동업데이트 등과 같은 다양한 시스템 알림 팝업 활성화 여부", "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "시스템 알림 활성화", - "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "WowUp 창을 닫으면 메뉴바로 최소화", - "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "WowUp 창을 닫으면 시스템 트레이로 최소화", + "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "창을 닫으면 메뉴바로 최소화", + "MINIMIZE_ON_CLOSE_DESCRIPTION_WINDOWS": "창을 닫으면 시스템 트레이로 최소화", "MINIMIZE_ON_CLOSE_LABEL": "종료 시 최소화", "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "기본 언어를 바꾸려면 애플리케이션을 다시 시작해야 합니다.", "SET_LANGUAGE_CONFIRMATION_LABEL": "새 기본 언어 설정", @@ -225,11 +225,11 @@ "START_WITH_SYSTEM_LABEL": "시동 시 자동 실행", "TELEMETRY_DESCRIPTION": "앱 설치 데이터 또는 오류를 익명으로 전송하여 WowUp 서비스 개선에 도움을 줍니다.", "TELEMETRY_LABEL": "데이터 전송", - "THEME_DESCRIPTION": "Change the color theme to whatever you like", - "THEME_LABEL": "Color Theme", - "TITLE": "애픒리케이션", + "THEME_DESCRIPTION": "원하시는 테마 색상을 선택하세요.", + "THEME_LABEL": "테마", + "TITLE": "애플리케이션", "USE_HARDWARE_ACCELERATION_CONFIRMATION_LABEL": "재시작하시겠습니까?", - "USE_HARDWARE_ACCELERATION_DESCRIPTION": "하드웨어 가속을 비활성화 하면 FPS 또는 다른 렌더링 이슈 해결이 가능합니다. 변경 시 재시작이 필요합니다", + "USE_HARDWARE_ACCELERATION_DESCRIPTION": "FPS 문제 등 렌더링 이슈를 겪고 있다면 하드웨어 가속을 비활성화해보세요. 변경 시 재시작이 필요합니다", "USE_HARDWARE_ACCELERATION_DISABLE_CONFIRMATION_DESCRIPTION": "하드웨어 가속을 비활성화 하려면 재시작이 필요합니다.", "USE_HARDWARE_ACCELERATION_ENABLE_CONFIRMATION_DESCRIPTION": "하드웨어 가속을 활성화 하려면 재시작이 필요합니다.", "USE_HARDWARE_ACCELERATION_LABEL": "하드웨어 가속 활성화" @@ -251,7 +251,7 @@ "WOW": { "AUTO_UPDATE_DESCRIPTION": "새로 설치되는 애드온의 자동업데이트 옵션을 활성화합니다.", "AUTO_UPDATE_LABEL": "자동 업데이트", - "CLIENT_TYPE_INPUT_HINT": "{clientTypeName} 클라이언트 \"{clientFolderName}\" 디렉토리를 포함하는 위치", + "CLIENT_TYPE_INPUT_HINT": "\"{clientFolderName}\" 디렉토리를 포함하는 위치", "CLIENT_TYPE_PATH_LABEL": "{clientTypeName} 설치 위치", "DEFAULT_ADDON_CHANNEL_LABEL": "기본 애드온 채널", "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "애드온 채널", From a0fcb00b4e873bbfb2a948d8788b05bd6aab6653 Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 15 Nov 2020 22:38:03 -0600 Subject: [PATCH 58/71] Make theme logo non clickable Fix #421 --- wowup-electron/src/app/pages/options/options.component.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/wowup-electron/src/app/pages/options/options.component.scss b/wowup-electron/src/app/pages/options/options.component.scss index 7e384b80..509c27a8 100644 --- a/wowup-electron/src/app/pages/options/options.component.scss +++ b/wowup-electron/src/app/pages/options/options.component.scss @@ -20,6 +20,7 @@ right: 0; z-index: 1; overflow: hidden; + pointer-events: none; img { height: 100vh; From 07a5eedbb2032189d141b5174afed4516019aa5a Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 15 Nov 2020 22:43:29 -0600 Subject: [PATCH 59/71] Fix being able to resize windo from the top --- wowup-electron/src/app/app.component.html | 2 +- .../src/app/components/titlebar/titlebar.component.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/wowup-electron/src/app/app.component.html b/wowup-electron/src/app/app.component.html index a5195a33..35267529 100644 --- a/wowup-electron/src/app/app.component.html +++ b/wowup-electron/src/app/app.component.html @@ -1,5 +1,5 @@
    - +
    diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.scss b/wowup-electron/src/app/components/titlebar/titlebar.component.scss index 7c0fe988..4ce8d26d 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.scss +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.scss @@ -5,6 +5,7 @@ flex-direction: row; align-items: center; position: relative; + margin-top: 4px; .debug-button { height: 15px; From d1a3145aacc1557d4c7f4f81dacec454ccb198ef Mon Sep 17 00:00:00 2001 From: jliddev Date: Sun, 15 Nov 2020 22:48:43 -0600 Subject: [PATCH 60/71] Rename the example theme name ;) --- wowup-electron/src/custom-theme.scss | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wowup-electron/src/custom-theme.scss b/wowup-electron/src/custom-theme.scss index 9f99795c..69d337e8 100644 --- a/wowup-electron/src/custom-theme.scss +++ b/wowup-electron/src/custom-theme.scss @@ -43,20 +43,20 @@ $md-wowup-pallette: ( // Define the palettes for your theme using the Material Design palettes available in palette.scss // (imported above). For each palette, you can optionally specify a default, lighter, and darker // hue. Available color palettes: https://material.io/design/color/ -$candy-app-primary: mat-palette($md-wowup-pallette, 100, 50, 300); -$candy-app-accent: mat-palette($md-wowup-pallette, A200, A100, A400); +$wowup-default-primary: mat-palette($md-wowup-pallette, 100, 50, 300); +$wowup-default-accent: mat-palette($md-wowup-pallette, A200, A100, A400); // The warn palette is optional (defaults to red). -$candy-app-warn: mat-palette($mat-red); +$wowup-default-warn: mat-palette($mat-red); // Create the theme object. A theme consists of configurations for individual // theming systems such as `color` or `typography`. -$candy-app-theme: mat-dark-theme( +$wowup-default-theme: mat-dark-theme( ( color: ( - primary: $candy-app-primary, - accent: $candy-app-accent, - warn: $candy-app-warn, + primary: $wowup-default-primary, + accent: $wowup-default-accent, + warn: $wowup-default-warn, ), ) ); @@ -94,7 +94,7 @@ $candy-app-theme: mat-dark-theme( // Include theme styles for core and each component used in your app. // Alternatively, you can import and @include the theme mixins for each component // that you are using. -@include angular-material-theme($candy-app-theme); +@include angular-material-theme($wowup-default-theme); // Horde theme $horde-pallette: ( From b25f6fcb1567367b33fe0f4773b7557075719802 Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 16 Nov 2020 00:20:54 -0600 Subject: [PATCH 61/71] Start breakdown for light-theme --- wowup-electron/main.ts | 13 +- wowup-electron/src/app/app.component.scss | 2 - .../components/footer/footer.component.html | 16 +- .../components/footer/footer.component.scss | 39 +-- .../my-addons-addon-cell.component.html | 12 +- .../my-addons-addon-cell.component.scss | 12 - .../options-app-section.component.ts | 3 +- .../titlebar/titlebar.component.scss | 2 +- .../src/app/pages/about/about.component.html | 33 +- .../src/app/pages/about/about.component.scss | 15 +- .../src/app/pages/home/home.component.html | 2 +- .../src/app/pages/home/home.component.scss | 2 - .../my-addons/dist/my-addons.component.css | 83 ----- .../pages/my-addons/my-addons.component.html | 322 +++++------------- .../pages/my-addons/my-addons.component.scss | 9 - .../app/pages/options/options.component.html | 2 +- .../app/pages/options/options.component.scss | 84 ----- .../src/app/services/icons/icon.service.ts | 3 + wowup-electron/src/common/constants.ts | 3 + wowup-electron/src/custom-theme.scss | 141 ++++++++ wowup-electron/src/styles.scss | 21 -- 21 files changed, 278 insertions(+), 541 deletions(-) delete mode 100644 wowup-electron/src/app/pages/my-addons/dist/my-addons.component.css diff --git a/wowup-electron/main.ts b/wowup-electron/main.ts index 4afb1813..ba218984 100644 --- a/wowup-electron/main.ts +++ b/wowup-electron/main.ts @@ -16,7 +16,13 @@ import * as platform from "./platform"; import { initializeAppUpdateIpcHandlers, initializeAppUpdater } from "./app-updater"; import "./ipc-events"; import { initializeIpcHanders } from "./ipc-events"; -import { COLLAPSE_TO_TRAY_PREFERENCE_KEY, USE_HARDWARE_ACCELERATION_PREFERENCE_KEY } from "./src/common/constants"; +import { + COLLAPSE_TO_TRAY_PREFERENCE_KEY, + CURRENT_THEME_KEY, + DEFAULT_BG_COLOR, + DEFAULT_LIGHT_BG_COLOR, + USE_HARDWARE_ACCELERATION_PREFERENCE_KEY, +} from "./src/common/constants"; import { AppOptions } from "./src/common/wowup/app-options"; import { windowStateManager } from "./window-state"; @@ -72,6 +78,9 @@ function canStartHidden() { } function createWindow(): BrowserWindow { + const savedTheme = preferenceStore.get(CURRENT_THEME_KEY) as string; + const backgroundColor = savedTheme && savedTheme.indexOf("light") !== -1 ? DEFAULT_LIGHT_BG_COLOR : DEFAULT_BG_COLOR; + // Main object for managing window state // Initialize with a window name and default size const mainWindowManager = windowStateManager("main", { @@ -84,7 +93,7 @@ function createWindow(): BrowserWindow { height: mainWindowManager.height, x: mainWindowManager.x, y: mainWindowManager.y, - backgroundColor: "#444444", + backgroundColor, title: "WowUp", titleBarStyle: "hidden", webPreferences: { diff --git a/wowup-electron/src/app/app.component.scss b/wowup-electron/src/app/app.component.scss index 2840342c..355f670b 100644 --- a/wowup-electron/src/app/app.component.scss +++ b/wowup-electron/src/app/app.component.scss @@ -1,5 +1,3 @@ -:host { -} .app { height: 100vh; overflow: hidden; diff --git a/wowup-electron/src/app/components/footer/footer.component.html b/wowup-electron/src/app/components/footer/footer.component.html index e480c2f0..3395b0c2 100644 --- a/wowup-electron/src/app/components/footer/footer.component.html +++ b/wowup-electron/src/app/components/footer/footer.component.html @@ -1,7 +1,7 @@ -
    +
    @@ -9,23 +9,23 @@ - + - + @@ -49,7 +49,7 @@
    - - -
    @@ -90,27 +56,16 @@

    {{ "COMMON.SEARCH.NO_ADDONS" | translate }}

-
- +
+
@@ -128,14 +83,9 @@ - @@ -144,12 +94,8 @@ - @@ -158,14 +104,9 @@ - @@ -200,11 +141,8 @@
{{ element.addon.providerSource }}
- + @@ -222,42 +160,24 @@ - + - +
{{ "PAGES.MY_ADDONS.TABLE.ADDON_COLUMN_HEADER" | translate }} - + {{ "PAGES.MY_ADDONS.TABLE.UPDATED_AT_COLUMN_HEADER" | translate }} + matTooltipPosition="above" matTooltipShowDelay="500"> {{ element.installedAt | relativeDuration }} {{ "PAGES.MY_ADDONS.TABLE.LATEST_VERSION_COLUMN_HEADER" | translate }} + {{ element.addon.latestVersion }} {{ "PAGES.MY_ADDONS.TABLE.RELEASED_AT_COLUMN_HEADER" | translate }} + matTooltipPosition="above" matTooltipShowDelay="500"> {{ element.addon.releasedAt | relativeDuration }}
-
+
-
+
{{ listItem.thumbnailLetter }} @@ -272,97 +192,45 @@
- + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.IGNORE_ADDON_BUTTON" | translate }} - + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.AUTO_UPDATE_ADDON_BUTTON" | translate }} - - - - - + + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.STABLE_ADDON_CHANNEL" | translate }} - + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.BETA_ADDON_CHANNEL" | translate }} - + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.ALPHA_ADDON_CHANNEL" | translate }} @@ -370,33 +238,21 @@ -
+
PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.ADDONS_SELECTED
- + {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.IGNORE_ADDON_BUTTON" | translate }} - + (change)="onClickAutoUpdateAddons($event, listItems)"> {{ "PAGES.MY_ADDONS.ADDON_CONTEXT_MENU.AUTO_UPDATE_ADDON_BUTTON" | translate }}
- + {{ column.display | translate }}
-
+
+
- - - + \ No newline at end of file diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.scss b/wowup-electron/src/app/pages/my-addons/my-addons.component.scss index 97dc774e..bf9c66e6 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.scss +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.scss @@ -53,22 +53,13 @@ } .table-container { - // height: calc(100% - 75px); - background-color: $dark-2; overflow: auto; table { width: 100%; } - tr { - &:hover { - background-color: $dark-1; - } - } - .addon-logo-container { - background-color: $dark-2; width: 40px; height: 40px; display: flex; diff --git a/wowup-electron/src/app/pages/options/options.component.html b/wowup-electron/src/app/pages/options/options.component.html index d692ea2f..2df65eb9 100644 --- a/wowup-electron/src/app/pages/options/options.component.html +++ b/wowup-electron/src/app/pages/options/options.component.html @@ -27,7 +27,7 @@
- @@ -64,7 +64,7 @@ - {{ minimizeOnCloseDescription }} + {{ minimizeOnCloseDescription }}
@@ -80,7 +80,7 @@ >
- + {{ "PAGES.OPTIONS.APPLICATION.ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION" | translate }} @@ -95,7 +95,7 @@ - {{ "PAGES.OPTIONS.APPLICATION.USE_HARDWARE_ACCELERATION_DESCRIPTION" | translate }} + {{ "PAGES.OPTIONS.APPLICATION.USE_HARDWARE_ACCELERATION_DESCRIPTION" | translate }}
@@ -104,7 +104,7 @@
{{ "PAGES.OPTIONS.APPLICATION.START_WITH_SYSTEM_LABEL" | translate }}
- {{ "PAGES.OPTIONS.APPLICATION.START_WITH_SYSTEM_DESCRIPTION" | translate }} + {{ "PAGES.OPTIONS.APPLICATION.START_WITH_SYSTEM_DESCRIPTION" | translate }}
{{ "PAGES.OPTIONS.APPLICATION.START_MINIMIZED_LABEL" | translate }} - {{ "PAGES.OPTIONS.APPLICATION.START_MINIMIZED_DESCRIPTION" | translate }} + {{ "PAGES.OPTIONS.APPLICATION.START_MINIMIZED_DESCRIPTION" | translate }} -
-
+
+
-
+
{{ thumbnailLetter }}
-
+
{{ isAlphaChannel ? "Alpha" : "Beta" }}
- {{ addon.name }} -
- + {{ addon.name }} +
+ {{ addon | getAddonListItemFileProp: "version":channel }}
-
+
\ No newline at end of file diff --git a/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.scss b/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.scss index 4856d8f3..78e9d3d2 100644 --- a/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.scss +++ b/wowup-electron/src/app/components/potential-addon-table-column/potential-addon-table-column.component.scss @@ -8,7 +8,6 @@ margin-right: 11px; .addon-logo-container { - background-color: $dark-2; width: 40px; height: 40px; display: flex; @@ -41,7 +40,6 @@ } .addon-logo-letter { - color: $white-4; font-size: 2em; font-weight: 400; } @@ -50,7 +48,6 @@ .addon-title { white-space: normal; text-decoration: none; - color: $white-1; &:hover { cursor: pointer; @@ -67,7 +64,6 @@ .mat-icon { width: 11px; height: 11px; - color: $white-1; } } } diff --git a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.html b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.html index c4ac3f91..411cf9fb 100644 --- a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.html +++ b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.html @@ -1,4 +1,4 @@ -
+
{{ message || defaultMessage }}
diff --git a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.scss b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.scss index 5b5364fc..d6887ba5 100644 --- a/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.scss +++ b/wowup-electron/src/app/components/progress-spinner/progress-spinner.component.scss @@ -6,7 +6,6 @@ flex-direction: column; align-items: center; margin-top: 2em; - color: $white-1; } pre { diff --git a/wowup-electron/src/app/components/titlebar/titlebar.component.ts b/wowup-electron/src/app/components/titlebar/titlebar.component.ts index 1a4cce00..733e36b8 100644 --- a/wowup-electron/src/app/components/titlebar/titlebar.component.ts +++ b/wowup-electron/src/app/components/titlebar/titlebar.component.ts @@ -1,5 +1,12 @@ import { Component, NgZone, OnDestroy, OnInit } from "@angular/core"; -import { ALLIANCE_THEME, DEFAULT_THEME, HORDE_THEME } from "common/constants"; +import { + ALLIANCE_LIGHT_THEME, + ALLIANCE_THEME, + DEFAULT_LIGHT_THEME, + DEFAULT_THEME, + HORDE_LIGHT_THEME, + HORDE_THEME, +} from "common/constants"; import { platform } from "os"; import { Subscription } from "rxjs"; import { AppConfig } from "../../../environments/environment"; @@ -39,10 +46,13 @@ export class TitlebarComponent implements OnInit, OnDestroy { getLogoPath() { switch (this._wowUpService.currentTheme) { case HORDE_THEME: + case HORDE_LIGHT_THEME: return "assets/images/horde-1.png"; case ALLIANCE_THEME: + case ALLIANCE_LIGHT_THEME: return "assets/images/alliance-1.png"; case DEFAULT_THEME: + case DEFAULT_LIGHT_THEME: default: return "assets/images/wowup-white-1.png"; } diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.html b/wowup-electron/src/app/pages/get-addons/get-addons.component.html index bd0ac485..06ee5a5c 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.html +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.html @@ -1,21 +1,14 @@ -
+ }">
{{ "PAGES.GET_ADDONS.CLIENT_TYPE_SELECT_LABEL" | translate }} - + {{ warcraftService.getClientDisplayName(clientType) }} @@ -27,38 +20,19 @@ {{ "PAGES.GET_ADDONS.SEARCH_LABEL" | translate }} -
- -
@@ -69,32 +43,20 @@
-
+

{{ "COMMON.SEARCH.NO_ADDONS" | translate }}

- +
@@ -113,19 +75,11 @@ {{ "PAGES.GET_ADDONS.TABLE.RELEASED_AT_COLUMN_HEADER" | translate }} - - + +
{{ "PAGES.GET_ADDONS.TABLE.ADDON_COLUMN_HEADER" | translate }} - + - -
+ }" [ngTemplateOutlet]="t" #t> +
{{ releasedAt | relativeDuration }}
@@ -159,35 +113,23 @@ {{ "PAGES.GET_ADDONS.TABLE.STATUS_COLUMN_HEADER" | translate }}
- +
-
+
+
@@ -196,13 +138,9 @@
- + {{ column.display | translate }} - + \ No newline at end of file diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.scss b/wowup-electron/src/app/pages/get-addons/get-addons.component.scss index 87113c3d..f3fd9f43 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.scss +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.scss @@ -44,7 +44,6 @@ .no-addons-container { display: flex; - color: $white-1; justify-content: center; flex-direction: column; align-items: center; @@ -64,34 +63,6 @@ width: 100%; } - tr { - &:hover { - background-color: $dark-1; - } - } - - .addon-logo-container { - background-color: $dark-2; - width: 40px; - height: 40px; - display: flex; - flex-direction: column; - justify-content: center; - margin-right: 0.5em; - flex-shrink: 0; - - .addon-logo { - width: 100%; - } - } - - .addon-title { - font-weight: 400; - font-size: 1.1em; - word-break: break-all; - white-space: pre-wrap; - } - .cell-padding { padding-right: 1em; } diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.html b/wowup-electron/src/app/pages/my-addons/my-addons.component.html index 52fbf78d..11d342bc 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.html +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.html @@ -52,7 +52,7 @@
-
+

{{ "COMMON.SEARCH.NO_ADDONS" | translate }}

@@ -164,9 +164,10 @@ (contextmenu)="onHeaderContext($event); $event.preventDefault()"> + class="hover-bg-secondary-2" [ngClass]="{ 'bg-secondary-4': row.selected }" + (click)="onRowClicked($event, row, i)" (dblclick)="openDetailDialog(row)" + (contextmenu)="onCellContext($event, row)" (keydown.control.a)="selectAllRows($event)" + (keydown.meta.a)="selectAllRows($event)">
diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.scss b/wowup-electron/src/app/pages/my-addons/my-addons.component.scss index bf9c66e6..6fd7d3e9 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.scss +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.scss @@ -111,10 +111,6 @@ } } - .selected-row { - background: $dark-4; - } - .addon-provider { display: flex; align-items: center; diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 88502dfc..039278fd 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Alliance", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Default", - "HORDE": "Horde" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horde", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Install WowUp update", diff --git a/wowup-electron/src/common/constants.ts b/wowup-electron/src/common/constants.ts index 78bc1f0d..d950d254 100644 --- a/wowup-electron/src/common/constants.ts +++ b/wowup-electron/src/common/constants.ts @@ -49,8 +49,10 @@ export const APP_UPDATE_CHECK_END = "app-update-check-end"; // THEMES export const DEFAULT_THEME = "default-theme"; -export const DEFAULT_LIGHT_THEME = "default-light-theme"; +export const DEFAULT_LIGHT_THEME = "default-theme-light-theme"; export const HORDE_THEME = "horde-theme"; +export const HORDE_LIGHT_THEME = "horde-theme-light-theme"; export const ALLIANCE_THEME = "alliance-theme"; +export const ALLIANCE_LIGHT_THEME = "alliance-theme-light-theme"; export const DEFAULT_BG_COLOR = "#444444"; export const DEFAULT_LIGHT_BG_COLOR = "#ebedef"; diff --git a/wowup-electron/src/custom-theme.scss b/wowup-electron/src/custom-theme.scss index 03c53572..3fdc6848 100644 --- a/wowup-electron/src/custom-theme.scss +++ b/wowup-electron/src/custom-theme.scss @@ -147,88 +147,81 @@ $wowup-light-theme: mat-light-theme( .mat-input-element { caret-color: $white-3 !important; + color: $white-1 !important; } .mat-form-field.mat-focused .mat-form-field-label { color: $white-2 !important; } -.default-light-theme { +.default-theme-light-theme { @include angular-material-color($wowup-light-theme); - $secondary-1: #ffffff; - $secondary-2: #f2f3f5; - $secondary-3: #ebedef; - $secondary-4: #e3e5e8; - - $text-1: #000000; - $text-2: #666666; - $text-3: #888888; - .bg-secondary { - background-color: $secondary-1 !important; + background-color: $lt-secondary-1 !important; } .bg-secondary-2 { - background-color: $secondary-2 !important; + background-color: $lt-secondary-2 !important; } .bg-secondary-3 { - background-color: $secondary-3 !important; + background-color: $lt-secondary-3 !important; } .bg-secondary-4 { - background-color: $secondary-4 !important; + background-color: $lt-secondary-4 !important; } .hover-bg-secondary:hover { - background-color: $secondary-1 !important; + background-color: $lt-secondary-1 !important; } .hover-bg-secondary-2:hover { - background-color: $secondary-2 !important; + background-color: $lt-secondary-2 !important; } .hover-bg-secondary-3:hover { - background-color: $secondary-3 !important; + background-color: $lt-secondary-3 !important; } .hover-bg-secondary-4:hover { - background-color: $secondary-4 !important; + background-color: $lt-secondary-4 !important; } .text-1 { - color: $text-1 !important; + color: $lt-text-1 !important; } .text-2 { - color: $text-2 !important; + color: $lt-text-2 !important; } .text-3 { - color: $text-3 !important; + color: $lt-text-3 !important; } .hover-text-1:hover { - color: $text-1 !important; + color: $lt-text-1 !important; } .hover-text-2:hover { - color: $text-2 !important; + color: $lt-text-2 !important; } ::-webkit-scrollbar-track { - background-color: $secondary-4 !important; + background-color: $lt-secondary-4 !important; } .mat-form-field-label { - color: $text-1 !important; + color: $lt-text-1 !important; } .mat-input-element { - caret-color: $text-3 !important; + caret-color: $lt-text-3 !important; + color: $lt-text-1 !important; } .mat-form-field.mat-focused .mat-form-field-label { - color: $text-2 !important; + color: $lt-text-2 !important; } } @@ -283,9 +276,25 @@ $horde-theme: mat-dark-theme( ) ); +$horde-theme-light: mat-light-theme( + ( + color: ( + primary: $horde-primary, + accent: $horde-accent, + warn: $horde-warn, + ), + ) +); + +.horde-theme-light-theme { + @include angular-material-color($horde-theme-light); +} + .horde-theme { @include angular-material-color($horde-theme); +} +[class*="horde-theme"] { .border-primary { border-color: $horde-red-1 !important; } @@ -404,3 +413,74 @@ $alliance-theme: mat-dark-theme( background: $dark-3; } } + +// LIGHT THEME +[class*="light-theme"] { + .bg-secondary { + background-color: $lt-secondary-1 !important; + } + + .bg-secondary-2 { + background-color: $lt-secondary-2 !important; + } + + .bg-secondary-3 { + background-color: $lt-secondary-3 !important; + } + + .bg-secondary-4 { + background-color: $lt-secondary-4 !important; + } + + .hover-bg-secondary:hover { + background-color: $lt-secondary-1 !important; + } + + .hover-bg-secondary-2:hover { + background-color: $lt-secondary-2 !important; + } + + .hover-bg-secondary-3:hover { + background-color: $lt-secondary-3 !important; + } + + .hover-bg-secondary-4:hover { + background-color: $lt-secondary-4 !important; + } + + .text-1 { + color: $lt-text-1 !important; + } + + .text-2 { + color: $lt-text-2 !important; + } + + .text-3 { + color: $lt-text-3 !important; + } + + .hover-text-1:hover { + color: $lt-text-1 !important; + } + + .hover-text-2:hover { + color: $lt-text-2 !important; + } + + ::-webkit-scrollbar-track { + background-color: $lt-secondary-4 !important; + } + + .mat-form-field-label { + color: $lt-text-1 !important; + } + + .mat-input-element { + caret-color: $lt-text-3 !important; + color: $lt-text-1 !important; + } + .mat-form-field.mat-focused .mat-form-field-label { + color: $lt-text-2 !important; + } +} diff --git a/wowup-electron/src/styles.scss b/wowup-electron/src/styles.scss index 30a7a553..8432f98e 100644 --- a/wowup-electron/src/styles.scss +++ b/wowup-electron/src/styles.scss @@ -183,9 +183,7 @@ img { } } -.mat-input-element { - color: $white-1 !important; -} + .mat-option.mat-selected:not(.mat-option-disabled) { color: $white-3 !important; diff --git a/wowup-electron/src/variables.scss b/wowup-electron/src/variables.scss index 0b350cd7..9b3ca883 100644 --- a/wowup-electron/src/variables.scss +++ b/wowup-electron/src/variables.scss @@ -34,3 +34,13 @@ $alliance-blue-1: #162c57; // Header color - Primary 500 $alliance-blue-2: #394c70; // Secondary color - Primary 400 $alliance-blue-3: #06102c; // Scroll bar toggle color - Primary 900 $alliance-control: #335eff; // Option toggle color - Accent 200 + +// LIGHT THEME +$lt-secondary-1: #ffffff; +$lt-secondary-2: #f2f3f5; +$lt-secondary-3: #ebedef; +$lt-secondary-4: #e3e5e8; + +$lt-text-1: #000000; +$lt-text-2: #666666; +$lt-text-3: #888888; From 0dac45775e301b43c9c36f82a96a388498161a26 Mon Sep 17 00:00:00 2001 From: Zazou89 <206181+Zazou89@users.noreply.github.com> Date: Mon, 16 Nov 2020 14:32:07 +0100 Subject: [PATCH 63/71] missing translation --- wowup-electron/src/assets/i18n/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 5b3f6bf1..09c7f29a 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -1,6 +1,6 @@ { "APP": { - "AUTO_UPDATE_NOTIFICATION_BODY": "Automatically updated {count} {count, plural, =1{addon} other{addons}}.", + "AUTO_UPDATE_NOTIFICATION_BODY": "Mise à jour automatique de {count} {count, plural, =1{addon} other{addons}}.", "AUTO_UPDATE_NOTIFICATION_TITLE": "Mises à jour Auto", "SYSTEM_TRAY": { "CHECK_UPDATE": "Vérification des mises à jour...", From b5b81588b8770aea4a090e63f5c7a19ed5ff9eb0 Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 16 Nov 2020 14:38:38 -0600 Subject: [PATCH 64/71] Localize the client type dropdowns --- .../src/app/models/wowup/select-item.ts | 5 +++++ .../pages/get-addons/get-addons.component.html | 4 ++-- .../pages/my-addons/my-addons.component.html | 5 +++-- .../app/pages/my-addons/my-addons.component.ts | 5 +++-- .../app/services/warcraft/warcraft.service.ts | 17 +++++++++++++++++ wowup-electron/src/assets/i18n/de.json | 12 +++++++++++- wowup-electron/src/assets/i18n/en.json | 7 +++++++ wowup-electron/src/assets/i18n/es.json | 12 +++++++++++- wowup-electron/src/assets/i18n/fr.json | 12 +++++++++++- wowup-electron/src/assets/i18n/it.json | 12 +++++++++++- wowup-electron/src/assets/i18n/ko.json | 12 +++++++++++- wowup-electron/src/assets/i18n/nb.json | 12 +++++++++++- wowup-electron/src/assets/i18n/pt.json | 12 +++++++++++- wowup-electron/src/assets/i18n/ru.json | 12 +++++++++++- wowup-electron/src/assets/i18n/zh.json | 12 +++++++++++- 15 files changed, 136 insertions(+), 15 deletions(-) create mode 100644 wowup-electron/src/app/models/wowup/select-item.ts diff --git a/wowup-electron/src/app/models/wowup/select-item.ts b/wowup-electron/src/app/models/wowup/select-item.ts new file mode 100644 index 00000000..9d04c1fc --- /dev/null +++ b/wowup-electron/src/app/models/wowup/select-item.ts @@ -0,0 +1,5 @@ +// Attempt to make a simple container for localizing select items +export interface SelectItem { + display: string; + value: T; +} diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.html b/wowup-electron/src/app/pages/get-addons/get-addons.component.html index 06ee5a5c..2f95d79e 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.html +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.html @@ -9,8 +9,8 @@ {{ "PAGES.GET_ADDONS.CLIENT_TYPE_SELECT_LABEL" | translate }} - - {{ warcraftService.getClientDisplayName(clientType) }} + + {{ clientType.display | translate }} diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.html b/wowup-electron/src/app/pages/my-addons/my-addons.component.html index 11d342bc..4aeb7d19 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.html +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.html @@ -9,8 +9,9 @@ {{ "PAGES.MY_ADDONS.CLIENT_TYPE_SELECT_LABEL" | translate }} - - {{ warcraftService.getClientDisplayName(clientType) }} + + {{ clientType.display | translate }} diff --git a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts index ece76ef6..508f72ec 100644 --- a/wowup-electron/src/app/pages/my-addons/my-addons.component.ts +++ b/wowup-electron/src/app/pages/my-addons/my-addons.component.ts @@ -20,8 +20,8 @@ import { MatTableDataSource } from "@angular/material/table"; import { TranslateService } from "@ngx-translate/core"; import { AddonUpdateEvent } from "app/models/wowup/addon-update-event"; import * as _ from "lodash"; -import { BehaviorSubject, from, Subscription } from "rxjs"; -import { map } from "rxjs/operators"; +import { BehaviorSubject, from, Observable, Subscription } from "rxjs"; +import { filter, map } from "rxjs/operators"; import { AddonViewModel } from "../../business-objects/my-addon-list-item"; import { AddonDetailComponent, AddonDetailModel } from "../../components/addon-detail/addon-detail.component"; import { ConfirmDialogComponent } from "../../components/confirm-dialog/confirm-dialog.component"; @@ -29,6 +29,7 @@ import { Addon } from "../../entities/addon"; import { WowClientType } from "../../models/warcraft/wow-client-type"; import { AddonInstallState } from "../../models/wowup/addon-install-state"; import { ColumnState } from "../../models/wowup/column-state"; +import { SelectItem } from "../../models/wowup/select-item"; import { ElectronService } from "../../services"; import { AddonService } from "../../services/addons/addon.service"; import { SessionService } from "../../services/session/session.service"; diff --git a/wowup-electron/src/app/services/warcraft/warcraft.service.ts b/wowup-electron/src/app/services/warcraft/warcraft.service.ts index aa1bd156..dcb640b4 100644 --- a/wowup-electron/src/app/services/warcraft/warcraft.service.ts +++ b/wowup-electron/src/app/services/warcraft/warcraft.service.ts @@ -4,6 +4,7 @@ import * as path from "path"; import { BehaviorSubject, from } from "rxjs"; import { filter, map, switchMap } from "rxjs/operators"; import { ElectronService } from ".."; +import { SelectItem } from "../../models/wowup/select-item"; import { InstalledProduct } from "../../models/warcraft/installed-product"; import { ProductDb } from "../../models/warcraft/product-db"; import { WowClientType } from "../../models/warcraft/wow-client-type"; @@ -49,6 +50,22 @@ export class WarcraftService { public installedClientTypes$ = this._installedClientTypesSrc.asObservable(); + // Map the client types so that we can localize them + public installedClientTypesSelectItems$ = this._installedClientTypesSrc.pipe( + filter((clientTypes) => !!clientTypes), + map((clientTypes) => { + return clientTypes.map( + (ct): SelectItem => { + const clientTypeName = getEnumName(WowClientType, ct).toUpperCase(); + return { + display: `COMMON.CLIENT_TYPES.${clientTypeName}`, + value: ct, + }; + } + ); + }) + ); + constructor( private _electronService: ElectronService, private _fileService: FileService, diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index 4bc96a06..63fc6fa5 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Allianz", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Standard", - "HORDE": "Horde" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horde", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "WowUp Update installieren", @@ -43,6 +46,13 @@ "UNINSTALLING": "Deinstalliere", "UPDATING": "Aktualisiere..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "Vor {count} {count, plural, one{Tag} other{Tagen}}", diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 039278fd..93b66191 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -46,6 +46,13 @@ "UNINSTALLING": "Uninstalling", "UPDATING": "Updating..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count} {count, plural, =1{day} other{days}} ago", diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index 3d37a979..e67cab49 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Alianza", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Predeterminado", - "HORDE": "Horda" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horda", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Instalar actualización de WowUp", @@ -43,6 +46,13 @@ "UNINSTALLING": "Desinstalando", "UPDATING": "Actualizando" }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "Hace {count} {count, plural, one{día} other{días}}", diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 09c7f29a..5e1a90c2 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Alliance", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Défaut", - "HORDE": "Horde" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horde", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installer la mise à jour WowUp", @@ -43,6 +46,13 @@ "UNINSTALLING": "Désinstallation", "UPDATING": "En cours de mise à jour" }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "il y a {count} {count, plural, one{jour} other{jours}}", diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json index 0c437dfa..8022e710 100644 --- a/wowup-electron/src/assets/i18n/it.json +++ b/wowup-electron/src/assets/i18n/it.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Alleanza", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Default", - "HORDE": "Orda" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Orda", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installa l'aggiornamento di WowUp", @@ -43,6 +46,13 @@ "UNINSTALLING": "Disinstallazione in corso", "UPDATING": "Aggiornamento in corso..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count} {count, plural, one{giorno} other{giorni}} fa", diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index 68f808b8..10dd7de4 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "얼라이언스", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "기본", - "HORDE": "호드" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "호드", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "WowUp 업데이트 설치", @@ -43,6 +46,13 @@ "UNINSTALLING": "삭제 중", "UPDATING": "업데이트 중..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count}일 전", diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json index 3a71dff0..c916f915 100644 --- a/wowup-electron/src/assets/i18n/nb.json +++ b/wowup-electron/src/assets/i18n/nb.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Alliance", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Default", - "HORDE": "Horde" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horde", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Installer oppdatering til WowUp", @@ -43,6 +46,13 @@ "UNINSTALLING": "Avinstallerer", "UPDATING": "Oppdaterer..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count} {count, plural, one{dag} other{dager}} siden", diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json index a5c59216..8acebd68 100644 --- a/wowup-electron/src/assets/i18n/pt.json +++ b/wowup-electron/src/assets/i18n/pt.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Aliança", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Padrão", - "HORDE": "Horda" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horda", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Instalar atualização do WowUp", @@ -43,6 +46,13 @@ "UNINSTALLING": "Desinstalando", "UPDATING": "Atualizando..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count} {count, plural, one{dia} other{dias}} atrás", diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index 8448c7bf..fef80fef 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Альянс", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "По умолчанию", - "HORDE": "Орда" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Орда", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Установить обновление WowUp", @@ -43,6 +46,13 @@ "UNINSTALLING": "Удаляется", "UPDATING": "Обновляется..." }, + "CLIENT_TYPES": { + "BETA": "Beta RU", + "CLASSIC": "Classic RU", + "CLASSICPTR": "Classic PTR RU", + "RETAIL": "Retail RU", + "RETAILPTR": "Retail PTR RU" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count} {count, plural, one{день} few{дня} other{дней}} назад", diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index f35655b1..8d9b6191 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -9,8 +9,11 @@ }, "THEME": { "ALLIANCE": "Alliance", + "ALLIANCE_LIGHT": "Alliance Light", "DEFAULT": "Default", - "HORDE": "Horde" + "DEFAULT_LIGHT": "Default Light", + "HORDE": "Horde", + "HORDE_LIGHT": "Horde Light" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "安装 WowUp 更新", @@ -43,6 +46,13 @@ "UNINSTALLING": "正在卸载", "UPDATING": "正在更新..." }, + "CLIENT_TYPES": { + "BETA": "Beta", + "CLASSIC": "Classic", + "CLASSICPTR": "Classic PTR", + "RETAIL": "Retail", + "RETAILPTR": "Retail PTR" + }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", "DAYS_AGO": "{count} 天前", From b123085e8fbbc1131dfa41c64f3e3977a3016f17 Mon Sep 17 00:00:00 2001 From: Oleksandr <72464426+Medoke@users.noreply.github.com> Date: Mon, 16 Nov 2020 22:56:44 +0200 Subject: [PATCH 65/71] RU translations for client names, light themes --- wowup-electron/src/assets/i18n/ru.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index fef80fef..22a13686 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -9,11 +9,11 @@ }, "THEME": { "ALLIANCE": "Альянс", - "ALLIANCE_LIGHT": "Alliance Light", + "ALLIANCE_LIGHT": "Альянс (Светлая)", "DEFAULT": "По умолчанию", - "DEFAULT_LIGHT": "Default Light", + "DEFAULT_LIGHT": "По умолчанию (Светлая)", "HORDE": "Орда", - "HORDE_LIGHT": "Horde Light" + "HORDE_LIGHT": "Орда (Светлая)" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Установить обновление WowUp", @@ -47,11 +47,11 @@ "UPDATING": "Обновляется..." }, "CLIENT_TYPES": { - "BETA": "Beta RU", - "CLASSIC": "Classic RU", - "CLASSICPTR": "Classic PTR RU", - "RETAIL": "Retail RU", - "RETAILPTR": "Retail PTR RU" + "BETA": "Бета", + "CLASSIC": "Классический", + "CLASSICPTR": "Классический PTR", + "RETAIL": "Актуальный", + "RETAILPTR": "Актуальный PTR" }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", @@ -214,7 +214,7 @@ "UPDATE_ALL_BUTTON_TOOLTIP": "Обновить все модификации для этого клиента", "UPDATE_ALL_CONTEXT_MENU": { "UPDATE_ALL_CLIENTS_BUTTON": "Обновить все клиенты", - "UPDATE_RETAIL_CLASSIC_BUTTON": "Обновить Текущий/Классический" + "UPDATE_RETAIL_CLASSIC_BUTTON": "Обновить Актуальный/Классический" } }, "OPTIONS": { From f53e144f6c11885f3bd064d82f6196b2066b0dba Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 16 Nov 2020 14:59:26 -0600 Subject: [PATCH 66/71] translate the client options section titles --- .../wow-client-options/wow-client-options.component.html | 2 +- .../wow-client-options/wow-client-options.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html index b3f34df5..f236f4ab 100644 --- a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html +++ b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.html @@ -1,5 +1,5 @@ -
{{ clientTypeName }}
+
{{ clientTypeName | translate }}
{{ diff --git a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts index 7716031d..9d192c01 100644 --- a/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts +++ b/wowup-electron/src/app/components/wow-client-options/wow-client-options.component.ts @@ -58,7 +58,7 @@ export class WowClientOptionsComponent implements OnInit, OnDestroy { ngOnInit(): void { this.selectedAddonChannelType = this._wowupService.getDefaultAddonChannel(this.clientType); this.clientAutoUpdate = this._wowupService.getDefaultAutoUpdate(this.clientType); - this.clientTypeName = getEnumName(WowClientType, this.clientType); + this.clientTypeName = `COMMON.CLIENT_TYPES.${getEnumName(WowClientType, this.clientType).toUpperCase()}`; this.clientFolderName = this._warcraftService.getClientFolderName(this.clientType); this.clientLocation = this._warcraftService.getClientLocation(this.clientType); } From ed41eb01fa67ccea300493f1a0669014f9df0a4d Mon Sep 17 00:00:00 2001 From: SkollVargr <73319775+SkollVargr@users.noreply.github.com> Date: Mon, 16 Nov 2020 22:10:34 +0100 Subject: [PATCH 67/71] Update es.json Update for client type dropdowns and light themes + couple fixes. --- wowup-electron/src/assets/i18n/es.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index e67cab49..162421b9 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -9,11 +9,11 @@ }, "THEME": { "ALLIANCE": "Alianza", - "ALLIANCE_LIGHT": "Alliance Light", + "ALLIANCE_LIGHT": "Alianza Claro", "DEFAULT": "Predeterminado", - "DEFAULT_LIGHT": "Default Light", + "DEFAULT_LIGHT": "Predeterminado Claro", "HORDE": "Horda", - "HORDE_LIGHT": "Horde Light" + "HORDE_LIGHT": "Horda Claro" }, "WOWUP_UPDATE": { "DOWNLOADED_TOOLTIP": "Instalar actualización de WowUp", @@ -49,9 +49,9 @@ "CLIENT_TYPES": { "BETA": "Beta", "CLASSIC": "Classic", - "CLASSICPTR": "Classic PTR", + "CLASSICPTR": "PTR Classic", "RETAIL": "Retail", - "RETAILPTR": "Retail PTR" + "RETAILPTR": "PTR Retail" }, "DATES": { "DATETIME_SHORT": "{d, date, short} {d, time, short}", @@ -227,7 +227,7 @@ "MINIMIZE_ON_CLOSE_LABEL": "Minimizar al Cerrar", "SET_LANGUAGE_CONFIRMATION_DESCRIPTION": "Cambiar el idioma predeterminado requiere reiniciar la aplicación.", "SET_LANGUAGE_CONFIRMATION_LABEL": "Estableciendo un nuevo idioma predeterminado", - "SET_LANGUAGE_DESCRIPTION": "Seleccione el idioma al que cambiar", + "SET_LANGUAGE_DESCRIPTION": "Establece el idioma en el que se mostrará WowUp", "SET_LANGUAGE_LABEL": "Establecer Idioma", "START_MINIMIZED_DESCRIPTION": "WowUp se iniciará minimizado y no se mostrará en pantalla", "START_MINIMIZED_LABEL": "Iniciar WowUp minimizado", @@ -261,7 +261,7 @@ "WOW": { "AUTO_UPDATE_DESCRIPTION": "Los addons instalados después de activar esta opción se configurarán para actualizarse automáticamente de forma predeterminada", "AUTO_UPDATE_LABEL": "Actualización automática", - "CLIENT_TYPE_INPUT_HINT": "La carpeta que contiene el cliente de {clientTypeName} \"{clientFolderName}\"", + "CLIENT_TYPE_INPUT_HINT": "La carpeta que contiene la versión {clientTypeName} del cliente de World of Warcraft \"{clientFolderName}\"", "CLIENT_TYPE_PATH_LABEL": "Ruta de {clientTypeName}", "DEFAULT_ADDON_CHANNEL_LABEL": "Canal de Addons Predeterminado", "DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Canal de Addons", From 8c18a2c1fef09618dd1f190b89fbd4c5e7fdc1cd Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 16 Nov 2020 16:47:44 -0600 Subject: [PATCH 68/71] More light theme support --- .../addon-detail/addon-detail.component.html | 2 +- .../addon-detail/addon-detail.component.scss | 3 +- .../options-app-section.component.html | 4 +-- .../options-debug-section.component.html | 4 +-- .../options-debug-section.component.scss | 4 --- .../wow-client-options.component.html | 6 ++-- .../src/app/pages/about/about.component.html | 5 +++- .../src/app/pages/about/about.component.scss | 16 ++++++++++ .../src/app/pages/about/about.component.ts | 28 +++++++++++++++++- .../app/pages/options/options.component.ts | 15 +++++++++- .../src/assets/images/alliance-dark-1.png | Bin 0 -> 38081 bytes .../src/assets/images/horde-dark-1.png | Bin 0 -> 64330 bytes .../src/assets/images/wowup-dark-1.png | Bin 0 -> 20809 bytes wowup-electron/src/custom-theme.scss | 16 ++++++++++ 14 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 wowup-electron/src/assets/images/alliance-dark-1.png create mode 100644 wowup-electron/src/assets/images/horde-dark-1.png create mode 100644 wowup-electron/src/assets/images/wowup-dark-1.png diff --git a/wowup-electron/src/app/components/addon-detail/addon-detail.component.html b/wowup-electron/src/app/components/addon-detail/addon-detail.component.html index 1b7d61d4..377be421 100644 --- a/wowup-electron/src/app/components/addon-detail/addon-detail.component.html +++ b/wowup-electron/src/app/components/addon-detail/addon-detail.component.html @@ -10,7 +10,7 @@ >
-
+
Addon Picture
diff --git a/wowup-electron/src/app/components/addon-detail/addon-detail.component.scss b/wowup-electron/src/app/components/addon-detail/addon-detail.component.scss index d3100346..2d48f70c 100644 --- a/wowup-electron/src/app/components/addon-detail/addon-detail.component.scss +++ b/wowup-electron/src/app/components/addon-detail/addon-detail.component.scss @@ -1,8 +1,9 @@ @import "../../../variables.scss"; .image-row { - background-color: $dark-4; margin-bottom: 16px; + border-radius: 4px; + overflow: hidden; .image { max-width: 100%; diff --git a/wowup-electron/src/app/components/options-app-section/options-app-section.component.html b/wowup-electron/src/app/components/options-app-section/options-app-section.component.html index d8a21e19..0791291b 100644 --- a/wowup-electron/src/app/components/options-app-section/options-app-section.component.html +++ b/wowup-electron/src/app/components/options-app-section/options-app-section.component.html @@ -11,7 +11,7 @@
{{ "PAGES.OPTIONS.APPLICATION.SET_LANGUAGE_DESCRIPTION" | translate }}
- + {{ "PAGES.OPTIONS.APPLICATION.CURRENT_LANGUAGE_LABEL" | translate }} @@ -30,7 +30,7 @@ {{ "PAGES.OPTIONS.APPLICATION.THEME_DESCRIPTION" | translate }} - + {{ "PAGES.OPTIONS.APPLICATION.THEME_LABEL" | translate }} diff --git a/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html b/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html index 88bb7532..ab44b548 100644 --- a/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html +++ b/wowup-electron/src/app/components/options-debug-section/options-debug-section.component.html @@ -7,7 +7,7 @@
{{ "PAGES.OPTIONS.DEBUG.LOG_FILES_LABEL" | translate }}
- {{ "PAGES.OPTIONS.DEBUG.LOG_FILES_DESCRIPTION" | translate }} + {{ "PAGES.OPTIONS.DEBUG.LOG_FILES_DESCRIPTION" | translate }}