From cdae7709fb48fb2386f4181e3537f309a6a73f6f Mon Sep 17 00:00:00 2001 From: Kyusung4698 Date: Fri, 27 Mar 2020 12:15:19 +0100 Subject: [PATCH 1/2] - fix an error occured while fetching poe.ninja (#468) - fix an error occured while fetching poe.ninja (#468) - fix poe overlay does not recognize if poe is no longer active (#485, #486) --- CHANGELOG.md | 5 + hook.ts | 4 + package.json | 3 +- src/app/app.module.ts | 22 +++- .../service/currency-overview-http.service.ts | 48 +++++-- .../service/item-overview-http.service.ts | 50 ++++++-- .../evaluate-exchange-rate.component.html | 118 +++++++++--------- 7 files changed, 169 insertions(+), 81 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50b8c624..6d853395 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.6.15 (2020-03-27) + +- fix an error occured while fetching poe.ninja (#468) +- fix poe overlay does not recognize if poe is no longer active (#485, #486) + ## 0.6.14 (2020-03-26) - add nonunique rarity support (#477) diff --git a/hook.ts b/hook.ts index 947db10e..112a5e44 100644 --- a/hook.ts +++ b/hook.ts @@ -70,7 +70,11 @@ function checkActive(): void { bounds = addon.getWindowBounds(activeWindow.id); } } + } else { + active = false; } + } else { + active = false; } if (orgActive !== active || diff --git a/package.json b/package.json index 480e1c84..374cf0a3 100644 --- a/package.json +++ b/package.json @@ -107,8 +107,7 @@ "linux" ], "arches": [ - "x64", - "ia32" + "x64" ] } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index f28bfde9..145074cc 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,4 +1,5 @@ -import { NgModule } from '@angular/core'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { Injectable, NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { BookmarkModule } from '@modules/bookmark/bookmark.module'; import { CommandModule } from '@modules/command/command.module'; @@ -6,12 +7,27 @@ import { EvaluateModule } from '@modules/evaluate/evaluate.module'; import { MapModule } from '@modules/map/map.module'; import { MiscModule } from '@modules/misc/misc.module'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { Observable } from 'rxjs'; import { AppTranslationsLoader } from './app-translations.loader'; import { AppComponent } from './app.component'; import { LayoutModule } from './layout/layout.module'; import { OverlayComponent } from './layout/page/overlay/overlay.component'; import { UserSettingsComponent } from './layout/page/user-settings/user-settings.component'; +@Injectable() +export class CacheInterceptor implements HttpInterceptor { + public intercept(req: HttpRequest, next: HttpHandler): Observable> { + const httpRequest = req.clone({ + setHeaders: { + 'Cache-Control': 'no-cache', + Pragma: 'no-cache', + Expires: 'Sat, 01 Jan 2000 00:00:00 GMT' + } + }); + return next.handle(httpRequest); + } +} + const routes: Routes = [ { path: 'user-settings', @@ -45,7 +61,9 @@ const routes: Routes = [ MiscModule, BookmarkModule ], - providers: [], + providers: [ + { provide: HTTP_INTERCEPTORS, useClass: CacheInterceptor, multi: true } + ], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/src/app/data/poe-ninja/service/currency-overview-http.service.ts b/src/app/data/poe-ninja/service/currency-overview-http.service.ts index 2496ff00..12ffa035 100644 --- a/src/app/data/poe-ninja/service/currency-overview-http.service.ts +++ b/src/app/data/poe-ninja/service/currency-overview-http.service.ts @@ -1,8 +1,9 @@ -import { HttpClient, HttpParams } from '@angular/common/http'; +import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { BrowserService, LoggerService } from '@app/service'; import { environment } from '@env/environment'; -import { Observable } from 'rxjs'; -import { map, retry } from 'rxjs/operators'; +import { Observable, of, throwError } from 'rxjs'; +import { delay, flatMap, retryWhen } from 'rxjs/operators'; import { CurrencyOverviewResponse } from '../schema/currency-overview'; export enum CurrencyOverviewType { @@ -15,13 +16,19 @@ const PATH_TYPE_MAP = { [CurrencyOverviewType.Fragment]: 'fragments', }; +const RETRY_COUNT = 3; +const RETRY_DELAY = 100; + @Injectable({ providedIn: 'root' }) export class CurrencyOverviewHttpService { private readonly apiUrl: string; - constructor(private readonly httpClient: HttpClient) { + constructor( + private readonly httpClient: HttpClient, + private readonly browser: BrowserService, + private readonly logger: LoggerService) { this.apiUrl = `${environment.poeNinja.baseUrl}/api/data/currencyoverview`; } @@ -29,19 +36,42 @@ export class CurrencyOverviewHttpService { const params = new HttpParams({ fromObject: { league: leagueId, - type + type, + language: 'en', + t: `${Date.now()}` } }); return this.httpClient.get(this.apiUrl, { params }).pipe( - retry(3), - map(result => { - return { - ...result, + retryWhen(errors => errors.pipe( + flatMap((response, count) => this.handleError(this.apiUrl, response, count)) + )), + flatMap(response => { + if (!response.lines) { + this.logger.warn(`Got empty result from ${this.apiUrl} with ${leagueId} and ${type}.`, response); + return throwError(`Got empty result from ${this.apiUrl} with ${leagueId} and ${type}.`) + } + + const result: CurrencyOverviewResponse = { + ...response, url: `${environment.poeNinja.baseUrl}/challenge/${PATH_TYPE_MAP[type]}` } + return of(result); }) ); } + + private handleError(url: string, response: HttpErrorResponse, count: number): Observable { + if (count >= RETRY_COUNT) { + return throwError(response); + } + + switch (response.status) { + case 403: + return this.browser.retrieve(url); + default: + return of(null).pipe(delay(RETRY_DELAY)); + } + } } diff --git a/src/app/data/poe-ninja/service/item-overview-http.service.ts b/src/app/data/poe-ninja/service/item-overview-http.service.ts index bda17890..a79b50a4 100644 --- a/src/app/data/poe-ninja/service/item-overview-http.service.ts +++ b/src/app/data/poe-ninja/service/item-overview-http.service.ts @@ -1,8 +1,9 @@ -import { HttpClient, HttpParams } from '@angular/common/http'; +import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { BrowserService, LoggerService } from '@app/service'; import { environment } from '@env/environment'; -import { Observable } from 'rxjs'; -import { map, retry } from 'rxjs/operators'; +import { Observable, of, throwError } from 'rxjs'; +import { delay, flatMap, retryWhen } from 'rxjs/operators'; import { ItemOverviewResponse } from '../schema/item-overview'; export enum ItemOverviewType { @@ -43,13 +44,19 @@ const PATH_TYPE_MAP = { [ItemOverviewType.UniqueMap]: 'unique-maps', }; +const RETRY_COUNT = 3; +const RETRY_DELAY = 100; + @Injectable({ providedIn: 'root' }) export class ItemOverviewHttpService { private readonly apiUrl: string; - constructor(private readonly httpClient: HttpClient) { + constructor( + private readonly httpClient: HttpClient, + private readonly browser: BrowserService, + private readonly logger: LoggerService) { this.apiUrl = `${environment.poeNinja.baseUrl}/api/data/itemoverview`; } @@ -57,19 +64,42 @@ export class ItemOverviewHttpService { const params = new HttpParams({ fromObject: { league: leagueId, - type + type, + language: 'en', + t: `${Date.now()}` } }); return this.httpClient.get(this.apiUrl, { params }).pipe( - retry(3), - map(result => { - return { - ...result, - url: `${environment.poeNinja.baseUrl}/challenge/${PATH_TYPE_MAP[type]}` + retryWhen(errors => errors.pipe( + flatMap((response, count) => this.handleError(this.apiUrl, response, count)) + )), + flatMap(response => { + if (!response.lines) { + this.logger.warn(`Got empty result from ${this.apiUrl} with ${leagueId} and ${type}.`, response); + return throwError(`Got empty result from ${this.apiUrl} with ${leagueId} and ${type}.`) } + + const result: ItemOverviewResponse = { + ...response, + url: `${environment.poeNinja.baseUrl}/challenge/${PATH_TYPE_MAP[type]}` + }; + return of(result); }) ); } + + private handleError(url: string, response: HttpErrorResponse, count: number): Observable { + if (count >= RETRY_COUNT) { + return throwError(response); + } + + switch (response.status) { + case 403: + return this.browser.retrieve(url); + default: + return of(null).pipe(delay(RETRY_DELAY)); + } + } } diff --git a/src/app/modules/evaluate/component/evaluate-exchange-rate/evaluate-exchange-rate.component.html b/src/app/modules/evaluate/component/evaluate-exchange-rate/evaluate-exchange-rate.component.html index 50c08ff3..490fa2ad 100644 --- a/src/app/modules/evaluate/component/evaluate-exchange-rate/evaluate-exchange-rate.component.html +++ b/src/app/modules/evaluate/component/evaluate-exchange-rate/evaluate-exchange-rate.component.html @@ -1,70 +1,72 @@ - -
-
-
-
- - - {{result.rate.factor}}  - - compare_arrows - - - - {{result.rate.amount | number:'1.2-2'}}  - - {{result.rate.amount * result.rate.factor | number:'1.2-2'}}  - - - + + +
+
+
+
+ + + {{result.rate.factor}}  + + compare_arrows + + + + {{result.rate.amount | number:'1.2-2'}}  + + {{result.rate.amount * result.rate.factor | number:'1.2-2'}}  + + + +
+ +
+ + {{result.rate.inverseAmount | number:'1.2-2'}}  + + compare_arrows + + + + + + +
+
- -
- - {{result.rate.inverseAmount | number:'1.2-2'}}  - - compare_arrows - - - +
+
+
+ + trending_down + trending_flat + trending_up + {{result.rate.change}}% - - + {{'evaluate.days' | translate}} +
+
+ +
- -
-
-
-
- - trending_down - trending_flat - trending_up - {{result.rate.change}}% - - {{'evaluate.days' | translate}} -
-
- -
-
+ + + {{'evaluate.not-found' | translate}} + - - {{'evaluate.not-found' | translate}} - - +
{{'evaluate.error' | translate}}
-
+
{{'evaluate.loading' | translate}}
From 2106c28d580af0f737b713f32aa4dfc5540f4970 Mon Sep 17 00:00:00 2001 From: Kyusung4698 Date: Fri, 27 Mar 2020 13:12:26 +0100 Subject: [PATCH 2/2] - 0.6.15 --- README.md | 8 ++++---- package.json | 2 +- .../evaluate-search-table.component.html | 11 +++++++---- .../evaluate-search-table.component.scss | 2 +- src/app/modules/evaluate/evaluate.module.ts | 6 ++++-- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 0c837ee7..dc40e69b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![GitHub Release Date](https://img.shields.io/github/release-date/Kyusung4698/PoE-Overlay) Become a Patron -# PoE Overlay 0.6.14 +# PoE Overlay 0.6.15 An Overlay for Path of Exile. The ***core aspect*** is to blend in with the game. Built with Electron and Angular. @@ -73,11 +73,11 @@ These instructions will set you up to run and enjoy the overlay. #### Installing 1. Head over to [Releases](https://github.com/Kyusung4698/PoE-Overlay/releases) and download one of the following files - 1. `poe-overlay-Setup-0.6.14.exe` to install locally. This supports auto update/ auto launch. - 2. `poe-overlay-0.6.14.exe` portable version. This does not support auto update/ auto launch. + 1. `poe-overlay-Setup-0.6.15.exe` to install locally. This supports auto update/ auto launch. + 2. `poe-overlay-0.6.15.exe` portable version. This does not support auto update/ auto launch. 2. Run either of your downloaded file 3. Start Path of Exile -4. Wait until you can see `PoE Overlay 0.6.14` in the bottom left corner +4. Wait until you can see `PoE Overlay 0.6.15` in the bottom left corner 5. Hit `f7` and set `Language` and `League` to meet your game settings #### Shortcuts diff --git a/package.json b/package.json index 374cf0a3..2d9e7093 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "poe-overlay", - "version": "0.6.14", + "version": "0.6.15", "private": true, "description": "A Overlay for Path of Exile. Built with Electron and Angular.", "main": "main.js", diff --git a/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.html b/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.html index fc40546d..1e56e5b3 100644 --- a/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.html +++ b/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.html @@ -2,6 +2,7 @@ + @@ -14,14 +15,16 @@ (click)="onRowClick(row)"> - + diff --git a/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.scss b/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.scss index ee732b9f..d843ca99 100644 --- a/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.scss +++ b/src/app/modules/evaluate/component/evaluate-search-table/evaluate-search-table.component.scss @@ -17,7 +17,7 @@ table { } .amount { - min-width: 75px; + min-width: 70px; .value { color: $light-grey; diff --git a/src/app/modules/evaluate/evaluate.module.ts b/src/app/modules/evaluate/evaluate.module.ts index 1d72c050..4bbeea24 100644 --- a/src/app/modules/evaluate/evaluate.module.ts +++ b/src/app/modules/evaluate/evaluate.module.ts @@ -49,6 +49,8 @@ export class EvaluateModule implements FeatureModule { 'pseudo.pseudo_total_strength': true, 'pseudo.pseudo_total_life': true, 'pseudo.pseudo_total_energy_shield': true, + 'pseudo.pseudo_increased_energy_shield': true, + 'pseduo.pseudo_increased_movement_speed': true, 'explicit.stat_1479533453': true, 'enchant.stat_290368246': true }, @@ -56,8 +58,8 @@ export class EvaluateModule implements FeatureModule { evaluateQueryIndexedRange: ItemSearchIndexed.UpTo3DaysAgo, evaluateQueryOnline: true, evaluateQueryDebounceTime: 10, - evaluateModifierMinRange: 0, - evaluateModifierMaxRange: 10, + evaluateModifierMinRange: 10, + evaluateModifierMaxRange: 50, evaluateKeybinding: 'CmdOrCtrl + D', evaluateTranslatedItemLanguage: Language.English, evaluateTranslatedKeybinding: 'CmdOrCtrl + T',
{{'evaluate.value' | translate}} {{'evaluate.seller' | translate}} {{'evaluate.age' | translate}}
{{row.amount}} - -  x {{row.count}} - + + +  x {{row.count}} + + {{row.seller}} {{row.age}}