From 1cd453b3824fa39a028c8bf4f0406b996fd605a2 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 26 Mar 2020 01:44:09 +0100 Subject: [PATCH] fix armory --- .../pages/armory/armory.component.ts | 9 +- .../pages/character/character.component.ts | 111 +++++++++--------- 2 files changed, 58 insertions(+), 62 deletions(-) diff --git a/src/frontend/src/app/frontcraft/pages/armory/armory.component.ts b/src/frontend/src/app/frontcraft/pages/armory/armory.component.ts index 709a132..7ec541b 100644 --- a/src/frontend/src/app/frontcraft/pages/armory/armory.component.ts +++ b/src/frontend/src/app/frontcraft/pages/armory/armory.component.ts @@ -27,13 +27,14 @@ export class FrontcraftArmoryComponent implements OnInit { fetch(dataLink).then(raw => raw.json().then(async (json: any[]) => { if (json.length < 1) return - let min = -1 let data + let min = -1 for (let i = json.length - 1; i > 0; i--) { - if (json[i].startTime > min && json[i].gear[0].name != "Unknown Item") { + const start = Number.parseInt(json[i].startTime) + if (start > min && json[i].gear[0].name != "Unknown Item") { + min = start data = json[i] - break } } if (!data) { @@ -59,7 +60,7 @@ export class FrontcraftArmoryComponent implements OnInit { } } -function sumStats(stat1: Stats, stat2: Stats):Stats{ +function sumStats(stat1: Stats, stat2: Stats): Stats { const ret = {} as any Object.keys(stat1).forEach(key => { ret[key] = stat1[key] + stat2[key] diff --git a/src/frontend/src/app/frontcraft/pages/character/character.component.ts b/src/frontend/src/app/frontcraft/pages/character/character.component.ts index 0728bd5..b2abf17 100644 --- a/src/frontend/src/app/frontcraft/pages/character/character.component.ts +++ b/src/frontend/src/app/frontcraft/pages/character/character.component.ts @@ -9,70 +9,65 @@ import { IApiService } from '../../services/ApiService'; selector: 'character', templateUrl: './character.component.html', }) -export class FrontcraftCharacterComponent implements OnInit{ +export class FrontcraftCharacterComponent implements OnInit { - @Input() name?: string - @Input() link?: "owner" | "character" = 'owner' + @Input() name?: string + @Input() link?: "owner" | "character" = 'owner' - char : (Character & User & Spec) = { - race: 'Human', - class: 'Warrior' - } as any - color : string - tokens - dataLink = "" - boss1 = {} - gear1:string[] = [] - - boss2= {name: undefined, date:undefined} - gear2:string[] = [] + char: (Character & User & Spec) = { + race: 'Human', + class: 'Warrior' + } as any + color: string + tokens + dataLink = "" + boss1 = {} + gear1: string[] = [] - constructor( - private api: IApiService, - private route: ActivatedRoute, - ){} + boss2 = { name: undefined, date: undefined } + gear2: Item[] = [] - async ngOnInit(){ - const param = this.name || this.route.snapshot.paramMap.get('name'); - if(!param) return - - this.api.get('CharacterManager') - .getCharacterByName(param) - .then((char) => { - if(char){ - this.color = getClassColor(char.class) - this.char = char - this.api.get('ItemManager').getTokens(this.char, _Tiers, true).then(tokens => { - this.tokens = tokens - }) + constructor( + private api: IApiService, + private route: ActivatedRoute, + ) { } - this.dataLink = "https://classic.warcraftlogs.com:443/v1/parses/character/"+this.char.charactername.replace(/^\w/, c => c.toUpperCase())+"/Gandling/EU?api_key=c698515ab4f592cdb848d80b3abe616c&metric=dps" + async ngOnInit() { + const param = this.name || this.route.snapshot.paramMap.get('name'); + if (!param) return - fetch(this.dataLink).then(raw => raw.json().then((json:any[]) => { - if(json.length < 1) return - let data - let min = -1 - - for(let i = json.length-1; i > 0; i--){ - if(json[i].startTime > min && json[i].gear[0].name != "Unknown Item"){ - data = json[i] - break - } - } - if(!data) return - - this.boss2 = { - name: data.encounterName, - date: data.startTime - } - this.gear2 = data.gear.map(item => {return { - itemname: item.name, - iconname: item.icon.replace('.jpg', ''), - quality: item.quality.replace(/^\w/, c => c.toUpperCase()), - url: "https://classic.wowhead.com/item="+item.id, - }}).filter(item => item.itemname != "Unknown Item") - })) - } + const char = await this.api.get('CharacterManager').getCharacterByName(param) + if (char) { + this.color = getClassColor(char.class) + this.char = char + this.api.get('ItemManager').getTokens(this.char, _Tiers, true).then(tokens => { + this.tokens = tokens }) + + this.dataLink = "https://classic.warcraftlogs.com:443/v1/parses/character/" + this.char.charactername.replace(/^\w/, c => c.toUpperCase()) + "/Gandling/EU?api_key=c698515ab4f592cdb848d80b3abe616c&metric=dps" + + const json: any[] = await fetch(this.dataLink).then(raw => raw.json()) + if (json.length < 1) return + let data + let min = -1 + + for (let i = json.length - 1; i > 0; i--) { + const start = Number.parseInt(json[i].startTime) + if (start > min && json[i].gear[0].name != "Unknown Item") { + min = start + data = json[i] + } + } + if (!data) return + + this.boss2 = { + name: data.encounterName, + date: data.startTime + } + + const maybeItems: (Item | undefined)[] = await Promise.all(data.gear.filter(item => item.name != "Unknown Item").map(async item => await this.api.get('ItemManager').getItem(item.name))) + const geardata = maybeItems.filter(maybeItem => maybeItem != null) + this.gear2 = geardata } + } } \ No newline at end of file