Skip to content

Commit

Permalink
Fetch latest version string and displays it in the byond panel
Browse files Browse the repository at this point in the history
  • Loading branch information
alexkar598 committed Jun 24, 2024
1 parent 2398e8e commit 3e40c0e
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 3 deletions.
4 changes: 3 additions & 1 deletion src/app/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@ import { provideAnimations } from '@angular/platform-browser/animations';
import { TuiRootModule } from '@taiga-ui/core';
import {
ApplicationConfig,
provideZoneChangeDetection,
importProvidersFrom,
provideZoneChangeDetection,
} from '@angular/core';
import { provideRouter } from '@angular/router';

import { routes } from './app.routes';
import { provideHttpClient, withFetch } from '@angular/common/http';

export const appConfig: ApplicationConfig = {
providers: [
provideAnimations(),
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(routes),
importProvidersFrom(TuiRootModule),
provideHttpClient(withFetch()),
],
};
13 changes: 12 additions & 1 deletion src/app/panels/byond/byond.component.html
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
<p>byond works!</p>
@if (byondService.latestVersion | async; as latestVersions) {
<p>
Latest stable: <span class="font-bold">{{ latestVersions.stable }}</span>
</p>
@if (latestVersions.beta) {
<p>
Latest beta: <span class="font-bold">{{ latestVersions.beta }}</span>
</p>
}
} @else {
Loading latest version...
}
7 changes: 6 additions & 1 deletion src/app/panels/byond/byond.component.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
import { Component } from '@angular/core';
import { ByondService } from '../../../vm/byond.service';
import { AsyncPipe } from '@angular/common';
import { TuiLoaderModule } from '@taiga-ui/core';

@Component({
selector: 'app-panel-byond',
standalone: true,
imports: [],
imports: [AsyncPipe, TuiLoaderModule],
templateUrl: './byond.component.html',
styleUrl: './byond.component.scss',
})
export default class ByondPanel {
// noinspection JSUnusedGlobalSymbols
static title = 'BYOND versions';

constructor(protected byondService: ByondService) {}
}
51 changes: 51 additions & 0 deletions src/vm/byond.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { firstValueFrom, map } from 'rxjs';

@Injectable({
providedIn: 'root',
})
export class ByondService {
public latestVersion: Promise<{ beta?: ByondVersion; stable: ByondVersion }>;

constructor(httpClient: HttpClient) {
this.latestVersion = firstValueFrom(
httpClient
.get('https://secure.byond.com/download/version.txt', {
responseType: 'text',
})
.pipe(
map((x) => {
const [stable, beta] = x
.split('\n')
.filter((x) => x)
.map((x) => new ByondVersion(x));
return { stable, beta };
}),
),
);
}
}

export class ByondVersion {
public readonly major: number;
public readonly minor: number;

constructor(version: string);
constructor(major: number, minor: number);
constructor(versionOrMajor: string | number, minor?: number) {
if (typeof versionOrMajor === 'number') {
this.major = versionOrMajor;
this.minor = minor!;
} else {
console.log(versionOrMajor.split('.'));
const [major, minor] = versionOrMajor.split('.').map((x) => parseInt(x));
this.major = major;
this.minor = minor;
}
}

toString() {
return `${this.major}.${this.minor}`;
}
}

0 comments on commit 3e40c0e

Please sign in to comment.