Add 'Released At' column for addon pages

This commit is contained in:
Dean Campbell
2020-10-19 13:38:49 -07:00
parent 0d63b6bdf1
commit 58e6a41142
22 changed files with 102 additions and 25 deletions

View File

@@ -609,6 +609,7 @@ export class CurseAddonProvider implements AddonProvider {
screenshotUrls: this.getScreenshotUrls(scanResult.searchResult),
downloadCount: scanResult.searchResult.downloadCount,
summary: scanResult.searchResult.summary,
releasedAt: new Date(latestVersion.fileDate),
};
}
}

View File

@@ -176,6 +176,7 @@ export class TukUiAddonProvider implements AddonProvider {
summary: tukUiAddon.small_desc,
downloadCount: Number.parseFloat(tukUiAddon.downloads),
screenshotUrls: [tukUiAddon.screenshot_url],
releasedAt: new Date(`${tukUiAddon.lastupdate} UTC`),
};
}
}
@@ -195,14 +196,14 @@ export class TukUiAddonProvider implements AddonProvider {
if (!addon) {
return undefined;
}
var latestFile: AddonSearchResultFile = {
channelType: AddonChannelType.Stable,
folders: folderName ? [folderName] : [],
downloadUrl: addon.url,
gameVersion: addon.patch,
version: addon.version,
releaseDate: new Date(addon.lastUpdate),
releaseDate: new Date(`${addon.lastupdate} UTC`),
};
return {

View File

@@ -199,6 +199,7 @@ export class WowInterfaceAddonProvider implements AddonProvider {
summary: response.description,
screenshotUrls: response.images?.map((img) => img.imageUrl),
downloadCount: response.downloads,
releasedAt: new Date(response.lastUpdate),
};
}
@@ -213,7 +214,7 @@ export class WowInterfaceAddonProvider implements AddonProvider {
downloadUrl: response.downloadUri,
folders: folderName ? [folderName] : [],
gameVersion: "",
releaseDate: new Date(),
releaseDate: new Date(response.lastUpdate),
};
return {

View File

@@ -28,4 +28,5 @@ export interface Addon {
downloadCount?: number;
summary?: string;
screenshotUrls?: string[];
releasedAt?: Date;
}

View File

@@ -8,7 +8,7 @@ export interface TukUiAddon {
url: string;
category: string;
downloads: string;
lastUpdate: string;
lastupdate: string;
patch: string;
web_url: string;
last_download: string;

View File

@@ -12,4 +12,5 @@ export interface AddonSearchResult {
screenshotUrls?: string[];
summary?: string;
thumbnailUrl: string;
releasedAt?: Date;
}

View File

@@ -58,7 +58,16 @@
{{element.downloadCount | downloadCount}}
</td>
</ng-container>
<ng-container matColumnDef="releasedAt">
<th mat-header-cell mat-sort-header *matHeaderCellDef>
{{'PAGES.GET_ADDONS.TABLE.RELEASED_AT_COLUMN_HEADER' | translate}}
</th>
<td mat-cell *matCellDef="let element">
{{element | getAddonListItemFileProp:'releaseDate':defaultAddonChannel | date:'short'}}
</td>
</ng-container>
<ng-container matColumnDef="providerName">
<th mat-header-cell mat-sort-header *matHeaderCellDef class="provider-column">
{{'PAGES.GET_ADDONS.TABLE.PROVIDER_COLUMN_HEADER' | translate}}

View File

@@ -16,7 +16,6 @@ import { MatSort } from "@angular/material/sort";
import * as _ from "lodash";
import { GetAddonListItem } from "app/business-objects/get-addon-list-item";
import { AddonSearchResult } from "app/models/wowup/addon-search-result";
import { AddonChannelType } from "app/models/wowup/addon-channel-type";
import { WowUpService } from "app/services/wowup/wowup.service";
@Component({
@@ -35,13 +34,13 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
private readonly _destroyed$ = new Subject<void>();
private subscriptions: Subscription[] = [];
private isSelectedTab: boolean = false;
private channelTypeKey: string = "";
public dataSource = new MatTableDataSource<GetAddonListItem>([]);
columns: ColumnState[] = [
{ name: "name", display: "Addon", visible: true },
{ name: "downloadCount", display: "Downloads", visible: true },
{ name: "releasedAt", display: "Released At", visible: true },
{ name: "author", display: "Author", visible: true },
{ name: "providerName", display: "Provider", visible: true },
{ name: "status", display: "Status", visible: true },
@@ -104,7 +103,12 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
const displayAddonSubscription = this._displayAddonsSrc.subscribe(
(items: GetAddonListItem[]) => {
this.dataSource.data = items;
this.dataSource.sortingDataAccessor = _.get;
this.dataSource.sortingDataAccessor = (item: GetAddonListItem, prop: string) => {
if (prop === 'releasedAt') {
return item.getLatestFile(this.defaultAddonChannel)?.releaseDate;
}
return _.get(item, prop);
}
this.dataSource.sort = this.sort;
}
);

View File

@@ -15,6 +15,7 @@ import { MyAddonsAddonCellComponent } from "app/components/my-addons-addon-cell/
import { ProgressSpinnerComponent } from "app/components/progress-spinner/progress-spinner.component";
import { DownloadCountPipe } from "app/pipes/download-count.pipe";
import { InterfaceFormatPipe } from "app/pipes/interface-format.pipe";
import { GetAddonListItemFilePropPipe } from "app/pipes/get-addon-list-item-file-prop.pipe";
import { TelemetryDialogComponent } from "app/components/telemetry-dialog/telemetry-dialog.component";
import { ConfirmDialogComponent } from "app/components/confirm-dialog/confirm-dialog.component";
import { AlertDialogComponent } from "app/components/alert-dialog/alert-dialog.component";
@@ -40,6 +41,7 @@ import { MyAddonStatusColumnComponent } from "app/components/my-addon-status-col
PotentialAddonTableColumnComponent,
DownloadCountPipe,
InterfaceFormatPipe,
GetAddonListItemFilePropPipe,
TelemetryDialogComponent,
ConfirmDialogComponent,
AlertDialogComponent,

View File

@@ -78,6 +78,15 @@
</td>
</ng-container>
<ng-container matColumnDef="addon.releasedAt">
<th mat-header-cell mat-sort-header *matHeaderCellDef>
{{'PAGES.MY_ADDONS.TABLE.RELEASED_AT_COLUMN_HEADER' | translate}}
</th>
<td mat-cell *matCellDef="let element" class="cell-padding">
{{element.addon.releasedAt | date:'short'}}
</td>
</ng-container>
<ng-container matColumnDef="addon.gameVersion">
<th class="game-version-cell" mat-header-cell mat-sort-header *matHeaderCellDef>
{{'PAGES.MY_ADDONS.TABLE.GAME_VERSION_COLUMN_HEADER' | translate}}

View File

@@ -73,6 +73,12 @@ export class MyAddonsComponent implements OnInit, OnDestroy {
visible: true,
allowToggle: true,
},
{
name: "addon.releasedAt",
display: "Released At",
visible: true,
allowToggle: true,
},
{
name: "addon.gameVersion",
display: "Game Version",

View File

@@ -0,0 +1,8 @@
import { GetAddonListItemFilePropPipe } from './get-addon-list-item-file-prop.pipe';
describe('GetAddonListItemFilePropPipe', () => {
it('create an instance', () => {
const pipe = new GetAddonListItemFilePropPipe();
expect(pipe).toBeTruthy();
});
});

View File

@@ -0,0 +1,13 @@
import { Pipe, PipeTransform } from "@angular/core";
import { GetAddonListItem } from "../business-objects/get-addon-list-item";
import { AddonChannelType } from "../models/wowup/addon-channel-type";
@Pipe({
name: "getAddonListItemFileProp",
})
export class GetAddonListItemFilePropPipe implements PipeTransform {
transform(item: GetAddonListItem, prop: string, channel: AddonChannelType): any {
const file = item.getLatestFile(channel);
return file && file.hasOwnProperty(prop) ? file[prop] : '';
}
}

View File

@@ -495,12 +495,16 @@ export class AddonService {
if (
!result ||
!latestFile ||
latestFile.version === addon.latestVersion
(
latestFile.version === addon.latestVersion &&
latestFile.releaseDate === addon.releasedAt
)
) {
continue;
}
addon.latestVersion = latestFile.version;
addon.releasedAt = latestFile.releaseDate;
addon.downloadUrl = latestFile.downloadUrl;
addon.name = result.name;
addon.author = result.author;
@@ -687,6 +691,7 @@ export class AddonService {
channelType: this._wowUpService.getDefaultAddonChannel(clientType),
isIgnored: false,
autoUpdateEnabled: this._wowUpService.getDefaultAutoUpdate(clientType),
releasedAt: latestFile.releaseDate,
};
}
}

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Anbieter",
"STATUS_COLUMN_HEADER": "Status",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -43,7 +44,8 @@
"GAME_VERSION_COLUMN_HEADER": "Spielversion",
"LATEST_VERSION_COLUMN_HEADER": "Neueste Version",
"PROVIDER_COLUMN_HEADER": "Anbieter",
"STATUS_COLUMN_HEADER": "Status"
"STATUS_COLUMN_HEADER": "Status",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorieren",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Author",
"PROVIDER_COLUMN_HEADER": "Provider",
"STATUS_COLUMN_HEADER": "Status",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Downloads"
"DOWNLOAD_COUNT_COLUMN_HEADER": "Downloads",
"RELEASED_AT_COLUMN_HEADER": "Released At"
}
},
"HOME": {
@@ -44,7 +45,8 @@
"GAME_VERSION_COLUMN_HEADER": "Game Version",
"LATEST_VERSION_COLUMN_HEADER": "Latest Version",
"PROVIDER_COLUMN_HEADER": "Provider",
"STATUS_COLUMN_HEADER": "Status"
"STATUS_COLUMN_HEADER": "Status",
"RELEASED_AT_COLUMN_HEADER": "Released At"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignore",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Proveedor",
"STATUS_COLUMN_HEADER": "Estado",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -43,7 +44,8 @@
"GAME_VERSION_COLUMN_HEADER": "Versión del juego",
"LATEST_VERSION_COLUMN_HEADER": "Última Versión",
"PROVIDER_COLUMN_HEADER": "Proveedor",
"STATUS_COLUMN_HEADER": "Situación"
"STATUS_COLUMN_HEADER": "Situación",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorar",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Auteur",
"PROVIDER_COLUMN_HEADER": "Fournisseur",
"STATUS_COLUMN_HEADER": "Statut",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -43,7 +44,8 @@
"GAME_VERSION_COLUMN_HEADER": "Version du jeu",
"LATEST_VERSION_COLUMN_HEADER": "Dernière version",
"PROVIDER_COLUMN_HEADER": "Fournisseur",
"STATUS_COLUMN_HEADER": "Statut"
"STATUS_COLUMN_HEADER": "Statut",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorer",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Autore",
"PROVIDER_COLUMN_HEADER": "Provveditore",
"STATUS_COLUMN_HEADER": "Stato",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -43,7 +44,8 @@
"GAME_VERSION_COLUMN_HEADER": "Versione Del Gioco",
"LATEST_VERSION_COLUMN_HEADER": "Ultima Versione",
"PROVIDER_COLUMN_HEADER": "Provveditore",
"STATUS_COLUMN_HEADER": "Stato"
"STATUS_COLUMN_HEADER": "Stato",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignora",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Provedor",
"STATUS_COLUMN_HEADER": "Estado",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -43,7 +44,8 @@
"GAME_VERSION_COLUMN_HEADER": "Versão do Jogo",
"LATEST_VERSION_COLUMN_HEADER": "Ultima versão",
"PROVIDER_COLUMN_HEADER": "Provedor",
"STATUS_COLUMN_HEADER": "Estado"
"STATUS_COLUMN_HEADER": "Estado",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorar",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "Автор",
"PROVIDER_COLUMN_HEADER": "Источник",
"STATUS_COLUMN_HEADER": "Статус",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Кол-во загрузок"
"DOWNLOAD_COUNT_COLUMN_HEADER": "Кол-во загрузок",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -44,7 +45,8 @@
"GAME_VERSION_COLUMN_HEADER": "Версия игры",
"LATEST_VERSION_COLUMN_HEADER": "Последняя версия",
"PROVIDER_COLUMN_HEADER": "Источник",
"STATUS_COLUMN_HEADER": "Статус"
"STATUS_COLUMN_HEADER": "Статус",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Пропускать",

View File

@@ -15,7 +15,8 @@
"AUTHOR_COLUMN_HEADER": "作者",
"PROVIDER_COLUMN_HEADER": "提供商",
"STATUS_COLUMN_HEADER": "状态",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
"DOWNLOAD_COUNT_COLUMN_HEADER": "DOWNLOAD_COUNT_COLUMN_HEADER",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
}
},
"HOME": {
@@ -43,7 +44,8 @@
"GAME_VERSION_COLUMN_HEADER": "游戏版本",
"LATEST_VERSION_COLUMN_HEADER": "最新版本",
"PROVIDER_COLUMN_HEADER": "提供商",
"STATUS_COLUMN_HEADER": "状态"
"STATUS_COLUMN_HEADER": "状态",
"RELEASED_AT_COLUMN_HEADER": "RELEASED_AT_COLUMN_HEADER"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "忽略",