From 54d9f4cb71479b19996b520ed21cd13e9a1a9db3 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 6 Jul 2021 13:07:58 -0500 Subject: [PATCH 001/188] Update models.ts --- wowup-electron/src/common/wowup/models.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wowup-electron/src/common/wowup/models.ts b/wowup-electron/src/common/wowup/models.ts index ece98106..b195e8e7 100644 --- a/wowup-electron/src/common/wowup/models.ts +++ b/wowup-electron/src/common/wowup/models.ts @@ -39,7 +39,8 @@ export enum AddonWarningType { } export enum AddonCategory { - AllAddons, + Unknown, + AllAddons = 1, Achievements, ActionBars, AuctionEconomy, From 3910537e099a658d1bc5294b2449f0c7968d43ad Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 6 Jul 2021 13:15:58 -0500 Subject: [PATCH 002/188] Update Angular --- wowup-electron/package-lock.json | 311 ++++++++++++++++--------------- wowup-electron/package.json | 26 +-- 2 files changed, 169 insertions(+), 168 deletions(-) diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index 8b2e9454..7f0a288c 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "wowup", - "version": "2.4.0-beta.11", + "version": "2.4.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -56,18 +56,19 @@ } }, "@angular-devkit/build-angular": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.0.tgz", - "integrity": "sha512-zgZJLp9qwxJ9w31NHLIVg2kJZAZw4I/tuafP3CDpsLasFCepDG9+oDNEMeOoixnvUqyQE3KhAqxBkHZhcDXnFA==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.1.tgz", + "integrity": "sha512-mJjpPuJlS55gwi/W2g8CIMjPVtUjKCKJdjn34eeYk1Kgw9JYRIsiEivx1hcGyLmiSTF8gRGvW1TEyO+k55/QqA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.0", - "@angular-devkit/build-optimizer": "0.1201.0", - "@angular-devkit/build-webpack": "0.1201.0", - "@angular-devkit/core": "12.1.0", + "@angular-devkit/architect": "0.1201.1", + "@angular-devkit/build-optimizer": "0.1201.1", + "@angular-devkit/build-webpack": "0.1201.1", + "@angular-devkit/core": "12.1.1", "@babel/core": "7.14.6", "@babel/generator": "7.14.5", "@babel/helper-annotate-as-pure": "7.14.5", + "@babel/plugin-proposal-async-generator-functions": "7.14.7", "@babel/plugin-transform-async-to-generator": "7.14.5", "@babel/plugin-transform-runtime": "7.14.5", "@babel/preset-env": "7.14.7", @@ -75,7 +76,7 @@ "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.0", + "@ngtools/webpack": "12.1.1", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", @@ -97,7 +98,7 @@ "less-loader": "10.0.0", "license-webpack-plugin": "2.3.19", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.6.0", + "mini-css-extract-plugin": "1.6.2", "minimatch": "3.0.4", "open": "8.2.1", "ora": "5.4.1", @@ -124,7 +125,7 @@ "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.3.0", - "webpack": "5.40.0", + "webpack": "5.41.1", "webpack-dev-middleware": "5.0.0", "webpack-dev-server": "3.11.2", "webpack-merge": "5.8.0", @@ -132,19 +133,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1201.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.0.tgz", - "integrity": "sha512-tqIhGccWjI32xmLs0UIr2umET18Le+r5PxCf30ueOE5pv1q7XKD06EzGx9J05B1aUgDFb3LP/ArlKel5JnD+3g==", + "version": "0.1201.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.1.tgz", + "integrity": "sha512-n7ycxrIPbtnV7q8PH5Uvs8Jd++u6hWUiB+8EUxznSfdHGA+fE7TTnJTkc27LoMlYZAImc/Axp/uyYZ6Awt72ZQ==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.0", + "@angular-devkit/core": "12.1.1", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.0.tgz", - "integrity": "sha512-y6q/hn9/j6LwNgDzTBXe5pTXouU7nuc3KZFq3JwfTdo4yTIxN1Rdv9+zfzDkzEcYtyFoqLqqskQFme/DqdbEZw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", + "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", "dev": true, "requires": { "ajv": "8.6.0", @@ -520,9 +521,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.1201.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.0.tgz", - "integrity": "sha512-FbvJfvT2fM1MNCqImfXtBjeIv6l5tDCBrXsSydyIG+2Fdp6NGlZQdMWYjfc0wGUDdCv1YjIGOL2BQ5hx6Q5HRA==", + "version": "0.1201.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.1.tgz", + "integrity": "sha512-SdAffCpjRNFKwnEq8xdPdCWPgdrfY8rlmTZXGY7e1whR4vnyZi+afk1BAsmbNyWlHYVv0Zcnh+Q1VH3OBDLwhw==", "dev": true, "requires": { "source-map": "0.7.3", @@ -551,29 +552,29 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1201.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.0.tgz", - "integrity": "sha512-l733LS0kV2AZwzYRGH6c93sjVfGz3Jw4g448c7qdXIMf1pSYuba8D2hsj6VqNcOZkXmZwtEB1soeahwwPjWRag==", + "version": "0.1201.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.1.tgz", + "integrity": "sha512-isgj6bSFr16tuXEoX0VypvsQmg3uDOdvYDQZvkwzUrIyvQo5TeoOy/MLgrb9v+tXjEA7oZrzuigE4Hjzn466bQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.0", + "@angular-devkit/architect": "0.1201.1", "rxjs": "6.6.7" }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1201.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.0.tgz", - "integrity": "sha512-tqIhGccWjI32xmLs0UIr2umET18Le+r5PxCf30ueOE5pv1q7XKD06EzGx9J05B1aUgDFb3LP/ArlKel5JnD+3g==", + "version": "0.1201.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.1.tgz", + "integrity": "sha512-n7ycxrIPbtnV7q8PH5Uvs8Jd++u6hWUiB+8EUxznSfdHGA+fE7TTnJTkc27LoMlYZAImc/Axp/uyYZ6Awt72ZQ==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.0", + "@angular-devkit/core": "12.1.1", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.0.tgz", - "integrity": "sha512-y6q/hn9/j6LwNgDzTBXe5pTXouU7nuc3KZFq3JwfTdo4yTIxN1Rdv9+zfzDkzEcYtyFoqLqqskQFme/DqdbEZw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", + "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", "dev": true, "requires": { "ajv": "8.6.0", @@ -660,20 +661,20 @@ } }, "@angular-devkit/schematics": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.0.tgz", - "integrity": "sha512-KlE1fnvqWItt9dYCaQ89b9WoqFvOK64kemCLGGx49CllQ3con1lwXW2iauzT/29UoK1rSzvTVMvTJcDQOJ7isQ==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.1.1.tgz", + "integrity": "sha512-oRsvlhJQLXkGWdJvArOby+G4j8UX2uCHwrN4EC1hXUKs84UsD+UATYOAh4h2auy+I+sdrmELUaHwdI4wdKpqnw==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.0", + "@angular-devkit/core": "12.1.1", "ora": "5.4.1", "rxjs": "6.6.7" }, "dependencies": { "@angular-devkit/core": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.0.tgz", - "integrity": "sha512-y6q/hn9/j6LwNgDzTBXe5pTXouU7nuc3KZFq3JwfTdo4yTIxN1Rdv9+zfzDkzEcYtyFoqLqqskQFme/DqdbEZw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", + "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", "dev": true, "requires": { "ajv": "8.6.0", @@ -796,32 +797,32 @@ } }, "@angular/animations": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.0.tgz", - "integrity": "sha512-I81M9nptMWHgbBUfJKyjQghNplV/aLvjxKEo3nTqf33/9G+nqMU2S2mAG8X8q/R/199R7DtJOmjqdmGkDgT8BQ==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.1.1.tgz", + "integrity": "sha512-79TfDx1AAxrVNM56oY+OwRpku9eCF6w3ko2DWDeQpgCvqM6/a53B5rPhz6yuwgadIqUdQH0T4CeE/v5hXYdOMA==", "requires": { "tslib": "^2.2.0" } }, "@angular/cdk": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.1.0.tgz", - "integrity": "sha512-AkkhEveUDwblJyTd1NvuP7eH7Pwj14hyMmMnzfKBcaImvsSXK/z0T58wzp5vVYUtAQc05MuojwfsJQCev5QwNg==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.1.1.tgz", + "integrity": "sha512-MJENa8qmfLAr6t59u1+mEC2YPbCn4n3vsY6k8fKyf+ILXwwGHWNZlYblaRMBjrF/crSx1Kd5vb30RCqIcNTGsA==", "requires": { "parse5": "^5.0.0", "tslib": "^2.2.0" } }, "@angular/cli": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.0.tgz", - "integrity": "sha512-3xvweF9oiR1X9KlXIFPGQtylctqPi9t7SjI/8M2z/qRP4GkMu2CiScNysWFMdJsNsrRvLGQdtAbJFBWfW1vmkA==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.1.1.tgz", + "integrity": "sha512-rQZItn3kpYEX6tH7wquAEhJuxVpW6sYKO2tSi8Suxrm+iz1RPRnfhSwS1WIEumnwpFRtH/8P+lOrScax1ldYkg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.0", - "@angular-devkit/core": "12.1.0", - "@angular-devkit/schematics": "12.1.0", - "@schematics/angular": "12.1.0", + "@angular-devkit/architect": "0.1201.1", + "@angular-devkit/core": "12.1.1", + "@angular-devkit/schematics": "12.1.1", + "@schematics/angular": "12.1.1", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.1", @@ -840,19 +841,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1201.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.0.tgz", - "integrity": "sha512-tqIhGccWjI32xmLs0UIr2umET18Le+r5PxCf30ueOE5pv1q7XKD06EzGx9J05B1aUgDFb3LP/ArlKel5JnD+3g==", + "version": "0.1201.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.1.tgz", + "integrity": "sha512-n7ycxrIPbtnV7q8PH5Uvs8Jd++u6hWUiB+8EUxznSfdHGA+fE7TTnJTkc27LoMlYZAImc/Axp/uyYZ6Awt72ZQ==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.0", + "@angular-devkit/core": "12.1.1", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.0.tgz", - "integrity": "sha512-y6q/hn9/j6LwNgDzTBXe5pTXouU7nuc3KZFq3JwfTdo4yTIxN1Rdv9+zfzDkzEcYtyFoqLqqskQFme/DqdbEZw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", + "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", "dev": true, "requires": { "ajv": "8.6.0", @@ -905,25 +906,25 @@ } }, "@angular/common": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.0.tgz", - "integrity": "sha512-DsnH0rIuhEFhRdQkhr4Bb7YiNTCG0+PbmpA1SCzU3jqeSV1Zr0Q9ZoDf/Ab8+x3vGmdTJhcnncoxrKdzfRHQKQ==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.1.1.tgz", + "integrity": "sha512-NnRwGMatzjthvDQ4+8tm09Ak5i27Qga8x4BdzINN1RjLmzQ0zW00Mn2AUGYEDZHt9HXVHff5stsZGqj+Ne4QJw==", "requires": { "tslib": "^2.2.0" } }, "@angular/compiler": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.0.tgz", - "integrity": "sha512-Nk9l8fWv0XrEZGpN8EftAzTC6Q2oTnDqnYQ9Ykc3rkRQs4r8MDG9cUd4z5gbEToFgX7KVQ3+wLAYVX+uB6A5hg==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.1.1.tgz", + "integrity": "sha512-QV56c+A18vdY8AB/SoWq0UkHhJxYDWY+VUY75RM2dxcsXoNeO5FTCjBRkA7yMiX6Q6cahH2ivC7tmqVU2mYHuA==", "requires": { "tslib": "^2.2.0" } }, "@angular/compiler-cli": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.0.tgz", - "integrity": "sha512-6MV6h5hlZfjVNrB8il2sCF7wa0qWKutfK2Za8DFHVCqNND1j75iXrrHNxbu30jZC0HXOSrQQuUThifT/YUU3MQ==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.1.1.tgz", + "integrity": "sha512-3PEi7dol8sU0TVEjnBubJXgwDALBk85XlIhmZ9lZa7okUM8Su6dQ9uFi+PXCosn/SlbpUnOizs8wBRqScCX5ug==", "requires": { "@babel/core": "^7.8.6", "@babel/types": "^7.8.6", @@ -1009,49 +1010,49 @@ } }, "@angular/core": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.0.tgz", - "integrity": "sha512-awrCla6j4U0CU86q8nwR49GiULo3XhMcgooPgRBMjN1aHTDXKacSC9hk2nXkipC9VjuhybUVswuW4/et6d4RZQ==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.1.1.tgz", + "integrity": "sha512-7Q4na8zCXi4ITBG8kgbS+vnnVK0GDU2WXU80/il096+8YPFKfj6MyDWZH79KA3jrIg9/yhLwSQx8x8wnj8dqBA==", "requires": { "tslib": "^2.2.0" } }, "@angular/forms": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.0.tgz", - "integrity": "sha512-iWJGvtd7GEisx+pqKDsFq3yu2bsP/Kj+vCSSIJStWNrSUBRr/J0WY9lXp+SR3mU4oMyVw1iGhdHFe3HCzfa7lw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.1.1.tgz", + "integrity": "sha512-up5P9jdqsPjrX3YgNMSIkTCwRzVNJbAlDiKrnww7pt5RL2fZGq+x/ddvtTSjdne9oknRKitADFkjuPozPH+LOg==", "requires": { "tslib": "^2.2.0" } }, "@angular/material": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.1.0.tgz", - "integrity": "sha512-YxR09gfqfGmJysySlUWqcGYPWBVNTu2Cb48z1nxTFz13A4idw3qZa1NdHKPxi0f53x1koEd9DxKnx8M1XwvmSg==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.1.1.tgz", + "integrity": "sha512-q2vhbVQfjr+88beqCotCVlaPRyy9y2O2asiR3+0BU9OJ1DjTo1QpBmMpck5InP7Es49t9RTk9RzzC0t18p45yA==", "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.0.tgz", - "integrity": "sha512-YOUfafuvovy7rfrrUxWRvVbsgauH34UHsPfAfeugO2dWbI39UNkyY1PxXGaoa1WvA7Gb+arm6FeKjjy3vJmIBw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.1.1.tgz", + "integrity": "sha512-R78K0DYxplYUvctq/7MvoBjuMDgMNrL1h8Bov0g7lN5hQWBQwBjl//CiJgx8H7uSiba9DQ0Jwu5Xxvkzkr8ggA==", "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser-dynamic": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.0.tgz", - "integrity": "sha512-7nlLvlXTHjYmFJKYZP6RtmASWF9bAwF4trdtH187h3ODSAHHtRQex+elfOzZhjNSTipXxS+g8RzOK8Lr3+H4gg==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.1.tgz", + "integrity": "sha512-x8bIQzRvrdA/LfnIp5/Fo15BqD7g5j+XQe/KyWM+jBnpKr9queet0xvSAWD+KGkdrebI1xIgNtNNTxPCxREbiQ==", "requires": { "tslib": "^2.2.0" } }, "@angular/router": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.0.tgz", - "integrity": "sha512-m9Dk8HPv4nhnezrZSlQrByHE/Vr3dIIq3YzgKJOAoQxy4NkM4TlOAl1Q28hUsMmEiLbfpzVyKps636kT8LStkA==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.1.1.tgz", + "integrity": "sha512-rv4I9uVQq7gunEGzGFkJDlu4fetOCSAGKPr83Q0Ekx+MuMr6zK0VbRgymMW/5LUaDl5Pobi+XeC3Y5tfjCI3Lg==", "requires": { "tslib": "^2.2.0" } @@ -4252,9 +4253,9 @@ } }, "@ngtools/webpack": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.0.tgz", - "integrity": "sha512-b35mXdPYVuLwHNZ4r29Zt/SIOI9eFc8GbF1MzirdzM2X4k/wWD1kFIAVseDeA12jb04Jj7UnU6eZo0dDe24WFw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.1.tgz", + "integrity": "sha512-NOHTBEjUkawQSU6sHA7EJSi5Ixw+oVmlYi17HXAhGRY1czasLQMiKQPnigbSgMLBR9Jhez7TttqAUtx6Pey2FQ==", "dev": true, "requires": { "enhanced-resolve": "5.8.2" @@ -4477,20 +4478,20 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@schematics/angular": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.0.tgz", - "integrity": "sha512-BUCBiW+DQsOofSs4TE26M2OhlS0g9Mdyd0xWF4FD2Ab3xwQgkV1gogZgCl9dZtNfiimYebdM9LOeHqYWmvqCdw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.1.1.tgz", + "integrity": "sha512-ukSKoAWfXt28TiHlRrEzKFW63V3jroRF3xnBKtsaL3AZ4MVJiHzOWXkzDAZBaEOLUH/l6Xhm64NMgOqMEAg1rQ==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.0", - "@angular-devkit/schematics": "12.1.0", + "@angular-devkit/core": "12.1.1", + "@angular-devkit/schematics": "12.1.1", "jsonc-parser": "3.0.0" }, "dependencies": { "@angular-devkit/core": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.0.tgz", - "integrity": "sha512-y6q/hn9/j6LwNgDzTBXe5pTXouU7nuc3KZFq3JwfTdo4yTIxN1Rdv9+zfzDkzEcYtyFoqLqqskQFme/DqdbEZw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", + "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", "dev": true, "requires": { "ajv": "8.6.0", @@ -4656,9 +4657,9 @@ } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", + "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", "dev": true }, "@types/fs-extra": { @@ -4887,9 +4888,9 @@ "optional": true }, "@types/webpack-sources": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", - "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", + "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", "dev": true, "requires": { "@types/node": "*", @@ -7191,9 +7192,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colord": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", - "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", + "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==", "dev": true }, "colorette": { @@ -7753,12 +7754,12 @@ } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -7771,9 +7772,9 @@ "integrity": "sha512-JqveUc4igkqwStL2RTRn/EPFGBOfEZHxJl/8ej1mXJR75V3go2mFF4bmUYkEIT1rveHKnkUlcJX/c+f1TyIovQ==" }, "core-js-compat": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.1.tgz", - "integrity": "sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -8147,12 +8148,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -8175,12 +8176,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -14170,9 +14171,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -14181,12 +14182,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -14679,9 +14680,9 @@ "dev": true }, "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.7.0.tgz", + "integrity": "sha512-b4f4JgOl7GZVM1p+xuWBAsHwflng1s2yOu9lOThKAzULRW7eqSFYfN4gbuUFOMuE0hVAPWJnSz/90LMOlEGErw==", "dev": true, "optional": true, "requires": { @@ -17539,12 +17540,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -19357,12 +19358,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -19699,12 +19700,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -20804,13 +20805,13 @@ } }, "webpack": { - "version": "5.40.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.40.0.tgz", - "integrity": "sha512-c7f5e/WWrxXWUzQqTBg54vBs5RgcAgpvKE4F4VegVgfo4x660ZxYUF2/hpMkZUnLjgytVTitjeXaN4IPlXCGIw==", + "version": "5.41.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz", + "integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", + "@types/estree": "^0.0.48", "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", @@ -20835,12 +20836,12 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -20887,12 +20888,12 @@ } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } diff --git a/wowup-electron/package.json b/wowup-electron/package.json index a749ab2d..6631080a 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -50,13 +50,13 @@ }, "devDependencies": { "@angular-builders/custom-webpack": "12.1.0", - "@angular-devkit/build-angular": "12.1.0", + "@angular-devkit/build-angular": "12.1.1", "@angular-eslint/builder": "12.1.0", "@angular-eslint/eslint-plugin": "12.1.0", "@angular-eslint/eslint-plugin-template": "12.1.0", "@angular-eslint/schematics": "12.2.0", "@angular-eslint/template-parser": "12.1.0", - "@angular/cli": "12.1.0", + "@angular/cli": "12.1.1", "@ngx-translate/core": "13.0.0", "@ngx-translate/http-loader": "6.0.0", "@types/globrex": "0.1.0", @@ -110,17 +110,17 @@ "node": ">=14.0.0" }, "dependencies": { - "@angular/animations": "~12.1.0", - "@angular/cdk": "12.1.0", - "@angular/common": "12.1.0", - "@angular/compiler": "12.1.0", - "@angular/compiler-cli": "12.1.0", - "@angular/core": "12.1.0", - "@angular/forms": "12.1.0", - "@angular/material": "12.1.0", - "@angular/platform-browser": "12.1.0", - "@angular/platform-browser-dynamic": "12.1.0", - "@angular/router": "12.1.0", + "@angular/animations": "~12.1.1", + "@angular/cdk": "12.1.1", + "@angular/common": "12.1.1", + "@angular/compiler": "12.1.1", + "@angular/compiler-cli": "12.1.1", + "@angular/core": "12.1.1", + "@angular/forms": "12.1.1", + "@angular/material": "12.1.1", + "@angular/platform-browser": "12.1.1", + "@angular/platform-browser-dynamic": "12.1.1", + "@angular/router": "12.1.1", "@bbob/core": "2.7.0", "@bbob/html": "2.7.0", "@bbob/preset-html5": "2.7.0", From 4ad019e587e9b9b381687ca365807aa6e635ae92 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 6 Jul 2021 13:19:16 -0500 Subject: [PATCH 003/188] Update Electron --- wowup-electron/package-lock.json | 12 ++++++------ wowup-electron/package.json | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index 7f0a288c..b3861c38 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -8990,9 +8990,9 @@ } }, "electron": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.4.tgz", - "integrity": "sha512-4qhRZbRvGqHmMWsCG/kRVF4X8VIq9Nujgm+gXZLBSpiR6uUtMHy7ViBTQZl1PGf6O9Ppxhpr9Yz+k6Um9WoP3Q==", + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.6.tgz", + "integrity": "sha512-XiB55/JTaQpDFQrD9pulYnOGwaWeMyRIub5ispvoE2bWBvM5zVMLptwMLb0m3KTMrfSkzhedZvOu7fwYvR7L7Q==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -13798,9 +13798,9 @@ } }, "markdown-it": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.6.tgz", - "integrity": "sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.1.0.tgz", + "integrity": "sha512-7temG6IFOOxfU0SgzhqR+vr2diuMhyO5uUIEZ3C5NbXhqC9uFUHoU41USYuDFoZRsaY7BEIEei874Z20VMLF6A==", "requires": { "argparse": "^2.0.1", "entities": "~2.1.0", diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 6631080a..50219863 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -77,7 +77,7 @@ "conventional-changelog-cli": "2.1.1", "cross-env": "7.0.3", "dotenv": "10.0.0", - "electron": "13.1.4", + "electron": "13.1.6", "electron-builder": "22.11.7", "electron-notarize": "1.0.0", "electron-reload": "1.5.0", @@ -142,7 +142,7 @@ "globrex": "0.1.2", "handlebars": "4.7.7", "lodash": "4.17.21", - "markdown-it": "12.0.6", + "markdown-it": "12.1.0", "messageformat": "2.3.0", "minimist": "1.2.5", "ngx-lightbox": "2.4.1", From 036127a81c947ce4277f047c956361ebda521678 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 09:20:57 -0500 Subject: [PATCH 004/188] Fix an issue with some addons being ignored from the TukUI scan process. --- .../addon-providers/tukui-addon-provider.ts | 100 +++++++++--------- 1 file changed, 49 insertions(+), 51 deletions(-) diff --git a/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts b/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts index 2c5b878b..4785aa45 100644 --- a/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts @@ -61,45 +61,6 @@ export class TukUiAddonProvider extends AddonProvider { return searchResults; } - private mapAddonCategory(category: AddonCategory): string[] { - switch (category) { - case AddonCategory.Achievements: - return ["Achievements"]; - case AddonCategory.ActionBars: - return ["Action Bars"]; - case AddonCategory.BagsInventory: - return ["Bags & Inventory"]; - case AddonCategory.BuffsDebuffs: - return ["Buffs & Debuffs"]; - case AddonCategory.Bundles: - return ["Edited UIs & Compilations", "Full UI Replacements"]; - case AddonCategory.ChatCommunication: - return ["Chat & Communication"]; - case AddonCategory.Class: - return ["Class"]; - case AddonCategory.Combat: - return ["Combat"]; - case AddonCategory.Guild: - return ["Guild"]; - case AddonCategory.MapMinimap: - return ["Map & Minimap"]; - case AddonCategory.Miscellaneous: - return ["Miscellaneous"]; - case AddonCategory.Plugins: - return ["Plugins: ElvUI", "Plugins: Tukui", "Plugins: Other", "Skins"]; - case AddonCategory.Professions: - return ["Professions"]; - case AddonCategory.Roleplay: - return ["Roleplay"]; - case AddonCategory.Tooltips: - return ["Tooltips"]; - case AddonCategory.UnitFrames: - return ["Unit Frames"]; - default: - throw new Error("Unhandled addon category"); - } - } - public async getDescription(installation: WowInstallation, externalId: string): Promise { const addons = await this.getAllAddons(installation.clientType); const addonMatch = _.find(addons, (addon) => addon.id.toString() === externalId.toString()); @@ -175,9 +136,9 @@ export class TukUiAddonProvider extends AddonProvider { const matches: TukUiAddon[] = []; // Sort folders to prioritize ones with a toc id - const tukProjectAddonFolders = addonFolders.filter((folder) => + const tukProjectAddonFolders = _.sortBy(addonFolders, (folder) => folder.tocs.some((toc) => !!toc.tukUiProjectId && toc.loadOnDemand !== "1") - ); + ).reverse(); for (const addonFolder of tukProjectAddonFolders) { const targetToc = this._tocService.getTocForGameType2(addonFolder.tocs, installation.clientType); @@ -299,16 +260,14 @@ export class TukUiAddonProvider extends AddonProvider { const canonAddonName = addonName.toLowerCase(); const addons = await this.getAllAddons(clientType); - let matches = _.orderBy( - addons - .map((addon) => { - const similarity = stringSimilarity.compareTwoStrings(canonAddonName, addon.name.toLowerCase()); - return { addon, similarity }; - }) - .filter((result) => result.similarity > 0.7), - (match) => match.similarity, - "desc" - ).map((result) => result.addon); + const similarity = addons + .map((addon) => { + const similarity = stringSimilarity.compareTwoStrings(canonAddonName, addon.name.toLowerCase()); + return { addon, similarity }; + }) + .filter((result) => result.similarity > 0.7); + + let matches = _.orderBy(similarity, (match) => match.similarity, "desc").map((result) => result.addon); // If we didnt get any similarity matches if (allowContain && matches.length === 0) { @@ -447,4 +406,43 @@ export class TukUiAddonProvider extends AddonProvider { return ""; } } + + private mapAddonCategory(category: AddonCategory): string[] { + switch (category) { + case AddonCategory.Achievements: + return ["Achievements"]; + case AddonCategory.ActionBars: + return ["Action Bars"]; + case AddonCategory.BagsInventory: + return ["Bags & Inventory"]; + case AddonCategory.BuffsDebuffs: + return ["Buffs & Debuffs"]; + case AddonCategory.Bundles: + return ["Edited UIs & Compilations", "Full UI Replacements"]; + case AddonCategory.ChatCommunication: + return ["Chat & Communication"]; + case AddonCategory.Class: + return ["Class"]; + case AddonCategory.Combat: + return ["Combat"]; + case AddonCategory.Guild: + return ["Guild"]; + case AddonCategory.MapMinimap: + return ["Map & Minimap"]; + case AddonCategory.Miscellaneous: + return ["Miscellaneous"]; + case AddonCategory.Plugins: + return ["Plugins: ElvUI", "Plugins: Tukui", "Plugins: Other", "Skins"]; + case AddonCategory.Professions: + return ["Professions"]; + case AddonCategory.Roleplay: + return ["Roleplay"]; + case AddonCategory.Tooltips: + return ["Tooltips"]; + case AddonCategory.UnitFrames: + return ["Unit Frames"]; + default: + throw new Error("Unhandled addon category"); + } + } } From 883da8aefaee895eb946d4b30bd0d29a9264a3b7 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 09:22:30 -0500 Subject: [PATCH 005/188] Add support for Hub categories --- .../addon-providers/wowup-addon-provider.ts | 23 ++++++++++++++++++- .../pages/get-addons/get-addons.component.ts | 4 ++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts index 5956eed3..2b579348 100644 --- a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts @@ -6,7 +6,7 @@ import { v4 as uuidv4 } from "uuid"; import { ADDON_PROVIDER_HUB, IPC_WOWUP_GET_SCAN_RESULTS } from "../../common/constants"; import { Addon } from "../../common/entities/addon"; import { WowClientType } from "../../common/warcraft/wow-client-type"; -import { AddonChannelType, WowUpScanResult } from "../../common/wowup/models"; +import { AddonCategory, AddonChannelType, WowUpScanResult } from "../../common/wowup/models"; import { AppConfig } from "../../environments/environment"; import { SourceRemovedAddonError } from "../errors"; import { WowUpAddonReleaseRepresentation, WowUpAddonRepresentation } from "../models/wowup-api/addon-representations"; @@ -14,6 +14,7 @@ import { GetFeaturedAddonsResponse, WowUpGetAddonReleaseResponse, WowUpGetAddonResponse, + WowUpGetAddonsResponse, WowUpSearchAddonsResponse, } from "../models/wowup-api/api-responses"; import { GetAddonsByFingerprintResponse } from "../models/wowup-api/get-addons-by-fingerprint.response"; @@ -232,6 +233,17 @@ export class WowUpAddonProvider extends AddonProvider { ); } + public async getCategory(category: AddonCategory, installation: WowInstallation): Promise { + const gameType = this.getWowGameType(installation.clientType); + const response = await this.getAddonsByCategory(gameType, category); + + const searchResults = _.map(response?.addons, (addon) => this.getSearchResult(addon, gameType)).filter( + (sr) => sr !== undefined + ); + + return searchResults; + } + public async scan( installation: WowInstallation, addonChannelType: AddonChannelType, @@ -303,6 +315,15 @@ export class WowUpAddonProvider extends AddonProvider { return scanResults; }; + private async getAddonsByCategory(gameType: WowGameType, category: AddonCategory) { + const url = new URL(`${API_URL}/addons/category/${category}/${gameType}`); + return await this._cachingService.transaction( + url.toString(), + () => this._circuitBreaker.getJson(url), + CHANGELOG_CACHE_TTL_SEC + ); + } + private async getAddonById(addonId: number | string) { const url = new URL(`${API_URL}/addons/${addonId}`); return await this._cachingService.transaction( 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 e945854c..ed9c360d 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 @@ -243,7 +243,7 @@ export class GetAddonsComponent implements OnInit, OnDestroy { } private buildCategories() { - const categoryKeys = getEnumKeys(AddonCategory); + const categoryKeys = getEnumKeys(AddonCategory).filter((key) => key.toLowerCase() !== "unknown"); const categoryItems: CategoryItem[] = categoryKeys.map((key) => { return { category: AddonCategory[key], @@ -270,7 +270,7 @@ export class GetAddonsComponent implements OnInit, OnDestroy { this._lastSelectionState = []; this.gridApi?.deselectAll(); } - + public onRowClicked(event: RowClickedEvent): void { const selectedNodes = event.api.getSelectedNodes(); From 507398a078ba0dc6935c2e46ec47f84aa6ccda02 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 10:29:30 -0500 Subject: [PATCH 006/188] Initial support for Hub previews --- .../addon-providers/wowup-addon-provider.ts | 21 +++++++++++++++++-- .../models/wowup-api/addon-representations.ts | 10 +++++---- .../app/models/wowup/addon-search-result.ts | 1 - .../src/app/services/addons/addon.service.ts | 1 + 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts index 2b579348..823e128d 100644 --- a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts @@ -428,13 +428,23 @@ export class WowUpAddonProvider extends AddonProvider { downloadCount: representation.total_download_count, files: searchResultFiles, releasedAt: new Date(), - screenshotUrl: "", - screenshotUrls: [], summary: representation.description, fundingLinks: [...(representation?.funding_links ?? [])], + screenshotUrls: this.getScreenshotUrls(clientReleases), }; } + // Currently we only support images, so we filter for those + private getScreenshotUrls(releases: WowUpAddonReleaseRepresentation[]): string[] { + const urls = _.flatten( + releases.map((release) => + release.previews?.filter((preview) => preview.preview_type === "image").map((preview) => preview.url) + ) + ).filter((url) => !!url); + + return _.uniq(urls); + } + private getAddon( installation: WowInstallation, addonChannelType: AddonChannelType, @@ -469,6 +479,12 @@ export class WowUpAddonProvider extends AddonProvider { throw new Error("Invalid matching version data"); } + const screenshotUrls = this.getScreenshotUrls([matchedRelease]); + console.log("matchedRelease", matchedRelease); + if (screenshotUrls.length) { + console.debug(screenshotUrls); + } + return { id: uuidv4(), author: authors, @@ -497,6 +513,7 @@ export class WowUpAddonProvider extends AddonProvider { latestChangelog: scanResult.exactMatch?.matched_release?.body, externalLatestReleaseId: scanResult?.exactMatch?.matched_release?.id?.toString(), installationId: installation.id, + screenshotUrls, }; } diff --git a/wowup-electron/src/app/models/wowup-api/addon-representations.ts b/wowup-electron/src/app/models/wowup-api/addon-representations.ts index 9614e300..6b8ca2ae 100644 --- a/wowup-electron/src/app/models/wowup-api/addon-representations.ts +++ b/wowup-electron/src/app/models/wowup-api/addon-representations.ts @@ -19,14 +19,11 @@ export interface WowUpAddonReleaseRepresentation { external_id: string; prerelease: boolean; body: string; - // game_version: string; game_versions: AddonReleaseGameVersion[]; download_url: string; published_at: Date; addonFolders?: WowUpAddonReleaseFolderRepresentation[]; - // game_type: WowGameType; - // toc_title?: string; - // toc_version?: string; + previews?: AddonPreviewRepresentation[]; } export interface AddonReleaseGameVersion { @@ -37,6 +34,11 @@ export interface AddonReleaseGameVersion { authors: string; } +export interface AddonPreviewRepresentation { + url: string; + preview_type: string; +} + export interface WowUpAddonRepresentation { id: number; repository: string; diff --git a/wowup-electron/src/app/models/wowup/addon-search-result.ts b/wowup-electron/src/app/models/wowup/addon-search-result.ts index d70c2d27..689ef001 100644 --- a/wowup-electron/src/app/models/wowup/addon-search-result.ts +++ b/wowup-electron/src/app/models/wowup/addon-search-result.ts @@ -9,7 +9,6 @@ export interface AddonSearchResult { files?: AddonSearchResultFile[]; name: string; providerName: string; - screenshotUrl?: string; screenshotUrls?: string[]; summary?: string; thumbnailUrl: string; diff --git a/wowup-electron/src/app/services/addons/addon.service.ts b/wowup-electron/src/app/services/addons/addon.service.ts index 16170525..e4464245 100644 --- a/wowup-electron/src/app/services/addons/addon.service.ts +++ b/wowup-electron/src/app/services/addons/addon.service.ts @@ -1258,6 +1258,7 @@ export class AddonService { addon.thumbnailUrl = result.thumbnailUrl; addon.latestChangelog = latestFile?.changelog || addon.latestChangelog; addon.warningType = undefined; + addon.screenshotUrls = result.screenshotUrls; // Check for a new download URL if (latestFile?.downloadUrl && latestFile.downloadUrl !== addon.downloadUrl) { From cd93f2ac7030e92b2d3c72085ec0d72079f24f12 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 10:33:08 -0500 Subject: [PATCH 007/188] Images tab renamed Previews --- .../src/app/addon-providers/wowup-addon-provider.ts | 4 ---- wowup-electron/src/assets/i18n/cs.json | 2 +- wowup-electron/src/assets/i18n/de.json | 2 +- wowup-electron/src/assets/i18n/en.json | 2 +- wowup-electron/src/assets/i18n/es.json | 2 +- wowup-electron/src/assets/i18n/fr.json | 2 +- wowup-electron/src/assets/i18n/it.json | 2 +- wowup-electron/src/assets/i18n/ko.json | 2 +- wowup-electron/src/assets/i18n/nb.json | 2 +- wowup-electron/src/assets/i18n/pt.json | 2 +- wowup-electron/src/assets/i18n/ru.json | 2 +- wowup-electron/src/assets/i18n/zh-TW.json | 2 +- wowup-electron/src/assets/i18n/zh.json | 2 +- 13 files changed, 12 insertions(+), 16 deletions(-) diff --git a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts index 823e128d..7b8079c6 100644 --- a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts @@ -480,10 +480,6 @@ export class WowUpAddonProvider extends AddonProvider { } const screenshotUrls = this.getScreenshotUrls([matchedRelease]); - console.log("matchedRelease", matchedRelease); - if (screenshotUrls.length) { - console.debug(screenshotUrls); - } return { id: uuidv4(), diff --git a/wowup-electron/src/assets/i18n/cs.json b/wowup-electron/src/assets/i18n/cs.json index b35685ee..caf12d65 100644 --- a/wowup-electron/src/assets/i18n/cs.json +++ b/wowup-electron/src/assets/i18n/cs.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "No description found", "DESCRIPTION_TAB": "Popis", "FUNDING_LINK_TITLE": "Podpořte autora", - "IMAGES_TAB": "Images", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Chybějící závislosti", "NO_CHANGELOG_TEXT": "No changelog available", "VIEW_IN_BROWSER_BUTTON": "Zobrazit v prohlížeči", diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index 04acaecb..bce60ef7 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "Keine Beschreibung gefunden", "DESCRIPTION_TAB": "Beschreibung", "FUNDING_LINK_TITLE": "Unterstütze diesen Autor", - "IMAGES_TAB": "Bilder", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Fehlende Abhängigkeiten", "NO_CHANGELOG_TEXT": "Kein Änderungsverlauf verfügbar", "VIEW_IN_BROWSER_BUTTON": "Im Browser anzeigen", diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 8fcaed63..b85ecd6e 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "No description found", "DESCRIPTION_TAB": "Description", "FUNDING_LINK_TITLE": "Support this author", - "IMAGES_TAB": "Images", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Missing dependencies", "NO_CHANGELOG_TEXT": "No changelog available", "VIEW_IN_BROWSER_BUTTON": "View in browser", diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index f6d24817..780cce75 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "Descripción no encontrada", "DESCRIPTION_TAB": "Descripción", "FUNDING_LINK_TITLE": "Apoyar a este autor", - "IMAGES_TAB": "Imágenes", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Dependencias no encontradas", "NO_CHANGELOG_TEXT": "No hay listado de cambios disponible", "VIEW_IN_BROWSER_BUTTON": "Ver en el navegador", diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index 79ef5a0c..e7a2ffc5 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "No description found", "DESCRIPTION_TAB": "Description", "FUNDING_LINK_TITLE": "Supporter cet auteur", - "IMAGES_TAB": "Images", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Dépendances manquantes", "NO_CHANGELOG_TEXT": "No changelog available", "VIEW_IN_BROWSER_BUTTON": "Voir dans le navigateur", diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json index d709388f..ff9f7a99 100644 --- a/wowup-electron/src/assets/i18n/it.json +++ b/wowup-electron/src/assets/i18n/it.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "Nessuna descrizione trovata", "DESCRIPTION_TAB": "Descrizione", "FUNDING_LINK_TITLE": "Supporta questo autore", - "IMAGES_TAB": "Immagini", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Dipendenze mancanti", "NO_CHANGELOG_TEXT": "Nessun changelog disponibile", "VIEW_IN_BROWSER_BUTTON": "Visualizza nel browser", diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index 0e7d293a..1f6516d8 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "No description found", "DESCRIPTION_TAB": "설명", "FUNDING_LINK_TITLE": "제작자 지원하기", - "IMAGES_TAB": "Images", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Missing dependencies", "NO_CHANGELOG_TEXT": "불러올 변경 내역이 없습니다.", "VIEW_IN_BROWSER_BUTTON": "브라우저에서 열기", diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json index d1f5c5c6..e7ce4434 100644 --- a/wowup-electron/src/assets/i18n/nb.json +++ b/wowup-electron/src/assets/i18n/nb.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "No description found", "DESCRIPTION_TAB": "Description", "FUNDING_LINK_TITLE": "Support this author", - "IMAGES_TAB": "Images", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Missing dependencies", "NO_CHANGELOG_TEXT": "No changelog available", "VIEW_IN_BROWSER_BUTTON": "Se i nettleser", diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json index 287e0bb3..8053e93d 100644 --- a/wowup-electron/src/assets/i18n/pt.json +++ b/wowup-electron/src/assets/i18n/pt.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "No description found", "DESCRIPTION_TAB": "Description", "FUNDING_LINK_TITLE": "Support this author", - "IMAGES_TAB": "Images", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Missing dependencies", "NO_CHANGELOG_TEXT": "No changelog available", "VIEW_IN_BROWSER_BUTTON": "Visualizar no navegador", diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index 8014c2b6..f8ed950d 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "Описание не найдено", "DESCRIPTION_TAB": "Описание", "FUNDING_LINK_TITLE": "Поддержать этого автора", - "IMAGES_TAB": "Изображения", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "Отсутствующие зависимости", "NO_CHANGELOG_TEXT": "Нет доступного списка изменений", "VIEW_IN_BROWSER_BUTTON": "Посмотреть в браузере", diff --git a/wowup-electron/src/assets/i18n/zh-TW.json b/wowup-electron/src/assets/i18n/zh-TW.json index 5d022785..61c1101d 100644 --- a/wowup-electron/src/assets/i18n/zh-TW.json +++ b/wowup-electron/src/assets/i18n/zh-TW.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "未找到描述", "DESCRIPTION_TAB": "描述", "FUNDING_LINK_TITLE": "支援插件作者", - "IMAGES_TAB": "圖片", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "缺失的依賴項", "NO_CHANGELOG_TEXT": "更新記錄不可用", "VIEW_IN_BROWSER_BUTTON": "在瀏覽器中檢視", diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index c7f7d103..1b1daad2 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "未找到描述", "DESCRIPTION_TAB": "描述", "FUNDING_LINK_TITLE": "支持插件作者", - "IMAGES_TAB": "图片", + "IMAGES_TAB": "Previews", "MISSING_DEPENDENCIES": "缺失的依赖项", "NO_CHANGELOG_TEXT": "更新记录不可用", "VIEW_IN_BROWSER_BUTTON": "在浏览器中查看", From 97a7687e4696bf685cdf5a875b5fcad5914a91e0 Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 11:04:38 -0500 Subject: [PATCH 008/188] Play with the tabs a little --- .../src/app/components/footer/footer.component.html | 8 ++++++-- .../src/app/components/footer/footer.component.scss | 3 +-- .../horizontal-tabs/horizontal-tabs.component.html | 11 +++++------ .../horizontal-tabs/horizontal-tabs.component.scss | 4 +++- .../horizontal-tabs/horizontal-tabs.component.ts | 4 ++-- wowup-electron/src/assets/i18n/cs.json | 1 + wowup-electron/src/assets/i18n/de.json | 1 + wowup-electron/src/assets/i18n/en.json | 1 + wowup-electron/src/assets/i18n/es.json | 1 + wowup-electron/src/assets/i18n/fr.json | 1 + 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-TW.json | 1 + wowup-electron/src/assets/i18n/zh.json | 1 + 17 files changed, 29 insertions(+), 13 deletions(-) diff --git a/wowup-electron/src/app/components/footer/footer.component.html b/wowup-electron/src/app/components/footer/footer.component.html index 596035d9..14a00045 100644 --- a/wowup-electron/src/app/components/footer/footer.component.html +++ b/wowup-electron/src/app/components/footer/footer.component.html @@ -3,6 +3,10 @@ matTooltip="{{ 'PAGES.MY_ADDONS.PAGE_CONTEXT_FOOTER.PATREON_SUPPORT' | translate }}"> + + +

{{ sessionService.statusText$ | async }}

{{ sessionService.pageContextText$ | async }}

@@ -21,7 +25,7 @@
@@ -31,4 +35,4 @@
- + \ No newline at end of file diff --git a/wowup-electron/src/app/components/footer/footer.component.scss b/wowup-electron/src/app/components/footer/footer.component.scss index b04dc8ab..3804bef2 100644 --- a/wowup-electron/src/app/components/footer/footer.component.scss +++ b/wowup-electron/src/app/components/footer/footer.component.scss @@ -27,8 +27,7 @@ footer { } mat-icon { - height: 100%; - padding: 4px 0; + height: 22px; } } p { diff --git a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html index 24daecc6..2fa1aaaa 100644 --- a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html +++ b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html @@ -4,8 +4,7 @@ linux: electronService.isLinux }">
+ [ngClass]="{ selected: tab.isSelected$ | async, disabled: tab.isDisabled$ | async }" (click)="tab.onClick(tab)"> @@ -19,18 +18,18 @@ +
{{ 'PAGES.HOME.GUIDE_TAB_TITLE' | translate }}
- - + -->
+ [ngClass]="{ selected: tab.isSelected$ | async, disabled: tab.isDisabled$ | async }" (click)="tab.onClick(tab)"> diff --git a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.scss b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.scss index 095ca8e8..4a44135e 100644 --- a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.scss +++ b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.scss @@ -30,6 +30,7 @@ border-right: 3px solid transparent; border-top-left-radius: 4px; border-top-right-radius: 4px; + text-decoration: none; .icon-active { svg { @@ -39,7 +40,7 @@ .tab-title { color: var(--text-4); - max-width: 0; + max-width: 200px; overflow: hidden; transition: all 0.3s ease 0.1s; transition-property: color, max-width; @@ -47,6 +48,7 @@ } .tab-icon { + margin-right: 0.5em; transition: margin-right 0.3s ease 0.1s; } diff --git a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts index 5f21939d..85649be0 100644 --- a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts +++ b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts @@ -90,9 +90,9 @@ export class HorizontalTabsComponent implements OnInit { }, }; - public tabsTop: Tab[] = [this.myAddonsTab, this.getAddonsTab, this.aboutTab, this.newsTab]; + public tabsTop: Tab[] = [this.myAddonsTab, this.getAddonsTab, this.newsTab]; - public tabsBottom: Tab[] = [this.settingsTab]; + public tabsBottom: Tab[] = [this.aboutTab, this.settingsTab]; public constructor( public electronService: ElectronService, diff --git a/wowup-electron/src/assets/i18n/cs.json b/wowup-electron/src/assets/i18n/cs.json index caf12d65..23e2513c 100644 --- a/wowup-electron/src/assets/i18n/cs.json +++ b/wowup-electron/src/assets/i18n/cs.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "O programu", "GET_ADDONS_TAB_TITLE": "Stáhnout nové addony", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migruji addony...", "MY_ADDONS_TAB_TITLE": "Moje addony", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/de.json b/wowup-electron/src/assets/i18n/de.json index bce60ef7..47dd28a9 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "Über WowUp", "GET_ADDONS_TAB_TITLE": "Addons installieren", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Addons werden migriert...", "MY_ADDONS_TAB_TITLE": "Meine Addons", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index b85ecd6e..1ffdf08e 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "About", "GET_ADDONS_TAB_TITLE": "Get Addons", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migrating addons...", "MY_ADDONS_TAB_TITLE": "My Addons", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index 780cce75..9e73e912 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "Acerca de", "GET_ADDONS_TAB_TITLE": "Obtener addons", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migrando lista de addons...", "MY_ADDONS_TAB_TITLE": "Mis addons", "NEWS_TAB_TITLE": "Noticias", diff --git a/wowup-electron/src/assets/i18n/fr.json b/wowup-electron/src/assets/i18n/fr.json index e7a2ffc5..b580fa7d 100644 --- a/wowup-electron/src/assets/i18n/fr.json +++ b/wowup-electron/src/assets/i18n/fr.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "À propos de", "GET_ADDONS_TAB_TITLE": "Obtenir des Addons", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migration des addons...", "MY_ADDONS_TAB_TITLE": "Mes Addons", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/it.json b/wowup-electron/src/assets/i18n/it.json index ff9f7a99..b8f0011c 100644 --- a/wowup-electron/src/assets/i18n/it.json +++ b/wowup-electron/src/assets/i18n/it.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "Informazioni", "GET_ADDONS_TAB_TITLE": "Ottieni Addons", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Trasferimento degli addons in corso...", "MY_ADDONS_TAB_TITLE": "I Miei Addons", "NEWS_TAB_TITLE": "Notizie", diff --git a/wowup-electron/src/assets/i18n/ko.json b/wowup-electron/src/assets/i18n/ko.json index 1f6516d8..9415ce8b 100644 --- a/wowup-electron/src/assets/i18n/ko.json +++ b/wowup-electron/src/assets/i18n/ko.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "프로그램 소개", "GET_ADDONS_TAB_TITLE": "애드온 찾기", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migrating addons...", "MY_ADDONS_TAB_TITLE": "내 애드온", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/nb.json b/wowup-electron/src/assets/i18n/nb.json index e7ce4434..b60a9151 100644 --- a/wowup-electron/src/assets/i18n/nb.json +++ b/wowup-electron/src/assets/i18n/nb.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "Om", "GET_ADDONS_TAB_TITLE": "Få Utvidelser", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migrating addons...", "MY_ADDONS_TAB_TITLE": "Mine Utvidelser", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/pt.json b/wowup-electron/src/assets/i18n/pt.json index 8053e93d..e3011d14 100644 --- a/wowup-electron/src/assets/i18n/pt.json +++ b/wowup-electron/src/assets/i18n/pt.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "Sobre", "GET_ADDONS_TAB_TITLE": "Obtenha Addons", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Migrating addons...", "MY_ADDONS_TAB_TITLE": "Meus Addons", "NEWS_TAB_TITLE": "News", diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index f8ed950d..b693f3e0 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "О программе", "GET_ADDONS_TAB_TITLE": "Получить модификации", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "Перенос модификаций...", "MY_ADDONS_TAB_TITLE": "Мои модификации", "NEWS_TAB_TITLE": "Новости", diff --git a/wowup-electron/src/assets/i18n/zh-TW.json b/wowup-electron/src/assets/i18n/zh-TW.json index 61c1101d..ac1ae503 100644 --- a/wowup-electron/src/assets/i18n/zh-TW.json +++ b/wowup-electron/src/assets/i18n/zh-TW.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "關於", "GET_ADDONS_TAB_TITLE": "獲取插件", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "正在遷移插件...", "MY_ADDONS_TAB_TITLE": "我的插件", "NEWS_TAB_TITLE": "新聞(英語)", diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index 1b1daad2..1368d2ec 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -298,6 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "关于", "GET_ADDONS_TAB_TITLE": "获取插件", + "GUIDE_TAB_TITLE": "Guide", "MIGRATING_ADDONS": "正在迁移插件...", "MY_ADDONS_TAB_TITLE": "我的插件", "NEWS_TAB_TITLE": "新闻(英语)", From 93919d6af6e8b5e854c73637e84ac4e44065ce4b Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 11:08:51 -0500 Subject: [PATCH 009/188] version bump --- wowup-electron/package.json | 2 +- .../app/services/wowup/patch-notes.service.ts | 20 +++++++++++++++++++ .../src/environments/environment.prod.ts | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 50219863..8d287137 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.4.2", + "version": "2.5.0-beta.1", "description": "World of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index a36a7934..0ad78383 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -15,6 +15,26 @@ export class PatchNotesService { } const CHANGELOGS: ChangeLog[] = [ + { + Version: "2.5.0", + html: ` +
+

New Features

+
    +
  • Added WowUpHub category support
  • +
  • Added WowUpHub preview support
  • +
+

Fixes

+
    +
  • Fix an issue with addons being ignored by TukUI too early during a scan
  • +
+

Changes

+
    +
  • Tweak the tabs some more
  • +
  • Images details tab is now Previews
  • +
+
`, + }, { Version: "2.4.2", html: ` diff --git a/wowup-electron/src/environments/environment.prod.ts b/wowup-electron/src/environments/environment.prod.ts index 7ed18251..6192feab 100644 --- a/wowup-electron/src/environments/environment.prod.ts +++ b/wowup-electron/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const AppConfig = { production: true, environment: "PROD", wowUpApiUrl: "https://api.wowup.io", - wowUpHubUrl: "https://hub.wowup.io", + wowUpHubUrl: "https://hub.dev.wowup.io", googleAnalyticsId: "UA-92563227-4", wowupRepositoryUrl: "https://github.com/WowUp/WowUp", warcraftTavernNewsFeedUrl: "https://www.warcrafttavern.com/?call_custom_simple_rss=1&csrp_post_type=wow-classic-news,tbc-classic-news,retail-news&csrp_thumbnail_size=medium", From cea21e2ff23c0fdffdf5b08b5dd18b6658cc2eda Mon Sep 17 00:00:00 2001 From: jliddev Date: Thu, 8 Jul 2021 18:25:06 -0500 Subject: [PATCH 010/188] Use different lightbox library --- wowup-electron/angular.json | 2 +- wowup-electron/package-lock.json | 13 ++++++---- wowup-electron/package.json | 2 +- wowup-electron/src/app/app.module.ts | 10 ++++++++ .../addon-detail/addon-detail.component.html | 6 ++--- .../addon-detail/addon-detail.component.ts | 25 ++++++++----------- .../src/app/pages/home/home.component.ts | 7 +----- .../src/app/pages/home/home.module.ts | 2 +- 8 files changed, 35 insertions(+), 32 deletions(-) diff --git a/wowup-electron/angular.json b/wowup-electron/angular.json index db8518a8..1a4b3254 100644 --- a/wowup-electron/angular.json +++ b/wowup-electron/angular.json @@ -17,7 +17,7 @@ "tsConfig": "src/tsconfig.app.json", "polyfills": "src/polyfills.ts", "assets": ["src/assets"], - "styles": ["./node_modules/ngx-lightbox/lightbox.css", "src/styles.scss"], + "styles": ["src/styles.scss"], "scripts": [], "customWebpackConfig": { "path": "./angular.webpack.js" diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index b3861c38..48efd8f0 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "wowup", - "version": "2.4.2", + "version": "2.5.0-beta.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14714,10 +14714,13 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "ngx-lightbox": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/ngx-lightbox/-/ngx-lightbox-2.4.1.tgz", - "integrity": "sha512-5r+PA+6Ep3PPAx22SDC6HSX/qHrVLade67hkEnJG2ZId9MkarPyFaUq5bIvS6+dXsEyckF0d+yH1fI8D6YWAvQ==" + "ng-gallery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ng-gallery/-/ng-gallery-5.0.0.tgz", + "integrity": "sha512-RFnMLJss8XbR7mmaKW39adPe78uzPp+ttv0l1hraq6IRcebTK7Ltzp8dVVg+fzdbx+cTmadespR6nD/icgrckg==", + "requires": { + "tslib": "^2.0.0" + } }, "ngx-translate-messageformat-compiler": { "version": "4.10.0", diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 8d287137..67eb70a7 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -145,7 +145,7 @@ "markdown-it": "12.1.0", "messageformat": "2.3.0", "minimist": "1.2.5", - "ngx-lightbox": "2.4.1", + "ng-gallery": "5.0.0", "ngx-translate-messageformat-compiler": "4.10.0", "node-cache": "5.1.2", "node-disk-info": "1.3.0", diff --git a/wowup-electron/src/app/app.module.ts b/wowup-electron/src/app/app.module.ts index dd31b403..2d4ab916 100644 --- a/wowup-electron/src/app/app.module.ts +++ b/wowup-electron/src/app/app.module.ts @@ -10,6 +10,8 @@ import { BrowserModule } from "@angular/platform-browser"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { TranslateCompiler, TranslateLoader, TranslateModule } from "@ngx-translate/core"; import { TranslateHttpLoader } from "@ngx-translate/http-loader"; +import { GalleryModule } from "ng-gallery"; +import { LightboxModule, LIGHTBOX_CONFIG } from "ng-gallery/lightbox"; import { AppRoutingModule } from "./app-routing.module"; import { AppComponent } from "./app.component"; @@ -64,6 +66,8 @@ export function initializeApp(wowupService: WowUpService) { }, }), BrowserAnimationsModule, + GalleryModule, + LightboxModule, ], providers: [ { @@ -82,6 +86,12 @@ export function initializeApp(wowupService: WowUpService) { useClass: ErrorHandlerInterceptor, deps: [AnalyticsService], }, + { + provide: LIGHTBOX_CONFIG, + useValue: { + keyboardShortcuts: true, + }, + }, ], bootstrap: [AppComponent], }) 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 d39a7122..100dca55 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 @@ -63,11 +63,11 @@
- + - +
- +
diff --git a/wowup-electron/src/app/components/addon-detail/addon-detail.component.ts b/wowup-electron/src/app/components/addon-detail/addon-detail.component.ts index 61c59c4f..aa638030 100644 --- a/wowup-electron/src/app/components/addon-detail/addon-detail.component.ts +++ b/wowup-electron/src/app/components/addon-detail/addon-detail.component.ts @@ -1,7 +1,6 @@ import { last } from "lodash"; import { BehaviorSubject, from, of, Subscription } from "rxjs"; import { filter, first, map, switchMap, tap } from "rxjs/operators"; -import { IAlbum, Lightbox } from "ngx-lightbox"; import { AfterViewChecked, @@ -33,6 +32,7 @@ import * as SearchResult from "../../utils/search-result.utils"; import { ConfirmDialogComponent } from "../confirm-dialog/confirm-dialog.component"; import { formatDynamicLinks } from "../../utils/dom.utils"; import { LinkService } from "../../services/links/link.service"; +import { Gallery, GalleryItem, ImageItem } from "ng-gallery"; export interface AddonDetailModel { listItem?: AddonViewModel; @@ -85,7 +85,7 @@ export class AddonDetailComponent implements OnInit, OnDestroy, AfterViewChecked public isUnknownProvider = false; public isMissingUnknownDependencies = false; public missingDependencies: string[] = []; - public imageUrls: IAlbum[] = []; + public previewItems: GalleryItem[] = []; public constructor( @Inject(MAT_DIALOG_DATA) public model: AddonDetailModel, @@ -96,8 +96,8 @@ export class AddonDetailComponent implements OnInit, OnDestroy, AfterViewChecked private _snackbarService: SnackbarService, private _translateService: TranslateService, private _sessionService: SessionService, - private _lightbox: Lightbox, - private _linkService: LinkService + private _linkService: LinkService, + public gallery: Gallery ) { this._dependencies = this.getDependencies(); @@ -169,12 +169,12 @@ export class AddonDetailComponent implements OnInit, OnDestroy, AfterViewChecked this.isMissingUnknownDependencies = !!this.missingDependencies.length; const imageUrlList = this.model.listItem?.addon?.screenshotUrls ?? this.model.searchResult?.screenshotUrls ?? []; - this.imageUrls = imageUrlList.map((url) => { - return { - src: url, - thumb: url, - }; + + this.previewItems = imageUrlList.map((url) => { + return new ImageItem({ src: url, thumb: url }); }); + + this.gallery.ref().load(this.previewItems); } public ngAfterViewInit(): void {} @@ -191,12 +191,7 @@ export class AddonDetailComponent implements OnInit, OnDestroy, AfterViewChecked } public onClickImage(url: string): void { - const idx = this.imageUrls.findIndex((album) => album.src === url); - if (idx >= 0) { - this._lightbox.open(this.imageUrls, idx, { - centerVertically: true, - }); - } + } public onInstallUpdated(): void { diff --git a/wowup-electron/src/app/pages/home/home.component.ts b/wowup-electron/src/app/pages/home/home.component.ts index dfdd0a81..6dfbe498 100644 --- a/wowup-electron/src/app/pages/home/home.component.ts +++ b/wowup-electron/src/app/pages/home/home.component.ts @@ -31,7 +31,6 @@ import { SnackbarService } from "../../services/snackbar/snackbar.service"; import { WarcraftInstallationService } from "../../services/warcraft/warcraft-installation.service"; import { WowUpService } from "../../services/wowup/wowup.service"; import { getProtocol } from "../../utils/string.utils"; -import { LightboxConfig } from "ngx-lightbox"; @Component({ selector: "app-home", @@ -63,12 +62,8 @@ export class HomeComponent implements AfterViewInit, OnDestroy { private _snackBarService: SnackbarService, private _cdRef: ChangeDetectorRef, private _warcraftInstallationService: WarcraftInstallationService, - private _dialogFactory: DialogFactory, - private _lightboxConfig: LightboxConfig + private _dialogFactory: DialogFactory ) { - _lightboxConfig.fadeDuration = 0.3; - _lightboxConfig.resizeDuration = 0.3; - const wowInstalledSub = this._warcraftInstallationService.wowInstallations$.subscribe((installations) => { this.hasWowClient = installations.length > 0; }); diff --git a/wowup-electron/src/app/pages/home/home.module.ts b/wowup-electron/src/app/pages/home/home.module.ts index 1aa9ffa6..1c9bd686 100644 --- a/wowup-electron/src/app/pages/home/home.module.ts +++ b/wowup-electron/src/app/pages/home/home.module.ts @@ -1,5 +1,4 @@ import { AgGridModule } from "ag-grid-angular"; -import { LightboxModule } from "ngx-lightbox"; import { CommonModule, DatePipe } from "@angular/common"; import { NgModule } from "@angular/core"; @@ -48,6 +47,7 @@ import { MyAddonsComponent } from "../my-addons/my-addons.component"; import { OptionsComponent } from "../options/options.component"; import { HomeRoutingModule } from "./home-routing.module"; import { HomeComponent } from "./home.component"; +import { LightboxModule, LIGHTBOX_CONFIG } from "ng-gallery/lightbox"; @NgModule({ declarations: [ From 816daef0848167a9bd76dc614d74ede7615bf186 Mon Sep 17 00:00:00 2001 From: SkollVargr <73319775+SkollVargr@users.noreply.github.com> Date: Fri, 9 Jul 2021 15:21:17 +0200 Subject: [PATCH 011/188] Update es.json --- wowup-electron/src/assets/i18n/es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wowup-electron/src/assets/i18n/es.json b/wowup-electron/src/assets/i18n/es.json index 9e73e912..02c35c2f 100644 --- a/wowup-electron/src/assets/i18n/es.json +++ b/wowup-electron/src/assets/i18n/es.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "Descripción no encontrada", "DESCRIPTION_TAB": "Descripción", "FUNDING_LINK_TITLE": "Apoyar a este autor", - "IMAGES_TAB": "Previews", + "IMAGES_TAB": "Previsualizaciones", "MISSING_DEPENDENCIES": "Dependencias no encontradas", "NO_CHANGELOG_TEXT": "No hay listado de cambios disponible", "VIEW_IN_BROWSER_BUTTON": "Ver en el navegador", @@ -298,7 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "Acerca de", "GET_ADDONS_TAB_TITLE": "Obtener addons", - "GUIDE_TAB_TITLE": "Guide", + "GUIDE_TAB_TITLE": "Guía", "MIGRATING_ADDONS": "Migrando lista de addons...", "MY_ADDONS_TAB_TITLE": "Mis addons", "NEWS_TAB_TITLE": "Noticias", From 243f46bf0996fd4a214082facd9b6b2ca531eb8b Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 9 Jul 2021 09:22:08 -0500 Subject: [PATCH 012/188] Handle a special case for addons that also contain a multi-toc keyword --- .../app/addon-providers/curse-addon-provider.ts | 2 +- .../src/app/addon-providers/raiderio-provider.ts | 4 ++-- .../app/addon-providers/tukui-addon-provider.ts | 2 +- .../wow-interface-addon-provider.ts | 4 ++-- .../wowup-companion-addon-provider.ts | 2 +- .../src/app/services/addons/addon.service.ts | 6 +++--- .../src/app/services/toc/toc.service.ts | 15 +++++++++++++-- wowup-electron/src/app/utils/string.utils.ts | 4 ++++ 8 files changed, 27 insertions(+), 12 deletions(-) diff --git a/wowup-electron/src/app/addon-providers/curse-addon-provider.ts b/wowup-electron/src/app/addon-providers/curse-addon-provider.ts index 66440f13..ef660bc7 100644 --- a/wowup-electron/src/app/addon-providers/curse-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/curse-addon-provider.ts @@ -896,7 +896,7 @@ export class CurseAddonProvider extends AddonProvider { const latestFiles = this.getLatestFiles(scanResult.searchResult, installation.clientType); - const targetToc = this._tocService.getTocForGameType2(scanResult.addonFolder.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(scanResult.addonFolder, installation.clientType); const gameVersion = AddonUtils.getGameVersion(targetToc.interface); let channelType = this.getChannelType(scanResult.exactMatch.file.releaseType); diff --git a/wowup-electron/src/app/addon-providers/raiderio-provider.ts b/wowup-electron/src/app/addon-providers/raiderio-provider.ts index 14b16011..daa8faad 100644 --- a/wowup-electron/src/app/addon-providers/raiderio-provider.ts +++ b/wowup-electron/src/app/addon-providers/raiderio-provider.ts @@ -37,7 +37,7 @@ export class RaiderIoAddonProvider extends AddonProvider { return Promise.resolve(undefined); } - const targetToc = this._tocService.getTocForGameType2(raiderIo.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(raiderIo, installation.clientType); const dependencies = _.filter(addonFolders, (addonFolder) => this.isRaiderIoDependant(addonFolder)); console.debug("RAIDER IO CLIENT FOUND", dependencies); @@ -46,7 +46,7 @@ export class RaiderIoAddonProvider extends AddonProvider { const installedFolders = installedFolderList.join(","); for (const rioAddonFolder of rioAddonFolders) { - const subTargetToc = this._tocService.getTocForGameType2(rioAddonFolder.tocs, installation.clientType); + const subTargetToc = this._tocService.getTocForGameType2(rioAddonFolder, installation.clientType); rioAddonFolder.matchingAddon = { autoUpdateEnabled: false, diff --git a/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts b/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts index 4785aa45..34d83201 100644 --- a/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/tukui-addon-provider.ts @@ -141,7 +141,7 @@ export class TukUiAddonProvider extends AddonProvider { ).reverse(); for (const addonFolder of tukProjectAddonFolders) { - const targetToc = this._tocService.getTocForGameType2(addonFolder.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(addonFolder, installation.clientType); let tukUiAddon: TukUiAddon; if (targetToc?.tukUiProjectId) { diff --git a/wowup-electron/src/app/addon-providers/wow-interface-addon-provider.ts b/wowup-electron/src/app/addon-providers/wow-interface-addon-provider.ts index 3b05e3c9..ce8828a8 100644 --- a/wowup-electron/src/app/addon-providers/wow-interface-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wow-interface-addon-provider.ts @@ -149,7 +149,7 @@ export class WowInterfaceAddonProvider extends AddonProvider { const addonDetails = await this.getAllAddonDetails(addonIds); for (const addonFolder of wowiFolders) { - const targetToc = this._tocService.getTocForGameType2(addonFolder.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(addonFolder, installation.clientType); if (!targetToc?.wowInterfaceId) { continue; } @@ -223,7 +223,7 @@ export class WowInterfaceAddonProvider extends AddonProvider { addonChannelType: AddonChannelType, addonFolder: AddonFolder ): Addon { - const targetToc = this._tocService.getTocForGameType2(addonFolder.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(addonFolder, installation.clientType); return { id: uuidv4(), diff --git a/wowup-electron/src/app/addon-providers/wowup-companion-addon-provider.ts b/wowup-electron/src/app/addon-providers/wowup-companion-addon-provider.ts index 7871130b..90e39b8a 100644 --- a/wowup-electron/src/app/addon-providers/wowup-companion-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wowup-companion-addon-provider.ts @@ -36,7 +36,7 @@ export class WowUpCompanionAddonProvider extends AddonProvider { return; } - const targetToc = this._tocService.getTocForGameType2(companion.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(companion, installation.clientType); const lastUpdatedAt = await this._fileService.getLatestDirUpdateTime(companion.path); companion.matchingAddon = { diff --git a/wowup-electron/src/app/services/addons/addon.service.ts b/wowup-electron/src/app/services/addons/addon.service.ts index e4464245..2ed96e7c 100644 --- a/wowup-electron/src/app/services/addons/addon.service.ts +++ b/wowup-electron/src/app/services/addons/addon.service.ts @@ -1486,7 +1486,7 @@ export class AddonService { matchedAddonFolders.forEach((maf) => { if (maf.matchingAddon) { - const targetToc = this._tocService.getTocForGameType2(maf.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(maf, installation.clientType); this.setExternalIds(maf.matchingAddon, targetToc); } }); @@ -1598,7 +1598,7 @@ export class AddonService { return false; } - const targetToc = this._tocService.getTocForGameType2(addonFolder.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(addonFolder, installation.clientType); // if the folder is load on demand, it 'should' be a sub folder const isLoadOnDemand = targetToc?.loadOnDemand === "1"; @@ -1882,7 +1882,7 @@ export class AddonService { installation: WowInstallation, matchedAddonFolderNames: string[] ): Promise { - const targetToc = this._tocService.getTocForGameType2(addonFolder.tocs, installation.clientType); + const targetToc = this._tocService.getTocForGameType2(addonFolder, installation.clientType); const tocMissingDependencies = _.difference(targetToc?.dependencyList, matchedAddonFolderNames); const lastUpdatedAt = await this._fileService.getLatestDirUpdateTime(addonFolder.path); diff --git a/wowup-electron/src/app/services/toc/toc.service.ts b/wowup-electron/src/app/services/toc/toc.service.ts index 61f1f2a2..e6a8b38f 100644 --- a/wowup-electron/src/app/services/toc/toc.service.ts +++ b/wowup-electron/src/app/services/toc/toc.service.ts @@ -2,7 +2,9 @@ import { Injectable } from "@angular/core"; import * as path from "path"; import { WowClientType } from "../../../common/warcraft/wow-client-type"; +import { AddonFolder } from "../../models/wowup/addon-folder"; import { Toc } from "../../models/wowup/toc"; +import { removeExtension } from "../../utils/string.utils"; import { FileService } from "../files/file.service"; const TOC_AUTHOR = "Author"; @@ -135,9 +137,10 @@ export class TocService { return matchedToc || tocFileNames.find((tfn) => /.*(? toc.fileName); switch (clientType) { case WowClientType.Beta: @@ -157,7 +160,15 @@ export class TocService { break; } - matchedToc = matchedToc || tocFileNames.find((tfn) => /.*(? /.*(? removeExtension(toc.fileName).toLowerCase() === addonFolder.name.toLowerCase()); + } return tocs.find((toc) => toc.fileName === matchedToc); } diff --git a/wowup-electron/src/app/utils/string.utils.ts b/wowup-electron/src/app/utils/string.utils.ts index 6aa27de8..30803623 100644 --- a/wowup-electron/src/app/utils/string.utils.ts +++ b/wowup-electron/src/app/utils/string.utils.ts @@ -7,6 +7,10 @@ export function stringIncludes(value: string | undefined, search: string): boole return value.trim().toLowerCase().indexOf(search.trim().toLowerCase()) >= 0; } +export function removeExtension(str: string): string { + return str.replace(/\.[^/.]+$/, ""); +} + export function camelToSnakeCase(str: string): string { // if the string is all caps, ignore it if (str.toUpperCase() === str) { From bb63ad433d3dda4ac92e5d1158b259ca2df938c7 Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 9 Jul 2021 09:39:47 -0500 Subject: [PATCH 013/188] Version bump --- wowup-electron/package.json | 2 +- wowup-electron/src/app/services/wowup/patch-notes.service.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index 67eb70a7..534fc994 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.5.0-beta.1", + "version": "2.5.0-beta.2", "description": "World of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index 0ad78383..3cc6b6bb 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -27,11 +27,13 @@ const CHANGELOGS: ChangeLog[] = [

Fixes

  • Fix an issue with addons being ignored by TukUI too early during a scan
  • +
  • Fix an issue with certain addons not being able to be re-scanned

Changes

  • Tweak the tabs some more
  • Images details tab is now Previews
  • +
  • Use a different lightbox library for previews
`, }, From e028c521dd2598fa45ccfd76e5b602b35ff9f5be Mon Sep 17 00:00:00 2001 From: Cyano Hao Date: Fri, 9 Jul 2021 22:44:11 +0800 Subject: [PATCH 014/188] Update zh translations --- wowup-electron/src/assets/i18n/zh-TW.json | 6 +++--- wowup-electron/src/assets/i18n/zh.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/wowup-electron/src/assets/i18n/zh-TW.json b/wowup-electron/src/assets/i18n/zh-TW.json index ac1ae503..d0adfe42 100644 --- a/wowup-electron/src/assets/i18n/zh-TW.json +++ b/wowup-electron/src/assets/i18n/zh-TW.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "未找到描述", "DESCRIPTION_TAB": "描述", "FUNDING_LINK_TITLE": "支援插件作者", - "IMAGES_TAB": "Previews", + "IMAGES_TAB": "預覽", "MISSING_DEPENDENCIES": "缺失的依賴項", "NO_CHANGELOG_TEXT": "更新記錄不可用", "VIEW_IN_BROWSER_BUTTON": "在瀏覽器中檢視", @@ -298,7 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "關於", "GET_ADDONS_TAB_TITLE": "獲取插件", - "GUIDE_TAB_TITLE": "Guide", + "GUIDE_TAB_TITLE": "指南(英語)", "MIGRATING_ADDONS": "正在遷移插件...", "MY_ADDONS_TAB_TITLE": "我的插件", "NEWS_TAB_TITLE": "新聞(英語)", @@ -346,7 +346,7 @@ "PATREON_SUPPORT": "透過 Patreon 向 WowUp 捐助(英語)", "SEARCH_RESULTS": "共 {count} 條結果", "VIEW_GITHUB": "在 GitHub 上檢視原始碼", - "VIEW_GUIDE": "訪問指南,探索 WowUp 的功能(英語)" + "VIEW_GUIDE": "訪問指南,探索 WowUp 的功能" }, "REQUIRED_DEPENDENCY_MISSING_TOOLTIP": "缺失必要的依賴項", "RESCAN_FOLDERS_BUTTON": "重新掃描", diff --git a/wowup-electron/src/assets/i18n/zh.json b/wowup-electron/src/assets/i18n/zh.json index 1368d2ec..da7ad395 100644 --- a/wowup-electron/src/assets/i18n/zh.json +++ b/wowup-electron/src/assets/i18n/zh.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "未找到描述", "DESCRIPTION_TAB": "描述", "FUNDING_LINK_TITLE": "支持插件作者", - "IMAGES_TAB": "Previews", + "IMAGES_TAB": "预览", "MISSING_DEPENDENCIES": "缺失的依赖项", "NO_CHANGELOG_TEXT": "更新记录不可用", "VIEW_IN_BROWSER_BUTTON": "在浏览器中查看", @@ -298,7 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "关于", "GET_ADDONS_TAB_TITLE": "获取插件", - "GUIDE_TAB_TITLE": "Guide", + "GUIDE_TAB_TITLE": "指南(英语)", "MIGRATING_ADDONS": "正在迁移插件...", "MY_ADDONS_TAB_TITLE": "我的插件", "NEWS_TAB_TITLE": "新闻(英语)", @@ -346,7 +346,7 @@ "PATREON_SUPPORT": "通过 Patreon 向 WowUp 捐助(英语)", "SEARCH_RESULTS": "共 {count} 条结果", "VIEW_GITHUB": "在 GitHub 上查看源代码", - "VIEW_GUIDE": "访问指南,探索 WowUp 的功能(英语)" + "VIEW_GUIDE": "访问指南,探索 WowUp 的功能" }, "REQUIRED_DEPENDENCY_MISSING_TOOLTIP": "缺失必要的依赖项", "RESCAN_FOLDERS_BUTTON": "重新扫描", From 137e67537e8e8a7931c234ee256282a74c1f3796 Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 9 Jul 2021 09:47:14 -0500 Subject: [PATCH 015/188] Fix tests --- .../components/addon-detail/addon-detail.component.spec.ts | 4 +++- wowup-electron/src/app/pages/home/home.component.spec.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts b/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts index 62363130..7dbb724b 100644 --- a/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts +++ b/wowup-electron/src/app/components/addon-detail/addon-detail.component.spec.ts @@ -19,8 +19,9 @@ import { overrideIconModule } from "../../tests/mock-mat-icon"; import { AddonDetailComponent, AddonDetailModel } from "./addon-detail.component"; import { mockPreload } from "../../tests/test-helpers"; import { WowUpService } from "../../services/wowup/wowup.service"; -import { LightboxModule } from "ngx-lightbox"; import { LinkService } from "../../services/links/link.service"; +import { GalleryModule } from "ng-gallery"; +import { LightboxModule } from "ng-gallery/lightbox"; describe("AddonDetailComponent", () => { let dialogModel: AddonDetailModel; @@ -73,6 +74,7 @@ describe("AddonDetailComponent", () => { useClass: TranslateMessageFormatCompiler, }, }), + GalleryModule, LightboxModule, ], schemas: [CUSTOM_ELEMENTS_SCHEMA], 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 55395d1d..101fe3a1 100644 --- a/wowup-electron/src/app/pages/home/home.component.spec.ts +++ b/wowup-electron/src/app/pages/home/home.component.spec.ts @@ -17,7 +17,8 @@ import { AddonScanError, AddonSyncError } from "../../errors"; import { WarcraftInstallationService } from "../../services/warcraft/warcraft-installation.service"; import { DialogFactory } from "../../services/dialog/dialog.factory"; import { AddonUpdateEvent } from "../../models/wowup/addon-update-event"; -import { LightboxModule } from "ngx-lightbox"; +import { GalleryModule } from "ng-gallery"; +import { LightboxModule } from "ng-gallery/lightbox"; describe("HomeComponent", () => { let electronService: ElectronService; @@ -72,6 +73,7 @@ describe("HomeComponent", () => { useClass: TranslateMessageFormatCompiler, }, }), + GalleryModule, LightboxModule, ], providers: [MatSnackBar], From b914646df0372aa84117d6733aa3e9fb96f2502c Mon Sep 17 00:00:00 2001 From: jliddev Date: Fri, 9 Jul 2021 09:54:29 -0500 Subject: [PATCH 016/188] Update patch-notes.service.ts --- wowup-electron/src/app/services/wowup/patch-notes.service.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index 3cc6b6bb..cb13a204 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -31,6 +31,8 @@ const CHANGELOGS: ChangeLog[] = [

Changes

    +
  • Spanish locale updates (SkollVargr)
  • +
  • Chinese locale updates (CyanoHao)
  • Tweak the tabs some more
  • Images details tab is now Previews
  • Use a different lightbox library for previews
  • From bd82e0186939be93cc86bcbf7031594ec28a6609 Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 12 Jul 2021 13:51:51 -0500 Subject: [PATCH 017/188] Tweak the markdown width --- wowup-electron/src/markdown.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wowup-electron/src/markdown.scss b/wowup-electron/src/markdown.scss index 38b39d45..450c13dc 100644 --- a/wowup-electron/src/markdown.scss +++ b/wowup-electron/src/markdown.scss @@ -1,6 +1,8 @@ //This css based on https://github.com/sindresorhus/github-markdown-css .markdown-body { + max-width: 979px; + * { th { font-family: Roboto, Helvetica Neue, sans-serif; From 84695c76501bda0e53d5b1faec0806528111ec70 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 13 Jul 2021 11:54:02 -0500 Subject: [PATCH 018/188] Add in a WTF explorer for learning. --- wowup-electron/package-lock.json | 2 +- .../app/components/extra/extra.component.html | 55 +++++ .../app/components/extra/extra.component.scss | 20 ++ .../app/components/extra/extra.component.ts | 201 ++++++++++++++++++ wowup-electron/src/app/mat-module.ts | 3 + .../src/app/pages/home/home.module.ts | 5 + .../app/pages/options/options.component.html | 6 + .../src/app/pipes/size-display.pipe.ts | 20 ++ .../src/app/services/wtf/wtf.service.ts | 105 +++++++++ wowup-electron/src/custom-theme.scss | 5 + 10 files changed, 421 insertions(+), 1 deletion(-) create mode 100644 wowup-electron/src/app/components/extra/extra.component.html create mode 100644 wowup-electron/src/app/components/extra/extra.component.scss create mode 100644 wowup-electron/src/app/components/extra/extra.component.ts create mode 100644 wowup-electron/src/app/pipes/size-display.pipe.ts create mode 100644 wowup-electron/src/app/services/wtf/wtf.service.ts diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index 48efd8f0..f8c98915 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "wowup", - "version": "2.5.0-beta.1", + "version": "2.5.0-beta.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/wowup-electron/src/app/components/extra/extra.component.html b/wowup-electron/src/app/components/extra/extra.component.html new file mode 100644 index 00000000..e51fd200 --- /dev/null +++ b/wowup-electron/src/app/components/extra/extra.component.html @@ -0,0 +1,55 @@ +
    + + +
    \ No newline at end of file diff --git a/wowup-electron/src/app/components/extra/extra.component.scss b/wowup-electron/src/app/components/extra/extra.component.scss new file mode 100644 index 00000000..ef9fad45 --- /dev/null +++ b/wowup-electron/src/app/components/extra/extra.component.scss @@ -0,0 +1,20 @@ +.account-container { + padding: 1em; + + .variable-list { + padding-left: 1em; + li { + list-style: none; + } + } + + .variable-accordion .mat-expansion-panel-header-title, + .variable-accordion .mat-expansion-panel-header-description { + flex-basis: 0; + } + + .variable-accordion .mat-expansion-panel-header-description { + justify-content: space-between; + align-items: center; + } +} diff --git a/wowup-electron/src/app/components/extra/extra.component.ts b/wowup-electron/src/app/components/extra/extra.component.ts new file mode 100644 index 00000000..a643607a --- /dev/null +++ b/wowup-electron/src/app/components/extra/extra.component.ts @@ -0,0 +1,201 @@ +import * as _ from "lodash"; +import { BehaviorSubject, from } from "rxjs"; +import { debounceTime, filter, first, map } from "rxjs/operators"; + +import { Component, Input, OnDestroy, OnInit } from "@angular/core"; + +import { ElectronService } from "../../services"; +import { SessionService } from "../../services/session/session.service"; +import { WarcraftService } from "../../services/warcraft/warcraft.service"; +import { WtfService } from "../../services/wtf/wtf.service"; +import { removeExtension } from "../../utils/string.utils"; +import { AddonFolder } from "../../models/wowup/addon-folder"; +import { WowInstallation } from "../../models/wowup/wow-installation"; + +interface SavedVariable { + name: string; + size: number; + hasAddon: boolean; +} + +interface Server { + name: string; + size: number; + sizeMb: string; + characters: Character[]; +} + +interface Character { + name: string; + size: number; + sizeMb: string; + variables: SavedVariable[]; +} + +interface AccountItem { + name: string; + globalVariables: SavedVariable[]; + servers: Server[]; + size: number; + sizeMb: string; +} + +@Component({ + selector: "app-extra", + templateUrl: "./extra.component.html", + styleUrls: ["./extra.component.scss"], +}) +export class ExtraComponent implements OnInit, OnDestroy { + @Input("tabIndex") public tabIndex!: number; + + @Input() + public get active(): boolean { + return this._active; + } + public set active(active: boolean) { + this._active = active; + if (this._active) { + this.lazyLoad(); + } + } + private _active = false; + + public accountMap = new BehaviorSubject([]); + + public constructor( + public electronService: ElectronService, + private _sessionService: SessionService, + private _warcraftService: WarcraftService, + private _wtfService: WtfService + ) { + // this._sessionService.se + // .pipe( + // filter((newTabIndex) => newTabIndex === this.tabIndex), + // debounceTime(200), + // map(() => { + // this.lazyLoad(); + // }) + // ) + // .subscribe(); + } + + public ngOnInit(): void {} + + public ngOnDestroy(): void {} + + private lazyLoad() { + console.debug("lazyLoad"); + from(this.loadAccounts()).pipe(first()).subscribe(); + } + + private async loadAccounts(): Promise { + try { + const installation = this._sessionService.getSelectedWowInstallation(); + const accounts = await this._wtfService.getAccounts(installation); + const addonFolders = await this._warcraftService.listAddons(installation); + console.log("addonFolders", addonFolders); + + const accountMap: AccountItem[] = []; + for (const account of accounts) { + const accountGlobalVars = await this.getAccountGlobalVars(installation, account, addonFolders); + const serverList = await this.getServers(installation, account, addonFolders); + console.debug("serverList", serverList); + + const totalSize = _.sumBy(accountGlobalVars, (gvar) => gvar.size); + accountMap.push({ + globalVariables: accountGlobalVars, + name: account, + size: totalSize, + sizeMb: (totalSize / 1024 / 1024).toFixed(2), + servers: serverList, + }); + } + + this.accountMap.next(accountMap); + } catch (e) { + console.error(e); + } + } + + private async getAccountGlobalVars( + installation: WowInstallation, + account: string, + addonFolders: AddonFolder[] + ): Promise { + const globalVariables = await this._wtfService.getGlobalVariables(installation, account); + console.debug("globalVariables", globalVariables); + const gVars: SavedVariable[] = globalVariables.map((gv) => { + return { + hasAddon: addonFolders.some((af) => af.name === removeExtension(gv.name)), + name: gv.name, + size: gv.stats.size, + }; + }); + + return gVars; + } + + private async getServers( + installation: WowInstallation, + account: string, + addonFolders: AddonFolder[] + ): Promise { + const serverNames = await this._wtfService.getServers(installation, account); + const servers: Server[] = serverNames.map((server) => { + return { + name: server, + characters: [], + size: 0, + sizeMb: "", + }; + }); + + for (const server of servers) { + const charNames = await this._wtfService.getCharacters(installation, account, server.name); + const chars: Character[] = []; + for (const charName of charNames) { + const variables = await this.getCharacterSavedVariables( + installation, + account, + server.name, + charName, + addonFolders + ); + const totalSize = _.sumBy(variables, (svar) => svar.size); + + chars.push({ + name: charName, + size: totalSize, + sizeMb: (totalSize / 1024 / 1025).toFixed(2), + variables, + }); + } + + server.characters = chars; + server.size = _.sumBy(server.characters, (char) => char.size); + server.sizeMb = (server.size / 1024 / 1024).toFixed(2); + } + + return servers; + } + + private async getCharacterSavedVariables( + installation: WowInstallation, + account: string, + server: string, + character: string, + addonFolders: AddonFolder[] + ): Promise { + const savedVars = await this._wtfService.getCharacterVariables(installation, account, server, character); + + const vars: SavedVariable[] = savedVars.map((gv) => { + return { + hasAddon: addonFolders.some((af) => af.name === removeExtension(gv.name)), + name: gv.name, + size: gv.stats.size, + }; + }); + + return vars; + } +} diff --git a/wowup-electron/src/app/mat-module.ts b/wowup-electron/src/app/mat-module.ts index db4a62a7..d341802f 100644 --- a/wowup-electron/src/app/mat-module.ts +++ b/wowup-electron/src/app/mat-module.ts @@ -24,6 +24,7 @@ import { MatBadgeModule } from "@angular/material/badge"; import { ClipboardModule } from "@angular/cdk/clipboard"; import { ScrollingModule } from "@angular/cdk/scrolling"; import { MatGridListModule } from "@angular/material/grid-list"; +import { MatExpansionModule } from "@angular/material/expansion"; @NgModule({ exports: [ @@ -52,6 +53,7 @@ import { MatGridListModule } from "@angular/material/grid-list"; ClipboardModule, ScrollingModule, MatGridListModule, + MatExpansionModule, ], imports: [ MatSliderModule, @@ -79,6 +81,7 @@ import { MatGridListModule } from "@angular/material/grid-list"; ClipboardModule, ScrollingModule, MatGridListModule, + MatExpansionModule, ], }) export class MatModule {} diff --git a/wowup-electron/src/app/pages/home/home.module.ts b/wowup-electron/src/app/pages/home/home.module.ts index 1c9bd686..989005fe 100644 --- a/wowup-electron/src/app/pages/home/home.module.ts +++ b/wowup-electron/src/app/pages/home/home.module.ts @@ -48,6 +48,8 @@ import { OptionsComponent } from "../options/options.component"; import { HomeRoutingModule } from "./home-routing.module"; import { HomeComponent } from "./home.component"; import { LightboxModule, LIGHTBOX_CONFIG } from "ng-gallery/lightbox"; +import { ExtraComponent } from "../../components/extra/extra.component"; +import { SizeDisplayPipe } from "../../pipes/size-display.pipe"; @NgModule({ declarations: [ @@ -88,8 +90,10 @@ import { LightboxModule, LIGHTBOX_CONFIG } from "ng-gallery/lightbox"; AddonThumbnailComponent, PatchNotesDialogComponent, TrustHtmlPipe, + SizeDisplayPipe, NewsPanelComponent, ExternalUrlConfirmationDialogComponent, + ExtraComponent, ], imports: [ CommonModule, @@ -112,6 +116,7 @@ import { LightboxModule, LIGHTBOX_CONFIG } from "ng-gallery/lightbox"; RelativeDurationPipe, NgxDatePipe, TrustHtmlPipe, + SizeDisplayPipe, ], }) export class HomeModule {} diff --git a/wowup-electron/src/app/pages/options/options.component.html b/wowup-electron/src/app/pages/options/options.component.html index 550adbe6..56b762d9 100644 --- a/wowup-electron/src/app/pages/options/options.component.html +++ b/wowup-electron/src/app/pages/options/options.component.html @@ -23,6 +23,9 @@ +
@@ -43,6 +46,9 @@ + + + diff --git a/wowup-electron/src/app/pipes/size-display.pipe.ts b/wowup-electron/src/app/pipes/size-display.pipe.ts new file mode 100644 index 00000000..96997f40 --- /dev/null +++ b/wowup-electron/src/app/pipes/size-display.pipe.ts @@ -0,0 +1,20 @@ +import { Pipe, PipeTransform } from "@angular/core"; + +@Pipe({ name: "sizeDisplay" }) +export class SizeDisplayPipe implements PipeTransform { + public constructor() {} + + public transform(size: number): string { + if (size < 1024) { + return `${size} bytes`; + } + + const sizeKb = Math.round(size / 1024); + if (sizeKb < 1024) { + return `${sizeKb} kb`; + } + + const sizeMb = Math.round(size / 1024 / 1024); + return `${sizeMb} mb`; + } +} diff --git a/wowup-electron/src/app/services/wtf/wtf.service.ts b/wowup-electron/src/app/services/wtf/wtf.service.ts new file mode 100644 index 00000000..bd7713e1 --- /dev/null +++ b/wowup-electron/src/app/services/wtf/wtf.service.ts @@ -0,0 +1,105 @@ +import { Injectable } from "@angular/core"; +import * as path from "path"; + +import { Addon } from "../../../common/entities/addon"; +import { FsStats } from "../../../common/models/ipc-events"; +import { WowInstallation } from "../../models/wowup/wow-installation"; +import { FileService } from "../files/file.service"; + +const WTF_FOLDER = "WTF"; +const ACCOUNT_FOLDER = "Account"; +const SAVED_VARIABLES_FOLDER = "SavedVariables"; + +export interface FileStats { + name: string; + path: string; + stats: FsStats; +} + +@Injectable({ + providedIn: "root", +}) +export class WtfService { + public constructor(private _fileService: FileService) {} + + public getWtfPath(installation: WowInstallation): string { + return path.join(path.dirname(installation.location), WTF_FOLDER); + } + + public getAccountsPath(installation: WowInstallation): string { + return path.join(this.getWtfPath(installation), ACCOUNT_FOLDER); + } + + public async listAccountPaths(installations: WowInstallation): Promise { + return await this._fileService.listDirectories(this.getAccountsPath(installations)); + } + + public async getAccounts(installation: WowInstallation): Promise { + const accountFolders = await this.listAccountPaths(installation); + return accountFolders.filter((folder) => folder !== SAVED_VARIABLES_FOLDER); + } + + public async getServers(installation: WowInstallation, account: string): Promise { + const accountPath = path.join(this.getAccountsPath(installation), account); + const entries = await this._fileService.listDirectories(accountPath); + + return entries.filter((entry) => entry !== SAVED_VARIABLES_FOLDER); + } + + public async getCharacters(installation: WowInstallation, account: string, server: string): Promise { + const serverPath = path.join(this.getAccountsPath(installation), account, server); + const entries = await this._fileService.listDirectories(serverPath); + return entries; + } + + public async getCharacterVariables( + installation: WowInstallation, + account: string, + server: string, + character: string + ): Promise { + const characterPath = path.join( + this.getAccountsPath(installation), + account, + server, + character, + SAVED_VARIABLES_FOLDER + ); + const entries = await this._fileService.listFiles(characterPath, "*.lua"); + + const entryPaths = entries.map((entry) => path.join(characterPath, entry)); + const fileSizes = await this._fileService.statFiles(entryPaths); + + const fsStats: FileStats[] = Object.keys(fileSizes).map((key) => { + return { + name: path.basename(key), + path: key, + stats: fileSizes[key], + }; + }); + + return fsStats; + } + + public async getGlobalVariables(installation: WowInstallation, account: string): Promise { + const accountPath = path.join(this.getAccountsPath(installation), account, SAVED_VARIABLES_FOLDER); + const entries = await this._fileService.listFiles(accountPath, "*.lua"); + + const entryPaths = entries.map((entry) => path.join(accountPath, entry)); + const fileSizes = await this._fileService.statFiles(entryPaths); + + const fsStats: FileStats[] = Object.keys(fileSizes).map((key) => { + return { + name: path.basename(key), + path: key, + stats: fileSizes[key], + }; + }); + + return fsStats; + } + + public async getGlobalSavedVariables(installation: WowInstallation): Promise {} + + public async getMap(addon: Addon): Promise {} +} diff --git a/wowup-electron/src/custom-theme.scss b/wowup-electron/src/custom-theme.scss index 42035aa2..16d90527 100644 --- a/wowup-electron/src/custom-theme.scss +++ b/wowup-electron/src/custom-theme.scss @@ -596,6 +596,11 @@ $alliance-theme-light: mat.define-light-theme( color: var(--text-3) !important; } +.sub-accordion .mat-expansion-panel-header, +.sub-accordion .mat-expansion-panel-body { + background-color: var(--background-secondary-2); +} + // LIGHT BOX .lb-outerContainer { From 6037230dadb43dd48561c0ca90827e917589667f Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 13 Jul 2021 11:54:46 -0500 Subject: [PATCH 019/188] Version bump --- 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 534fc994..f5a45395 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.5.0-beta.2", + "version": "2.5.0-beta.3", "description": "World of Warcraft addon updater", "homepage": "https://wowup.io", "author": { From f277b841b61b9b6daccfa9592a446a920d372bc9 Mon Sep 17 00:00:00 2001 From: Glow <23194902+Nils89@users.noreply.github.com> Date: Tue, 13 Jul 2021 21:41:19 +0200 Subject: [PATCH 020/188] 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 47dd28a9..4ce8b95c 100644 --- a/wowup-electron/src/assets/i18n/de.json +++ b/wowup-electron/src/assets/i18n/de.json @@ -203,7 +203,7 @@ "DESCRIPTION_NOT_FOUND": "Keine Beschreibung gefunden", "DESCRIPTION_TAB": "Beschreibung", "FUNDING_LINK_TITLE": "Unterstütze diesen Autor", - "IMAGES_TAB": "Previews", + "IMAGES_TAB": "Vorschau", "MISSING_DEPENDENCIES": "Fehlende Abhängigkeiten", "NO_CHANGELOG_TEXT": "Kein Änderungsverlauf verfügbar", "VIEW_IN_BROWSER_BUTTON": "Im Browser anzeigen", From d8eae3eb3e8bc3123c0b07a48efec33eaef85dc1 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 13 Jul 2021 20:12:39 -0500 Subject: [PATCH 021/188] Attempt to setup main process proxy data from chrome service --- wowup-electron/app/ipc-events.ts | 39 ++++++++++++++++++++++++++++++++ wowup-electron/app/main.ts | 5 ++++ 2 files changed, 44 insertions(+) diff --git a/wowup-electron/app/ipc-events.ts b/wowup-electron/app/ipc-events.ts index 7c39d0d1..b296e091 100644 --- a/wowup-electron/app/ipc-events.ts +++ b/wowup-electron/app/ipc-events.ts @@ -86,6 +86,12 @@ import { WowUpFolderScanner } from "./wowup-folder-scanner"; let USER_AGENT = ""; let PENDING_OPEN_URLS: string[] = []; +let PROXY_INFO: ProxyInfo | undefined = undefined; + +interface ProxyInfo { + host: string; + port: number; +} interface SymlinkDir { original: fs.Dirent; @@ -132,6 +138,14 @@ export function setPendingOpenUrl(...openUrls: string[]): void { export function initializeIpcHandlers(window: BrowserWindow, userAgent: string): void { USER_AGENT = userAgent; + getProxyInfo(window) + .then((proxyInfo) => { + PROXY_INFO = proxyInfo; + }) + .catch((e) => { + log.error(e); + }); + // Remove the pending URLs once read so they are only able to be gotten once handle(IPC_GET_PENDING_OPEN_URLS, (): string[] => { const urls = PENDING_OPEN_URLS; @@ -460,6 +474,7 @@ export function initializeIpcHandlers(window: BrowserWindow, userAgent: string): headers: { "User-Agent": USER_AGENT, }, + proxy: PROXY_INFO, }); // const totalLength = headers["content-length"]; @@ -491,6 +506,30 @@ export function initializeIpcHandlers(window: BrowserWindow, userAgent: string): } } } + +// From: https://evandontje.com/2020/04/02/automatic-system-proxy-configuration-for-electron-applications/ +async function getProxyInfo(window: BrowserWindow): Promise { + const session = window.webContents.session; + + const proxyUrl = await session.resolveProxy("https://wowup.io"); + // DIRECT means no proxy is configured + if (proxyUrl === "DIRECT") { + log.info("No proxy detected"); + return; + } + + log.info(`Proxy detected: ${proxyUrl}`); + const proxyUrlComponents = proxyUrl.split(":"); + + const host = proxyUrlComponents[0].split(" ")[1]; + const port = parseInt(proxyUrlComponents[1], 10); + + return { + host, + port, + }; +} + // Adapted from https://github.com/thejoshwolfe/yauzl/blob/96f0eb552c560632a754ae0e1701a7edacbda389/examples/unzip.js#L124 function handleZipFile(err: Error, zipfile: yauzl.ZipFile, targetDir: string): Promise { return new Promise((resolve, reject) => { diff --git a/wowup-electron/app/main.ts b/wowup-electron/app/main.ts index b2164930..d0daeb81 100644 --- a/wowup-electron/app/main.ts +++ b/wowup-electron/app/main.ts @@ -63,6 +63,11 @@ process.on("unhandledRejection", (error) => { log.error("unhandledRejection", error); }); +// WINDOWS CERTS +if (platform.isWin) { + require("win-ca"); +} + // VARIABLES const startedAt = Date.now(); const argv = minimist(process.argv.slice(1), { From c1c9a192b9a179d8aadc1ae8fdd37b64430a6634 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 13 Jul 2021 20:42:49 -0500 Subject: [PATCH 022/188] Tweak the WTF explorer --- .../app/components/extra/extra.component.html | 114 +++++++++++------- .../app/components/extra/extra.component.ts | 60 ++++++--- .../src/app/services/wtf/wtf.service.ts | 41 ++++--- 3 files changed, 133 insertions(+), 82 deletions(-) diff --git a/wowup-electron/src/app/components/extra/extra.component.html b/wowup-electron/src/app/components/extra/extra.component.html index e51fd200..93ae3f78 100644 --- a/wowup-electron/src/app/components/extra/extra.component.html +++ b/wowup-electron/src/app/components/extra/extra.component.html @@ -1,55 +1,77 @@
- \ No newline at end of file diff --git a/wowup-electron/src/app/components/extra/extra.component.ts b/wowup-electron/src/app/components/extra/extra.component.ts index a643607a..ed706a0d 100644 --- a/wowup-electron/src/app/components/extra/extra.component.ts +++ b/wowup-electron/src/app/components/extra/extra.component.ts @@ -11,6 +11,7 @@ import { WtfService } from "../../services/wtf/wtf.service"; import { removeExtension } from "../../utils/string.utils"; import { AddonFolder } from "../../models/wowup/addon-folder"; import { WowInstallation } from "../../models/wowup/wow-installation"; +import { WarcraftInstallationService } from "../../services/warcraft/warcraft-installation.service"; interface SavedVariable { name: string; @@ -61,36 +62,55 @@ export class ExtraComponent implements OnInit, OnDestroy { private _active = false; public accountMap = new BehaviorSubject([]); + public loading$ = new BehaviorSubject(false); + public error$ = new BehaviorSubject(""); + public installations: WowInstallation[] = []; + public selectedInstallationId = ""; + + public get selectedInstallationLabel(): string { + return this.installations.find((inst) => inst.id === this.selectedInstallationId)?.label ?? ""; + } public constructor( public electronService: ElectronService, - private _sessionService: SessionService, private _warcraftService: WarcraftService, + private _warcraftInstallationService: WarcraftInstallationService, private _wtfService: WtfService - ) { - // this._sessionService.se - // .pipe( - // filter((newTabIndex) => newTabIndex === this.tabIndex), - // debounceTime(200), - // map(() => { - // this.lazyLoad(); - // }) - // ) - // .subscribe(); - } + ) {} public ngOnInit(): void {} public ngOnDestroy(): void {} - private lazyLoad() { - console.debug("lazyLoad"); - from(this.loadAccounts()).pipe(first()).subscribe(); + public onClientChange(): void { + const installation = this.installations.find((inst) => inst.id === this.selectedInstallationId); + from(this.loadAccounts(installation)) + .pipe(first()) + .subscribe((accounts) => { + this.accountMap.next(accounts); + }); } - private async loadAccounts(): Promise { + private lazyLoad() { + console.debug("lazyLoad"); + this.loading$.next(true); + this.error$.next(""); + this.installations = this._warcraftInstallationService.getWowInstallations(); + this.selectedInstallationId = this.installations[0]?.id ?? ""; + + from(this.loadAccounts(this.installations[0])) + .pipe(first()) + .subscribe((accounts) => { + this.accountMap.next(accounts); + }); + } + + private async loadAccounts(installation: WowInstallation): Promise { try { - const installation = this._sessionService.getSelectedWowInstallation(); + if (!installation) { + return []; + } + const accounts = await this._wtfService.getAccounts(installation); const addonFolders = await this._warcraftService.listAddons(installation); console.log("addonFolders", addonFolders); @@ -111,9 +131,13 @@ export class ExtraComponent implements OnInit, OnDestroy { }); } - this.accountMap.next(accountMap); + return accountMap; } catch (e) { console.error(e); + this.error$.next(e.message); + return []; + } finally { + this.loading$.next(false); } } diff --git a/wowup-electron/src/app/services/wtf/wtf.service.ts b/wowup-electron/src/app/services/wtf/wtf.service.ts index bd7713e1..dcaad2fb 100644 --- a/wowup-electron/src/app/services/wtf/wtf.service.ts +++ b/wowup-electron/src/app/services/wtf/wtf.service.ts @@ -58,27 +58,32 @@ export class WtfService { server: string, character: string ): Promise { - const characterPath = path.join( - this.getAccountsPath(installation), - account, - server, - character, - SAVED_VARIABLES_FOLDER - ); - const entries = await this._fileService.listFiles(characterPath, "*.lua"); + try { + const characterPath = path.join( + this.getAccountsPath(installation), + account, + server, + character, + SAVED_VARIABLES_FOLDER + ); + const entries = await this._fileService.listFiles(characterPath, "*.lua"); - const entryPaths = entries.map((entry) => path.join(characterPath, entry)); - const fileSizes = await this._fileService.statFiles(entryPaths); + const entryPaths = entries.map((entry) => path.join(characterPath, entry)); + const fileSizes = await this._fileService.statFiles(entryPaths); - const fsStats: FileStats[] = Object.keys(fileSizes).map((key) => { - return { - name: path.basename(key), - path: key, - stats: fileSizes[key], - }; - }); + const fsStats: FileStats[] = Object.keys(fileSizes).map((key) => { + return { + name: path.basename(key), + path: key, + stats: fileSizes[key], + }; + }); - return fsStats; + return fsStats; + } catch (e) { + console.error(e); + return []; + } } public async getGlobalVariables(installation: WowInstallation, account: string): Promise { From 80d5062cd87075497ca79c0c7a0e1a3532095ba8 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 13 Jul 2021 20:43:43 -0500 Subject: [PATCH 023/188] Version bump --- wowup-electron/package.json | 2 +- wowup-electron/src/app/services/wowup/patch-notes.service.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index f5a45395..dc4cc269 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.5.0-beta.3", + "version": "2.5.0-beta.4", "description": "World of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index cb13a204..6bea6415 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -36,6 +36,7 @@ const CHANGELOGS: ChangeLog[] = [
  • Tweak the tabs some more
  • Images details tab is now Previews
  • Use a different lightbox library for previews
  • +
  • Expanded system proxy support
  • `, }, From 369607335287ee9e457bc8b78d119e22e5fa6e39 Mon Sep 17 00:00:00 2001 From: Oleksandr <72464426+Medoke@users.noreply.github.com> Date: Wed, 14 Jul 2021 22:24:52 +0300 Subject: [PATCH 024/188] Localization RU --- wowup-electron/src/assets/i18n/ru.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wowup-electron/src/assets/i18n/ru.json b/wowup-electron/src/assets/i18n/ru.json index b693f3e0..9c1a02b8 100644 --- a/wowup-electron/src/assets/i18n/ru.json +++ b/wowup-electron/src/assets/i18n/ru.json @@ -298,7 +298,7 @@ "HOME": { "ABOUT_TAB_TITLE": "О программе", "GET_ADDONS_TAB_TITLE": "Получить модификации", - "GUIDE_TAB_TITLE": "Guide", + "GUIDE_TAB_TITLE": "Руководство (англ.)", "MIGRATING_ADDONS": "Перенос модификаций...", "MY_ADDONS_TAB_TITLE": "Мои модификации", "NEWS_TAB_TITLE": "Новости", @@ -406,8 +406,8 @@ "CURRENT_LANGUAGE_LABEL": "Текущий язык", "CURSE_PROTOCOL_DESCRIPTION": "При загрузке модификаций с сайта CurseForge, WowUp будет брать установку на себя.", "CURSE_PROTOCOL_LABEL": "Обрабатывать ссылки на установку с CurseForge", - "ENABLE_APP_BADGE_DESCRIPTION": "Show a badge on the app icon with the number of addons with available updates.", - "ENABLE_APP_BADGE_LABEL": "Enable app badge notification", + "ENABLE_APP_BADGE_DESCRIPTION": "Отображать в иконке приложения значок количества модификаций нуждающихся в обновлении.", + "ENABLE_APP_BADGE_LABEL": "Включить значок уведомления на приложении", "ENABLE_SYSTEM_NOTIFICATIONS_DESCRIPTION": "Включить различные окна системных уведомлений, такие как автоматически обновлённые модификации.", "ENABLE_SYSTEM_NOTIFICATIONS_LABEL": "Включить системные уведомления", "MINIMIZE_ON_CLOSE_DESCRIPTION_MAC": "При закрытии окна WowUp сворачивается в меню статуса.", From 74b272f3ad4a47fdf8eaecdfd0ae3aea5554ed31 Mon Sep 17 00:00:00 2001 From: jliddev Date: Wed, 14 Jul 2021 16:53:48 -0500 Subject: [PATCH 025/188] Make the wtf explorer more robust --- wowup-electron/app/file.utils.ts | 36 +++++- wowup-electron/app/ipc-events.ts | 14 ++- wowup-electron/package-lock.json | 16 ++- wowup-electron/package.json | 1 + .../app/components/extra/extra.component.html | 37 +++++- .../app/components/extra/extra.component.scss | 7 ++ .../app/components/extra/extra.component.ts | 94 +++++++++++--- .../src/app/pages/home/home.module.ts | 8 +- .../src/app/pipes/size-display.pipe.ts | 13 +- .../src/app/services/files/file.service.ts | 12 +- .../src/app/services/icons/icon.service.ts | 2 + .../src/app/services/wtf/wtf.service.ts | 35 +++++- wowup-electron/src/app/utils/number.utils.ts | 14 +++ wowup-electron/src/common/constants.ts | 2 + .../src/common/models/ipc-events.ts | 8 ++ wowup-electron/src/common/wowup.d.ts | 4 +- wowup-electron/src/custom-theme.scss | 118 ++++++++++++++++++ wowup-electron/src/styles.scss | 1 + 18 files changed, 381 insertions(+), 41 deletions(-) diff --git a/wowup-electron/app/file.utils.ts b/wowup-electron/app/file.utils.ts index 085d07d6..704a9b27 100644 --- a/wowup-electron/app/file.utils.ts +++ b/wowup-electron/app/file.utils.ts @@ -1,6 +1,7 @@ import * as fs from "fs-extra"; import * as path from "path"; -import { max } from "lodash"; +import { max, sumBy } from "lodash"; +import { TreeNode } from "../src/common/models/ipc-events"; export async function readDirRecursive(sourcePath: string): Promise { const dirFiles: string[] = []; @@ -19,6 +20,39 @@ export async function readDirRecursive(sourcePath: string): Promise { return dirFiles; } +export async function getDirTree(sourcePath: string): Promise { + const files = await fs.readdir(sourcePath, { withFileTypes: true }); + + const node: TreeNode = { + name: path.basename(sourcePath), + path: sourcePath, + children: [], + isDirectory: true, + size: 0, + }; + + for (const file of files) { + const filePath = path.join(sourcePath, file.name); + if (file.isDirectory()) { + const nestedNode = await getDirTree(filePath); + node.children.push(nestedNode); + node.size = sumBy(node.children, (n) => n.size); + } else { + const stats = await fs.stat(filePath); + node.size += stats.size; + node.children.push({ + name: file.name, + path: filePath, + children: [], + isDirectory: false, + size: stats.size, + }); + } + } + + return node; +} + export async function getLastModifiedFileDate(sourcePath: string): Promise { const dirFiles = await readDirRecursive(sourcePath); const dates: number[] = []; diff --git a/wowup-electron/app/ipc-events.ts b/wowup-electron/app/ipc-events.ts index b296e091..0304f9ea 100644 --- a/wowup-electron/app/ipc-events.ts +++ b/wowup-electron/app/ipc-events.ts @@ -66,6 +66,8 @@ import { IPC_WINDOW_LEAVE_FULLSCREEN, IPC_WOWUP_GET_SCAN_RESULTS, IPC_WRITE_FILE_CHANNEL, + IPC_LIST_DIR_RECURSIVE, + IPC_GET_DIRECTORY_TREE, } from "../src/common/constants"; import { CurseFolderScanResult } from "../src/common/curse/curse-folder-scan-result"; import { Addon } from "../src/common/entities/addon"; @@ -73,13 +75,13 @@ import { CopyFileRequest } from "../src/common/models/copy-file-request"; import { DownloadRequest } from "../src/common/models/download-request"; import { DownloadStatus } from "../src/common/models/download-status"; import { DownloadStatusType } from "../src/common/models/download-status-type"; -import { FsDirent, FsStats } from "../src/common/models/ipc-events"; +import { FsDirent, FsStats, TreeNode } from "../src/common/models/ipc-events"; import { UnzipRequest } from "../src/common/models/unzip-request"; import { RendererChannels } from "../src/common/wowup"; import { MenuConfig, SystemTrayConfig, WowUpScanResult } from "../src/common/wowup/models"; import { createAppMenu } from "./app-menu"; import { CurseFolderScanner } from "./curse-folder-scanner"; -import { getLastModifiedFileDate } from "./file.utils"; +import { getDirTree, getLastModifiedFileDate, readDirRecursive } from "./file.utils"; import { addonStore } from "./stores"; import { createTray, restoreWindow } from "./system-tray"; import { WowUpFolderScanner } from "./wowup-folder-scanner"; @@ -403,6 +405,14 @@ export function initializeIpcHandlers(window: BrowserWindow, userAgent: string): return getLastModifiedFileDate(dirPath); }); + handle(IPC_LIST_DIR_RECURSIVE, (evt, dirPath: string): Promise => { + return readDirRecursive(dirPath); + }); + + handle(IPC_GET_DIRECTORY_TREE, (evt, dirPath: string): Promise => { + return getDirTree(dirPath); + }); + handle(IPC_MINIMIZE_WINDOW, () => { if (window?.minimizable) { window.minimize(); diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index f8c98915..9cb7142d 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "wowup", - "version": "2.5.0-beta.2", + "version": "2.5.0-beta.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3820,6 +3820,15 @@ "@bbob/preset": "^2.7.0" } }, + "@circlon/angular-tree-component": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@circlon/angular-tree-component/-/angular-tree-component-11.0.4.tgz", + "integrity": "sha512-Ck86mG6Z9eWG03RiOACDzrCjuzEDXU8rcEDi0aw0+Ku62x6ZY2mx8G0VX3CLEkS1BAXM2ef6luOIcoSKAKtDaA==", + "requires": { + "mobx": "~4.14.1", + "tslib": "^2.0.0" + } + }, "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", @@ -14357,6 +14366,11 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "mobx": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-4.14.1.tgz", + "integrity": "sha512-Oyg7Sr7r78b+QPYLufJyUmxTWcqeQ96S1nmtyur3QL8SeI6e0TqcKKcxbG+sVJLWANhHQkBW/mDmgG5DDC4fdw==" + }, "mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", diff --git a/wowup-electron/package.json b/wowup-electron/package.json index dc4cc269..27a76b1a 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -124,6 +124,7 @@ "@bbob/core": "2.7.0", "@bbob/html": "2.7.0", "@bbob/preset-html5": "2.7.0", + "@circlon/angular-tree-component": "11.0.4", "@fortawesome/fontawesome-svg-core": "1.2.35", "@fortawesome/free-brands-svg-icons": "5.15.3", "@fortawesome/free-regular-svg-icons": "5.15.3", diff --git a/wowup-electron/src/app/components/extra/extra.component.html b/wowup-electron/src/app/components/extra/extra.component.html index 93ae3f78..732901cc 100644 --- a/wowup-electron/src/app/components/extra/extra.component.html +++ b/wowup-electron/src/app/components/extra/extra.component.html @@ -1,7 +1,7 @@
    - diff --git a/wowup-electron/src/app/services/electron/electron.service.ts b/wowup-electron/src/app/services/electron/electron.service.ts index f8d12275..0b8480ef 100644 --- a/wowup-electron/src/app/services/electron/electron.service.ts +++ b/wowup-electron/src/app/services/electron/electron.service.ts @@ -56,7 +56,7 @@ export class ElectronService { private readonly _windowMaximizedSrc = new BehaviorSubject(false); private readonly _windowMinimizedSrc = new BehaviorSubject(false); private readonly _powerMonitorSrc = new BehaviorSubject(""); - private readonly _customProtocolSrc = new BehaviorSubject(""); + public readonly _customProtocolSrc = new BehaviorSubject(""); private readonly _appUpdateSrc = new ReplaySubject(); private readonly _windowResumedSrc = new Subject(); diff --git a/wowup-electron/src/app/services/icons/icon.service.ts b/wowup-electron/src/app/services/icons/icon.service.ts index 91117feb..e6594307 100644 --- a/wowup-electron/src/app/services/icons/icon.service.ts +++ b/wowup-electron/src/app/services/icons/icon.service.ts @@ -28,6 +28,7 @@ import { faAngleUp, faAngleDown, faChevronRight, + faUserCircle, } from "@fortawesome/free-solid-svg-icons"; import { faQuestionCircle, faClock } from "@fortawesome/free-regular-svg-icons"; import { faDiscord, faGithub, faPatreon } from "@fortawesome/free-brands-svg-icons"; @@ -68,6 +69,7 @@ export class IconService { this.addSvg(faAngleUp); this.addSvg(faAngleDown); this.addSvg(faChevronRight); + this.addSvg(faUserCircle); } private addSvg(icon: IconDefinition): void { diff --git a/wowup-electron/src/app/services/session/session.service.ts b/wowup-electron/src/app/services/session/session.service.ts index 1acd2672..0ff4e923 100644 --- a/wowup-electron/src/app/services/session/session.service.ts +++ b/wowup-electron/src/app/services/session/session.service.ts @@ -1,13 +1,21 @@ import * as _ from "lodash"; -import { BehaviorSubject, Subject } from "rxjs"; +import { BehaviorSubject, from, Subject } from "rxjs"; import { Injectable } from "@angular/core"; -import { SELECTED_DETAILS_TAB_KEY, TAB_INDEX_SETTINGS } from "../../../common/constants"; +import { + APP_PROTOCOL_NAME, + SELECTED_DETAILS_TAB_KEY, + STORAGE_WOWUP_AUTH_TOKEN, + TAB_INDEX_SETTINGS, +} from "../../../common/constants"; import { WowInstallation } from "../../models/wowup/wow-installation"; import { PreferenceStorageService } from "../storage/preference-storage.service"; import { WarcraftInstallationService } from "../warcraft/warcraft-installation.service"; import { ColumnState } from "../../models/wowup/column-state"; +import { ElectronService } from "../electron/electron.service"; +import { filter, map, switchMap } from "rxjs/operators"; +import { getProtocol } from "../../utils/string.utils"; @Injectable({ providedIn: "root", @@ -21,6 +29,7 @@ export class SessionService { private readonly _addonsChangedSrc = new Subject(); private readonly _myAddonsColumnsSrc = new BehaviorSubject([]); private readonly _targetFileInstallCompleteSrc = new Subject(); + private readonly _wowUpAuthTokenSrc = new BehaviorSubject(""); private readonly _getAddonsColumnsSrc = new Subject(); @@ -36,8 +45,12 @@ export class SessionService { public readonly getAddonsHiddenColumns$ = this._getAddonsColumnsSrc.asObservable(); public readonly targetFileInstallComplete$ = this._targetFileInstallCompleteSrc.asObservable(); public readonly editingWowInstallationId$ = new BehaviorSubject(""); + public readonly wowUpAuthToken$ = this._wowUpAuthTokenSrc.asObservable(); + + public readonly wowUpAuthenticated$ = this.wowUpAuthToken$.pipe(map((token) => !!token && token.length > 10)); public constructor( + private _electronService: ElectronService, private _warcraftInstallationService: WarcraftInstallationService, private _preferenceStorageService: PreferenceStorageService ) { @@ -47,6 +60,57 @@ export class SessionService { this._warcraftInstallationService.wowInstallations$.subscribe((installations) => this.onWowInstallationsChange(installations) ); + + this._electronService.customProtocol$ + .pipe( + filter((protocol) => !!protocol), + map((protocol) => this.handleLoginProtocol(protocol)) + ) + .subscribe(); + + this.loadAuthToken(); + } + + /** + * Handle the post login protocol message + * wowup://login/desktop/#{token} + */ + private handleLoginProtocol = (protocol: string): void => { + const protocolName = getProtocol(protocol); + if (protocolName !== APP_PROTOCOL_NAME) { + return; + } + + const parts = protocol.split("/"); + if (parts[2] !== "login" || parts[3] !== "desktop") { + return; + } + + const token = parts[4]; + if (typeof token !== "string" || token.length < 10) { + console.warn("Invalid auth token", protocol); + return; + } + + console.debug("GOT WOWUP PROTOCOL", protocol); + window.localStorage.setItem(STORAGE_WOWUP_AUTH_TOKEN, token); + this._wowUpAuthTokenSrc.next(token); + }; + + private loadAuthToken(): void { + const storedToken = window.localStorage.getItem(STORAGE_WOWUP_AUTH_TOKEN); + if (storedToken) { + this._wowUpAuthTokenSrc.next(storedToken); + } + } + + public clearWowUpAuthToken(): void { + window.localStorage.removeItem(STORAGE_WOWUP_AUTH_TOKEN); + this._wowUpAuthTokenSrc.next(""); + } + + public isAuthenticated(): boolean { + return false; } public notifyTargetFileInstallComplete(): void { diff --git a/wowup-electron/src/app/services/wowup/wowup.service.ts b/wowup-electron/src/app/services/wowup/wowup.service.ts index c7527a65..592546d0 100644 --- a/wowup-electron/src/app/services/wowup/wowup.service.ts +++ b/wowup-electron/src/app/services/wowup/wowup.service.ts @@ -85,6 +85,10 @@ export class WowUpService { .catch((e) => console.error(e)); } + public login(): void { + this.openExternalLink("http://localhost:3000/dev/login?client=desktop").catch((e) => console.error(e)); + } + public async getApplicationVersion(): Promise { const appVersion = await this._electronService.invoke(IPC_GET_APP_VERSION); return `${appVersion}${this._electronService.isPortable ? " (portable)" : ""}`; diff --git a/wowup-electron/src/assets/i18n/en.json b/wowup-electron/src/assets/i18n/en.json index 1ffdf08e..56719021 100644 --- a/wowup-electron/src/assets/i18n/en.json +++ b/wowup-electron/src/assets/i18n/en.json @@ -302,7 +302,8 @@ "MIGRATING_ADDONS": "Migrating addons...", "MY_ADDONS_TAB_TITLE": "My Addons", "NEWS_TAB_TITLE": "News", - "OPTIONS_TAB_TITLE": "Options" + "OPTIONS_TAB_TITLE": "Options", + "ACCOUNT_TAB_TITLE": "Account" }, "MY_ADDONS": { "ADDON_CONTEXT_MENU": { @@ -455,7 +456,8 @@ "ADDONS": "Addons", "APPLICATION": "Application", "CLIENTS": "Clients", - "DEBUG": "Debug" + "DEBUG": "Debug", + "ABOUT": "About" }, "WOW": { "ADD_CLIENT_BUTTON": "Add New", diff --git a/wowup-electron/src/common/constants.ts b/wowup-electron/src/common/constants.ts index dbb79356..2c37cd78 100644 --- a/wowup-electron/src/common/constants.ts +++ b/wowup-electron/src/common/constants.ts @@ -95,6 +95,7 @@ export const IPC_STORE_SET_OBJECT = "store-set-object"; // STORES export const ADDON_STORE_NAME = "addons"; export const PREFERENCE_STORE_NAME = "preferences"; +export const STORAGE_WOWUP_AUTH_TOKEN = "wowup-auth-token"; // PREFERENCES export const ENABLE_SYSTEM_NOTIFICATIONS_PREFERENCE_KEY = "enable_system_notifications"; From 2a892fb139829bb65f4c0acde9456d5547c5d6d4 Mon Sep 17 00:00:00 2001 From: jliddev Date: Tue, 24 Aug 2021 12:48:44 -0500 Subject: [PATCH 057/188] Login feels decent --- wowup-electron/app/ipc-events.ts | 1 - .../components/footer/footer.component.html | 12 +-- .../app/components/footer/footer.component.ts | 8 ++ .../horizontal-tabs.component.html | 11 +++ .../horizontal-tabs.component.ts | 13 +++- .../src/app/models/wowup-api/api-responses.ts | 5 ++ .../account-page/account-page.component.html | 75 ++++++++++++++----- .../account-page/account-page.component.scss | 34 +++++++++ .../account-page/account-page.component.ts | 20 +++-- .../src/app/services/addons/addon.service.ts | 1 - .../app/services/network/network.service.ts | 12 ++- .../app/services/session/session.service.ts | 37 ++++++++- .../services/wowup-api/wowup-api.service.ts | 11 +++ .../src/app/services/wowup/wowup.service.ts | 3 +- .../src/environments/environment.dev.ts | 1 + .../src/environments/environment.prod.ts | 6 +- .../src/environments/environment.ts | 4 +- .../src/environments/environment.web.ts | 4 +- 18 files changed, 213 insertions(+), 45 deletions(-) diff --git a/wowup-electron/app/ipc-events.ts b/wowup-electron/app/ipc-events.ts index a7d0efa7..6e750bac 100644 --- a/wowup-electron/app/ipc-events.ts +++ b/wowup-electron/app/ipc-events.ts @@ -19,7 +19,6 @@ import * as pLimit from "p-limit"; import * as path from "path"; import { Transform } from "stream"; import * as yauzl from "yauzl"; -import { nanoid } from "nanoid"; import * as fs from "fs"; import { diff --git a/wowup-electron/src/app/components/footer/footer.component.html b/wowup-electron/src/app/components/footer/footer.component.html index e79c8ada..7f9d405e 100644 --- a/wowup-electron/src/app/components/footer/footer.component.html +++ b/wowup-electron/src/app/components/footer/footer.component.html @@ -7,13 +7,13 @@ matTooltip="{{ 'PAGES.MY_ADDONS.PAGE_CONTEXT_FOOTER.JOIN_DISCORD' | translate }}"> -
    -
    Login
    -
    -
    - +

    {{ sessionService.statusText$ | async }}

    {{ sessionService.pageContextText$ | async }}

    diff --git a/wowup-electron/src/app/components/footer/footer.component.ts b/wowup-electron/src/app/components/footer/footer.component.ts index 662837fc..7b597509 100644 --- a/wowup-electron/src/app/components/footer/footer.component.ts +++ b/wowup-electron/src/app/components/footer/footer.component.ts @@ -9,6 +9,7 @@ import { ConfirmDialogComponent } from "../confirm-dialog/confirm-dialog.compone import { combineLatest, from, Observable, of } from "rxjs"; import { catchError, map, switchMap } from "rxjs/operators"; import { AppUpdateState } from "../../../common/wowup/models"; +import { TAB_INDEX_ABOUT } from "../../../common/constants"; @Component({ selector: "app-footer", @@ -26,6 +27,9 @@ export class FooterComponent implements OnInit { public appUpdateState = AppUpdateState; public appUpdateState$: Observable = this.electronService.appUpdate$.pipe(map((evt) => evt.state)); + public accountDisplayName$: Observable = this.sessionService.wowUpAccount$.pipe( + map((account) => account?.displayName ?? "") + ); public appUpdateProgress$: Observable = combineLatest([ of(0), @@ -57,6 +61,10 @@ export class FooterComponent implements OnInit { this.wowUpService.checkForAppUpdate(); } + public onClickAccount(): void { + this.sessionService.selectedHomeTab = TAB_INDEX_ABOUT; + } + private portableUpdate() { const dialogRef = this._dialog.open(ConfirmDialogComponent, { data: { diff --git a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html index 2fa1aaaa..d7c4abdc 100644 --- a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html +++ b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.html @@ -28,6 +28,17 @@ matTooltip="{{ 'PAGES.MY_ADDONS.PAGE_CONTEXT_FOOTER.JOIN_DISCORD' | translate }}"> --> +
    + + + + +
    {{ 'PAGES.HOME.ACCOUNT_TAB_TITLE' | translate }}
    +
    {{accountDisplayName$ | async}}
    +
    +
    diff --git a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts index abdaac30..e971f098 100644 --- a/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts +++ b/wowup-electron/src/app/components/horizontal-tabs/horizontal-tabs.component.ts @@ -30,6 +30,13 @@ interface Tab { styleUrls: ["./horizontal-tabs.component.scss"], }) export class HorizontalTabsComponent implements OnInit { + public TAB_INDEX_ACCOUNT = TAB_INDEX_ABOUT; + + public isAccountSelected$ = this.sessionService.selectedHomeTab$.pipe(map((result) => result === TAB_INDEX_ABOUT)); + public accountDisplayName$: Observable = this.sessionService.wowUpAccount$.pipe( + map((account) => account?.displayName ?? "") + ); + private myAddonsTab: Tab = { titleKey: "PAGES.HOME.MY_ADDONS_TAB_TITLE", tooltipKey: "PAGES.HOME.MY_ADDONS_TAB_TITLE", @@ -92,7 +99,7 @@ export class HorizontalTabsComponent implements OnInit { public tabsTop: Tab[] = [this.myAddonsTab, this.getAddonsTab, this.newsTab]; - public tabsBottom: Tab[] = [this.aboutTab, this.settingsTab]; + public tabsBottom: Tab[] = [this.settingsTab]; public constructor( public electronService: ElectronService, @@ -101,4 +108,8 @@ export class HorizontalTabsComponent implements OnInit { ) {} public ngOnInit(): void {} + + public onClickTab(tabIndex: number): void { + this.sessionService.selectedHomeTab = tabIndex; + } } diff --git a/wowup-electron/src/app/models/wowup-api/api-responses.ts b/wowup-electron/src/app/models/wowup-api/api-responses.ts index 612436c4..30d67093 100644 --- a/wowup-electron/src/app/models/wowup-api/api-responses.ts +++ b/wowup-electron/src/app/models/wowup-api/api-responses.ts @@ -28,3 +28,8 @@ export interface WowUpSearchAddonsResponse { addons: WowUpAddonRepresentation[]; count: number; } + +export interface WowUpGetAccountResponse { + displayName: string; + patreonTier: string; +} diff --git a/wowup-electron/src/app/pages/account-page/account-page.component.html b/wowup-electron/src/app/pages/account-page/account-page.component.html index eec7920d..e73a51ae 100644 --- a/wowup-electron/src/app/pages/account-page/account-page.component.html +++ b/wowup-electron/src/app/pages/account-page/account-page.component.html @@ -3,33 +3,70 @@ windows: electronService.isWin, linux: electronService.isLinux }"> -
    + +