Merge pull request #149 from mrchops1024/feat/getaddons-dlcount-version

feat(electron): add dl count and version
This commit is contained in:
jliddev
2020-10-17 15:42:55 -05:00
committed by GitHub
18 changed files with 198 additions and 138 deletions

View File

@@ -12,9 +12,9 @@ export interface AddonProvider {
getAll(clientType: WowClientType, addonIds: string[]): Promise<AddonSearchResult[]>;
getFeaturedAddons(clientType: WowClientType): Observable<PotentialAddon[]>;
getFeaturedAddons(clientType: WowClientType, channelType?: AddonChannelType): Observable<PotentialAddon[]>;
searchByQuery(query: string, clientType: WowClientType): Promise<PotentialAddon[]>;
searchByQuery(query: string, clientType: WowClientType, channelType?: AddonChannelType): Promise<PotentialAddon[]>;
searchByUrl(addonUri: URL, clientType: WowClientType): Promise<PotentialAddon>;

View File

@@ -288,13 +288,14 @@ export class CurseAddonProvider implements AddonProvider {
return addonResults;
}
getFeaturedAddons(clientType: WowClientType): Observable<PotentialAddon[]> {
getFeaturedAddons(clientType: WowClientType, channelType?: AddonChannelType): Observable<PotentialAddon[]> {
channelType = typeof channelType === 'undefined' ? AddonChannelType.Stable : channelType;
return from(this.getFeaturedAddonList()).pipe(
map((addons) => {
return this.filterFeaturedAddons(addons, clientType);
}),
map((filteredAddons) => {
return filteredAddons.map((addon) => this.getPotentialAddon(addon));
return filteredAddons.map((addon) => this.getPotentialAddon(addon, clientType, channelType));
})
);
}
@@ -320,8 +321,10 @@ export class CurseAddonProvider implements AddonProvider {
async searchByQuery(
query: string,
clientType: WowClientType
clientType: WowClientType,
channelType?: AddonChannelType
): Promise<PotentialAddon[]> {
channelType = typeof channelType === 'undefined' ? AddonChannelType.Stable : channelType;
var searchResults: PotentialAddon[] = [];
var response = await this.getSearchResults(query);
@@ -331,7 +334,7 @@ export class CurseAddonProvider implements AddonProvider {
continue;
}
searchResults.push(this.getPotentialAddon(result));
searchResults.push(this.getPotentialAddon(result, clientType, channelType));
}
return searchResults;
@@ -405,7 +408,17 @@ export class CurseAddonProvider implements AddonProvider {
throw new Error("Method not implemented.");
}
private getPotentialAddon(result: CurseSearchResult): PotentialAddon {
private getPotentialAddon(result: CurseSearchResult, clientType: WowClientType, channelType: AddonChannelType): PotentialAddon {
const clientTypeStr = this.getGameVersionFlavor(clientType);
let latestFile = _.orderBy(result.latestFiles, 'id', 'desc')
.find(file =>
file.gameVersionFlavor === clientTypeStr &&
this.getChannelType(file.releaseType) === channelType
);
if (!latestFile) {
latestFile = _.first(result.latestFiles);
}
return {
author: this.getAuthor(result),
downloadCount: result.downloadCount,
@@ -416,6 +429,7 @@ export class CurseAddonProvider implements AddonProvider {
thumbnailUrl: this.getThumbnailUrl(result),
summary: result.summary,
screenshotUrls: this.getScreenshotUrls(result),
version: latestFile.displayName
};
}

View File

@@ -197,6 +197,7 @@ export class TukUiAddonProvider implements AddonProvider {
providerName: this.name,
thumbnailUrl: addon.screenshot_url,
summary: addon.small_desc,
version: addon.version
};
}

View File

@@ -3,6 +3,6 @@
</div>
<div>
<a class="addon-title mat-subheading-2" (click)="viewDetails()">{{addon.name}}</a>
<div>{{addon.downloadCount | downloadCount}} downloads</div>
<div class="addon-version">{{addon?.version}}</div>
</div>
</div>

View File

@@ -33,4 +33,8 @@
color: $white-2;
}
}
.addon-version {
color: $white-2;
}
}

View File

@@ -9,4 +9,5 @@ export interface PotentialAddon {
downloadCount: number;
summary?: string;
screenshotUrls?: string[];
version?: string;
}

View File

@@ -38,7 +38,8 @@
<app-progress-spinner *ngIf="isBusy === true"></app-progress-spinner>
<div class="table-container flex-grow-1" [hidden]="isBusy === true">
<table mat-table matSort [dataSource]="dataSource" class="mat-elevation-z8">
<table mat-table matSort [dataSource]="dataSource" matSortActive="downloadCount" matSortDirection="desc"
class="mat-elevation-z8">
<ng-container matColumnDef="name">
<th mat-header-cell mat-sort-header *matHeaderCellDef>
{{'PAGES.GET_ADDONS.TABLE.ADDON_COLUMN_HEADER' | translate}}
@@ -49,7 +50,16 @@
</td>
</ng-container>
<ng-container matColumnDef="provider">
<ng-container matColumnDef="downloadCount">
<th mat-header-cell mat-sort-header *matHeaderCellDef>
{{'PAGES.GET_ADDONS.TABLE.DOWNLOAD_COUNT_COLUMN_HEADER' | translate}}
</th>
<td mat-cell *matCellDef="let element">
{{element.downloadCount | downloadCount}}
</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}}
</th>

View File

@@ -11,10 +11,14 @@ import { AddonService } from "app/services/addons/addon.service";
import { SessionService } from "app/services/session/session.service";
import { WarcraftService } from "app/services/warcraft/warcraft.service";
import { BehaviorSubject, Subject, Subscription } from "rxjs";
import { map } from "rxjs/operators";
import { filter, map } from "rxjs/operators";
import { MatTableDataSource } from "@angular/material/table";
import { MatSort } from "@angular/material/sort";
import * as _ from "lodash";
import { WowUpService } from "app/services/wowup/wowup.service";
import { defaultChannelKeySuffix } from "../../../constants";
import { getEnumName } from "app/utils/enum.utils";
import { AddonChannelType } from "app/models/wowup/addon-channel-type";
@Component({
selector: "app-get-addons",
@@ -32,13 +36,16 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
private readonly _destroyed$ = new Subject<void>();
private subscriptions: Subscription[] = [];
private isSelectedTab: boolean = false;
private channelType: AddonChannelType = AddonChannelType.Stable;
private channelTypeKey: string = '';
public dataSource = new MatTableDataSource<PotentialAddon>([]);
columns: ColumnState[] = [
{ name: "name", display: "Addon", visible: true },
{ name: "downloadCount", display: "Downloads", visible: true },
{ name: "author", display: "Author", visible: true },
{ name: "provider", display: "Provider", visible: true },
{ name: "providerName", display: "Provider", visible: true },
{ name: "status", display: "Status", visible: true },
];
@@ -54,6 +61,7 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
private _addonService: AddonService,
private _sessionService: SessionService,
private _dialog: MatDialog,
private _wowUpService: WowUpService,
public electronService: ElectronService,
public warcraftService: WarcraftService
) {
@@ -70,6 +78,8 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
.pipe(
map((clientType) => {
this.selectedClient = clientType;
this.channelType = this._wowUpService.getDefaultAddonChannel(this.selectedClient);
this.channelTypeKey = `${getEnumName(WowClientType, this.selectedClient)}${defaultChannelKeySuffix}`.toLowerCase();
this.loadPopularAddons(this.selectedClient);
})
)
@@ -91,10 +101,18 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
}
);
const channelTypeSubscription = this._wowUpService.preferenceChange$
.pipe(filter(change => change.key === this.channelTypeKey))
.subscribe(change => {
this.channelType = parseInt(change.value, 10) as AddonChannelType;
this.onSearch();
});
this.subscriptions = [
selectedClientSubscription,
addonRemovedSubscription,
displayAddonSubscription,
channelTypeSubscription
];
}
@@ -133,7 +151,8 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
let searchResults = await this._addonService.search(
this.query,
this.selectedClient
this.selectedClient,
this.channelType
);
searchResults = this.filterInstalledAddons(searchResults);
@@ -158,7 +177,7 @@ export class GetAddonsComponent implements OnInit, OnDestroy {
this.isBusy = true;
this._addonService.getFeaturedAddons(clientType).subscribe({
this._addonService.getFeaturedAddons(clientType, this.channelType).subscribe({
next: (addons) => {
addons = this.filterInstalledAddons(addons);
this.formatAddons(addons);

View File

@@ -60,10 +60,11 @@ export class AddonService {
public async search(
query: string,
clientType: WowClientType
clientType: WowClientType,
channelType: AddonChannelType
): Promise<PotentialAddon[]> {
var searchTasks = this._addonProviders.map((p) =>
p.searchByQuery(query, clientType)
p.searchByQuery(query, clientType, channelType)
);
var searchResults = await Promise.all(searchTasks);
@@ -558,10 +559,11 @@ export class AddonService {
}
public getFeaturedAddons(
clientType: WowClientType
clientType: WowClientType,
channelType: AddonChannelType,
): Observable<PotentialAddon[]> {
return forkJoin(
this._addonProviders.map((p) => p.getFeaturedAddons(clientType))
this._addonProviders.map((p) => p.getFeaturedAddons(clientType, channelType))
).pipe(
map((results) => {
return _.orderBy(results.flat(1), ["downloadCount"]).reverse();

View File

@@ -104,6 +104,7 @@ export class WowUpService {
public setDefaultAddonChannel(clientType: WowClientType, channelType: AddonChannelType) {
const key = this.getClientDefaultAddonChannelKey(clientType);
this._preferenceStorageService.set(key, channelType);
this._preferenceChangeSrc.next({ key, value: channelType.toString() })
}
public getDefaultAutoUpdate(clientType: WowClientType): boolean {

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Anbieter",
"STATUS_COLUMN_HEADER": "Status"
"STATUS_COLUMN_HEADER": "Status",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"HOME": {

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Author",
"PROVIDER_COLUMN_HEADER": "Provider",
"STATUS_COLUMN_HEADER": "Status"
"STATUS_COLUMN_HEADER": "Status",
"DOWNLOAD_COUNT_COLUMN_HEADER": "Downloads"
}
},
"HOME": {

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Proveedor",
"STATUS_COLUMN_HEADER": "Estado"
"STATUS_COLUMN_HEADER": "Estado",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"HOME": {

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Auteur",
"PROVIDER_COLUMN_HEADER": "Fournisseur",
"STATUS_COLUMN_HEADER": "Statut"
"STATUS_COLUMN_HEADER": "Statut",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"HOME": {

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Autore",
"PROVIDER_COLUMN_HEADER": "Provveditore",
"STATUS_COLUMN_HEADER": "Stato"
"STATUS_COLUMN_HEADER": "Stato",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"HOME": {

View File

@@ -1,124 +1,125 @@
{
"PAGES": {
"ABOUT": {
"CHANGE_LOG_SECTION_LABEL": "Registro de Alterações",
"TITLE": "WowUp.io",
"WEBSITE_LINK_LABEL": "Conheça o nosso site!"
},
"GET_ADDONS": {
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"REFRESH_BUTTON": "Atualizar",
"INSTALL_FROM_URL_BUTTON": "Instalar pela URL",
"SEARCH_LABEL": "Procurar",
"TABLE": {
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Provedor",
"STATUS_COLUMN_HEADER": "Estado"
}
},
"HOME": {
"TITLE": "App funciona!",
"GO_TO_DETAIL": "Ir para Detalhes",
"MY_ADDONS_TAB_TITLE": "Meus Addons",
"GET_ADDONS_TAB_TITLE": "Obtenha Addons",
"ABOUT_TAB_TITLE": "Sobre",
"OPTIONS_TAB_TITLE": "Opções"
},
"MY_ADDONS": {
"CHECK_UPDATES_BUTTON": "Verificar Atualizações",
"CHECK_UPDATES_BUTTON_TOOLTIP": "Verificar atualizações recentes",
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"RESCAN_FOLDERS_BUTTON": "Re-escanear pastas",
"RESCAN_FOLDERS_BUTTON_TOOLTIP": "Procura por Addons instalados",
"UPDATE_ALL_BUTTON": "Actualizar todos",
"UPDATE_ALL_BUTTON_TOOLTIP": "Atualizar todos os Addons",
"TABLE": {
"ADDON_COLUMN_HEADER": "Addon",
"ADDON_INSTALL_BUTTON": "Instalar",
"ADDON_UPDATE_BUTTON": "Atualizar",
"AUTHOR_COLUMN_HEADER": "Autor",
"AUTO_UPDATE_ICON_TOOLTIP": "Atualização automática habilitada",
"GAME_VERSION_COLUMN_HEADER": "Versão do Jogo",
"LATEST_VERSION_COLUMN_HEADER": "Ultima versão",
"PROVIDER_COLUMN_HEADER": "Provedor",
"STATUS_COLUMN_HEADER": "Estado"
},
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorar",
"AUTO_UPDATE_ADDON_BUTTON": "Atualização Automática",
"CHANNEL_SUBMENT_TITLE": "Canal",
"SHOW_FOLDER": "SHOW_FOLDER",
"REINSTALL_ADDON_BUTTON": "Reinstalar",
"REMOVE_ADDON_BUTTON": "Remover",
"STABLE_ADDON_CHANNEL": "Estável",
"BETA_ADDON_CHANNEL": "Beta",
"ALPHA_ADDON_CHANNEL": "Alfa"
},
"COLUMNS_CONTEXT_MENU": {
"TITLE": "Exibir Colunas"
},
"UPDATE_ALL_CONTEXT_MENU": {
"UPDATE_RETAIL_CLASSIC_BUTTON": "Atualizar Retail/Clássico",
"UPDATE_ALL_CLIENTS_BUTTON": "Atualizar todos os clientes"
}
},
"OPTIONS": {
"APPLICATION": {
"MINIMIZE_ON_CLOSE_LABEL": "Minimizar ao Fechar",
"MINIMIZE_ON_CLOSE_DESCRIPTION": "Ao fechar a janela do WowUp, minimize para a bandeja do sistema.",
"TELEMETRY_DESCRIPTION": "Ajude a melhorar o WowUp enviando dados e/ou erros de instalação anônimamente.",
"TELEMETRY_LABEL": "Telemetria",
"TITLE": "Aplicativo"
},
"DEBUG": {
"DEBUG_DATA_BUTTON": "Esvaziar log de depuração de dados",
"DEBUG_DATA_DESCRIPTION": "Registra os dados de depuração e ajuda a diagnosticar problemas potenciais. Apenas por o curiosidade, isso pode ser encontrado em seu último arquivo de registro.",
"DEBUG_DATA_LABEL": "Depurar Dados",
"LOG_FILES_BUTTON": "Mostrar Arquivos de Registro",
"LOG_FILES_DESCRIPTION": "Abre a pasta que contém seus últimos arquivos de registro.",
"LOG_FILES_LABEL": "Arquivos de Registro",
"TITLE": "Depurar"
},
"WOW": {
"AUTO_UPDATE_DESCRIPTION": "Addons recém-instalados serão definidos para atualizar automáticamente por padrão",
"AUTO_UPDATE_LABEL": "Atualização Automática",
"TITLE": "World of Warcraft",
"DEFAULT_ADDON_CHANNEL_LABEL": "Canal de Addon Padrão",
"DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Canal de Addon",
"RESCAN_CLIENTS_BUTTON": "Re-escanear",
"RESCAN_CLIENTS_LABEL": "Reescanear World of Warcraft instalados"
}
"PAGES": {
"ABOUT": {
"CHANGE_LOG_SECTION_LABEL": "Registro de Alterações",
"TITLE": "WowUp.io",
"WEBSITE_LINK_LABEL": "Conheça o nosso site!"
},
"GET_ADDONS": {
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"REFRESH_BUTTON": "Atualizar",
"INSTALL_FROM_URL_BUTTON": "Instalar pela URL",
"SEARCH_LABEL": "Procurar",
"TABLE": {
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "Autor",
"PROVIDER_COLUMN_HEADER": "Provedor",
"STATUS_COLUMN_HEADER": "Estado",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"DIALOGS": {
"ADDON_DETAILS": {
"VIEW_IN_BROWSER_BUTTON": "Visualizar no navegador"
"HOME": {
"TITLE": "App funciona!",
"GO_TO_DETAIL": "Ir para Detalhes",
"MY_ADDONS_TAB_TITLE": "Meus Addons",
"GET_ADDONS_TAB_TITLE": "Obtenha Addons",
"ABOUT_TAB_TITLE": "Sobre",
"OPTIONS_TAB_TITLE": "Opções"
},
"MY_ADDONS": {
"CHECK_UPDATES_BUTTON": "Verificar Atualizações",
"CHECK_UPDATES_BUTTON_TOOLTIP": "Verificar atualizações recentes",
"CLIENT_TYPE_SELECT_LABEL": "World of Warcraft",
"RESCAN_FOLDERS_BUTTON": "Re-escanear pastas",
"RESCAN_FOLDERS_BUTTON_TOOLTIP": "Procura por Addons instalados",
"UPDATE_ALL_BUTTON": "Actualizar todos",
"UPDATE_ALL_BUTTON_TOOLTIP": "Atualizar todos os Addons",
"TABLE": {
"ADDON_COLUMN_HEADER": "Addon",
"ADDON_INSTALL_BUTTON": "Instalar",
"ADDON_UPDATE_BUTTON": "Atualizar",
"AUTHOR_COLUMN_HEADER": "Autor",
"AUTO_UPDATE_ICON_TOOLTIP": "Atualização automática habilitada",
"GAME_VERSION_COLUMN_HEADER": "Versão do Jogo",
"LATEST_VERSION_COLUMN_HEADER": "Ultima versão",
"PROVIDER_COLUMN_HEADER": "Provedor",
"STATUS_COLUMN_HEADER": "Estado"
},
"ALERT": {
"POSITIVE_BUTTON": "Ok"
"ADDON_CONTEXT_MENU": {
"IGNORE_ADDON_BUTTON": "Ignorar",
"AUTO_UPDATE_ADDON_BUTTON": "Atualização Automática",
"CHANNEL_SUBMENT_TITLE": "Canal",
"SHOW_FOLDER": "SHOW_FOLDER",
"REINSTALL_ADDON_BUTTON": "Reinstalar",
"REMOVE_ADDON_BUTTON": "Remover",
"STABLE_ADDON_CHANNEL": "Estável",
"BETA_ADDON_CHANNEL": "Beta",
"ALPHA_ADDON_CHANNEL": "Alfa"
},
"CONFIRM": {
"NEGATIVE_BUTTON": "Não",
"POSITIVE_BUTTON": "Sim"
"COLUMNS_CONTEXT_MENU": {
"TITLE": "Exibir Colunas"
},
"INSTALL_FROM_URL": {
"ADDON_URL_INPUT_LABEL": "Addon URL",
"ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub ou WowInterface URL",
"CLOSE_BUTTON": "Fechar",
"IMPORT_BUTTON": "Importar",
"INSTALL_BUTTON": "Instalar",
"INSTALL_SUCCESS_LABEL": "Instalado!",
"TITLE": "Instalar Addon pela URL",
"DESCRIPTION": "Se você deseja instalar um addon diretamente de uma URL, cole-a abaixo para iniciar.",
"SUPPORTED_SOURCES": "Suporta WowInterface e GitHub*"
"UPDATE_ALL_CONTEXT_MENU": {
"UPDATE_RETAIL_CLASSIC_BUTTON": "Atualizar Retail/Clássico",
"UPDATE_ALL_CLIENTS_BUTTON": "Atualizar todos os clientes"
}
},
"OPTIONS": {
"APPLICATION": {
"MINIMIZE_ON_CLOSE_LABEL": "Minimizar ao Fechar",
"MINIMIZE_ON_CLOSE_DESCRIPTION": "Ao fechar a janela do WowUp, minimize para a bandeja do sistema.",
"TELEMETRY_DESCRIPTION": "Ajude a melhorar o WowUp enviando dados e/ou erros de instalação anônimamente.",
"TELEMETRY_LABEL": "Telemetria",
"TITLE": "Aplicativo"
},
"TELEMETRY": {
"DESCRIPTION": "Ajude-nos a melhorar o WowUp enviando dados e/ou erros de instalação do aplicativo anônimamente?",
"NEGATIVE_BUTTON": "Não obrigado",
"POSITIVE_BUTTON": "Claro!",
"TITLE": "Telemetria do WowUp"
"DEBUG": {
"DEBUG_DATA_BUTTON": "Esvaziar log de depuração de dados",
"DEBUG_DATA_DESCRIPTION": "Registra os dados de depuração e ajuda a diagnosticar problemas potenciais. Apenas por o curiosidade, isso pode ser encontrado em seu último arquivo de registro.",
"DEBUG_DATA_LABEL": "Depurar Dados",
"LOG_FILES_BUTTON": "Mostrar Arquivos de Registro",
"LOG_FILES_DESCRIPTION": "Abre a pasta que contém seus últimos arquivos de registro.",
"LOG_FILES_LABEL": "Arquivos de Registro",
"TITLE": "Depurar"
},
"WOW": {
"AUTO_UPDATE_DESCRIPTION": "Addons recém-instalados serão definidos para atualizar automáticamente por padrão",
"AUTO_UPDATE_LABEL": "Atualização Automática",
"TITLE": "World of Warcraft",
"DEFAULT_ADDON_CHANNEL_LABEL": "Canal de Addon Padrão",
"DEFAULT_ADDON_CHANNEL_SELECT_LABEL": "Canal de Addon",
"RESCAN_CLIENTS_BUTTON": "Re-escanear",
"RESCAN_CLIENTS_LABEL": "Reescanear World of Warcraft instalados"
}
}
},
"DIALOGS": {
"ADDON_DETAILS": {
"VIEW_IN_BROWSER_BUTTON": "Visualizar no navegador"
},
"ALERT": {
"POSITIVE_BUTTON": "Ok"
},
"CONFIRM": {
"NEGATIVE_BUTTON": "Não",
"POSITIVE_BUTTON": "Sim"
},
"INSTALL_FROM_URL": {
"ADDON_URL_INPUT_LABEL": "Addon URL",
"ADDON_URL_INPUT_PLACEHOLDER": "Ex. GitHub ou WowInterface URL",
"CLOSE_BUTTON": "Fechar",
"IMPORT_BUTTON": "Importar",
"INSTALL_BUTTON": "Instalar",
"INSTALL_SUCCESS_LABEL": "Instalado!",
"TITLE": "Instalar Addon pela URL",
"DESCRIPTION": "Se você deseja instalar um addon diretamente de uma URL, cole-a abaixo para iniciar.",
"SUPPORTED_SOURCES": "Suporta WowInterface e GitHub*"
},
"TELEMETRY": {
"DESCRIPTION": "Ajude-nos a melhorar o WowUp enviando dados e/ou erros de instalação do aplicativo anônimamente?",
"NEGATIVE_BUTTON": "Não obrigado",
"POSITIVE_BUTTON": "Claro!",
"TITLE": "Telemetria do WowUp"
}
}
}

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Модификация",
"AUTHOR_COLUMN_HEADER": "Автор",
"PROVIDER_COLUMN_HEADER": "Источник",
"STATUS_COLUMN_HEADER": "Статус"
"STATUS_COLUMN_HEADER": "Статус",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"HOME": {

View File

@@ -14,7 +14,8 @@
"ADDON_COLUMN_HEADER": "Addon",
"AUTHOR_COLUMN_HEADER": "作者",
"PROVIDER_COLUMN_HEADER": "提供商",
"STATUS_COLUMN_HEADER": "状态"
"STATUS_COLUMN_HEADER": "状态",
"DOWNLOAD_COUNT_COLUMN_HEADER": "TEXT_ELEMENT"
}
},
"HOME": {