Skip to content

Commit 51f33c5

Browse files
added config to populate the UI, added change event listeners to trigger update call, added extra models and message classes for updating feeds
1 parent c3f3dd9 commit 51f33c5

11 files changed

+241
-129
lines changed

frontend/src/app/app.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export class AppComponent implements OnInit {
100100
showBrowser: boolean = false;
101101
resultJson = '';
102102
modStatus = { CurrentStatus: '' };
103-
config: BeatOnConfig = { IsCommitted: true, Config: null };
103+
config: BeatOnConfig = { IsCommitted: true, Config: null, SyncConfig: null };
104104
ngOnInit() {
105105
this.checkModStatus();
106106
}
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { QuestomConfig } from './QuestomConfig';
2+
import { SyncSaberConfig } from './SyncSaberConfig';
23

3-
export interface BeatOnConfig
4-
{
5-
Config : QuestomConfig;
6-
IsCommitted : boolean;
7-
}
4+
export interface BeatOnConfig {
5+
Config: QuestomConfig;
6+
IsCommitted: boolean;
7+
SyncConfig: SyncSaberConfig;
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { MessageBase, MessageType } from './MessageBase';
2+
3+
export class ClientSetBeastSaberUsername extends MessageBase {
4+
constructor() {
5+
super();
6+
}
7+
readonly Type: MessageType = MessageType.BeastSaberUsername;
8+
BeastSaberUsername: string;
9+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { MessageBase, MessageType } from './MessageBase';
2+
3+
export class ClientUpdateFeedReader extends MessageBase {
4+
constructor() {
5+
super();
6+
}
7+
readonly Type: MessageType = MessageType.UpdateFeedReader;
8+
MaxSongs: number;
9+
ID: string;
10+
IsEnabled: boolean;
11+
}

frontend/src/app/models/FeedReader.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export interface FeedReader {
2+
DisplayName: string;
3+
FeedType: number;
4+
ID: string;
5+
IsEnabled: boolean;
6+
LastSyncAttempt: string;
7+
LastSyncSuccess: string;
8+
PlaylistID: string;
9+
MaxSongs: number;
10+
}

frontend/src/app/models/MessageBase.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { ClientSetBeastSaberUsername } from './ClientSetBeastSaberUsername';
2+
13
export abstract class MessageBase {
24
constructor() {
35
this.MessageID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
@@ -30,4 +32,6 @@ export enum MessageType {
3032
MovePlaylist = <any>'MovePlaylist',
3133
DeleteMod = <any>'DeleteMod',
3234
ChangeColor = <any>'ChangeColor',
35+
BeastSaberUsername = <any>'BeastSaberUsername',
36+
UpdateFeedReader = <any>'UpdateFeedReader',
3337
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { FeedReader } from './FeedReader';
2+
3+
export interface SyncSaberConfig {
4+
BeastSaberUsername: string;
5+
CheckExistingSongsUpdated: boolean;
6+
FeedReaders: FeedReader[];
7+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
<div class="vertical-align">
2-
<mat-icon (click)="down()">navigate_before</mat-icon>{{maxSongs === 0 ? '∞' : maxSongs}} <mat-icon (click)="up()">navigate_next</mat-icon>
2+
<mat-icon (click)="down()">navigate_before</mat-icon>{{reader.MaxSongs === 0 ? '∞' : reader.MaxSongs}} <mat-icon (click)="up()">navigate_next</mat-icon>
33
</div>
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
1-
import { Component, Input, OnInit } from '@angular/core';
1+
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
2+
import { FeedReader } from '../models/FeedReader';
23

34
@Component({
45
selector: 'app-sync-saber-max-songs',
56
templateUrl: './sync-saber-max-songs.component.html',
67
styleUrls: ['./sync-saber-max-songs.component.scss'],
78
})
89
export class SyncSaberMaxSongsComponent implements OnInit {
9-
@Input() maxSongs = 10;
10+
@Input() reader: FeedReader;
11+
@Output() update = new EventEmitter();
1012
constructor() {}
1113

1214
ngOnInit() {}
1315

1416
down() {
15-
this.maxSongs = this.maxSongs < 1 ? 0 : this.maxSongs - 10;
17+
this.reader.MaxSongs = this.reader.MaxSongs < 1 ? 0 : this.reader.MaxSongs - 10;
18+
this.update.emit();
1619
}
1720

1821
up() {
19-
this.maxSongs = this.maxSongs > 199 ? 200 : this.maxSongs + 10;
22+
this.reader.MaxSongs = this.reader.MaxSongs > 199 ? 200 : this.reader.MaxSongs + 10;
23+
this.update.emit();
2024
}
2125
}

frontend/src/app/sync-saber/sync-saber.component.html

Lines changed: 107 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -12,155 +12,146 @@
1212
<div class="left-col">
1313
<div class="right-select-all">Max Songs</div>
1414
<h1>What's Popular
15-
16-
<mat-slide-toggle
17-
class="enable-all"
18-
[color]="color"
19-
[checked]="checked"
20-
[disabled]="disabled">
15+
<mat-slide-toggle class="enable-all">
2116
Enable All
2217
</mat-slide-toggle>
2318
</h1>
2419
<hr>
2520
<div class="left-padd-gate">
26-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
27-
<mat-slide-toggle
28-
class="example-margin"
29-
[color]="color"
30-
[checked]="checked"
31-
[disabled]="disabled">
32-
BeatSaver's Hot
33-
</mat-slide-toggle>
34-
<br><br>
35-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
36-
<mat-slide-toggle
37-
class="example-margin"
38-
[color]="color"
39-
[checked]="checked"
40-
[disabled]="disabled">
41-
BeatSaver's Latest
42-
</mat-slide-toggle>
43-
<br><br>
44-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
45-
<mat-slide-toggle
46-
class="example-margin"
47-
[color]="color"
48-
[checked]="checked"
49-
[disabled]="disabled">
50-
BeatSaver's Songs by Download
51-
</mat-slide-toggle>
52-
<br><br>
53-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
54-
<mat-slide-toggle
55-
class="example-margin"
56-
[color]="color"
57-
[checked]="checked"
58-
[disabled]="disabled">
59-
BeastSaber's Curator Recommended
60-
</mat-slide-toggle>
61-
<br><br>
62-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
63-
<mat-slide-toggle
64-
class="example-margin"
65-
[color]="color"
66-
[checked]="checked"
67-
[disabled]="disabled">
68-
ScoreSaber's Top Played
69-
</mat-slide-toggle>
70-
<br><br>
71-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
72-
<mat-slide-toggle
73-
class="example-margin"
74-
[color]="color"
75-
[checked]="checked"
76-
[disabled]="disabled">
77-
ScoreSaber's Trending
78-
</mat-slide-toggle>
79-
21+
<div *ngIf="SyncService_BeatSaverHOT">
22+
<app-sync-saber-max-songs class="right" [reader]="SyncService_BeatSaverHOT"
23+
(update)="updateFeedSetting(SyncService_BeatSaverHOT)"></app-sync-saber-max-songs>
24+
<mat-slide-toggle [(ngModel)]="SyncService_BeatSaverHOT.IsEnabled"
25+
(change)="updateFeedSetting(SyncService_BeatSaverHOT)">
26+
BeatSaver's Hot
27+
</mat-slide-toggle>
28+
<br><br>
29+
</div>
30+
<div *ngIf="SyncService_BeatSaverLATEST">
31+
<app-sync-saber-max-songs class="right" [reader]="SyncService_BeatSaverLATEST"
32+
(update)="updateFeedSetting(SyncService_BeatSaverLATEST)"></app-sync-saber-max-songs>
33+
<mat-slide-toggle [(ngModel)]="SyncService_BeatSaverLATEST.IsEnabled"
34+
(change)="updateFeedSetting(SyncService_BeatSaverLATEST)">
35+
BeatSaver's Latest
36+
</mat-slide-toggle>
37+
<br><br>
38+
</div>
39+
<div *ngIf="SyncService_BeatSaverDOWNLOADS">
40+
<app-sync-saber-max-songs class="right" [reader]="SyncService_BeatSaverDOWNLOADS"
41+
(update)="updateFeedSetting(SyncService_BeatSaverDOWNLOADS)"></app-sync-saber-max-songs>
42+
<mat-slide-toggle [(ngModel)]="SyncService_BeatSaverDOWNLOADS.IsEnabled"
43+
(change)="updateFeedSetting(SyncService_BeatSaverDOWNLOADS)">
44+
BeatSaver's Songs by Download
45+
</mat-slide-toggle>
46+
<br><br>
47+
</div>
48+
<div *ngIf="SyncService_BeastSaberCURATOR_RECOMMENDED">
49+
<app-sync-saber-max-songs class="right" [reader]="SyncService_BeastSaberCURATOR_RECOMMENDED"
50+
(update)="updateFeedSetting(SyncService_BeastSaberCURATOR_RECOMMENDED)"></app-sync-saber-max-songs>
51+
<mat-slide-toggle [(ngModel)]="SyncService_BeastSaberCURATOR_RECOMMENDED.IsEnabled"
52+
(change)="updateFeedSetting(SyncService_BeastSaberCURATOR_RECOMMENDED)">
53+
BeastSaber's Curator Recommended
54+
</mat-slide-toggle>
55+
<br><br>
56+
</div>
57+
<div *ngIf="SyncService_ScoreSaberTOP_PLAYED">
58+
<app-sync-saber-max-songs class="right" [reader]="SyncService_ScoreSaberTOP_PLAYED"
59+
(update)="updateFeedSetting(SyncService_ScoreSaberTOP_PLAYED)"></app-sync-saber-max-songs>
60+
<mat-slide-toggle [(ngModel)]="SyncService_ScoreSaberTOP_PLAYED.IsEnabled"
61+
(change)="updateFeedSetting(SyncService_ScoreSaberTOP_PLAYED)">
62+
ScoreSaber's Top Played
63+
</mat-slide-toggle>
64+
<br><br>
65+
</div>
66+
<div *ngIf="SyncService_ScoreSaberTRENDING">
67+
<app-sync-saber-max-songs class="right" [reader]="SyncService_ScoreSaberTRENDING"
68+
(update)="updateFeedSetting(SyncService_ScoreSaberTRENDING)"></app-sync-saber-max-songs>
69+
<mat-slide-toggle [(ngModel)]="SyncService_ScoreSaberTRENDING.IsEnabled"
70+
(change)="updateFeedSetting(SyncService_ScoreSaberTRENDING)">
71+
ScoreSaber's Trending
72+
</mat-slide-toggle>
73+
</div>
8074

8175
</div>
8276

8377

8478
<br><br><br>
8579
<div class="right-select-all">Max Songs</div>
8680
<h1>For a Challenge
87-
88-
<mat-slide-toggle
89-
class="enable-all"
90-
[color]="color"
91-
[checked]="checked"
92-
[disabled]="disabled">
81+
<mat-slide-toggle class="enable-all">
9382
Enable All
9483
</mat-slide-toggle></h1>
9584
<hr>
9685
<div class="left-padd-gate">
97-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
98-
<mat-slide-toggle
99-
class="example-margin"
100-
[color]="color"
101-
[checked]="checked"
102-
[disabled]="disabled">
103-
ScoreSaber's Latest
104-
</mat-slide-toggle>
105-
<br><br>
106-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
107-
<mat-slide-toggle
108-
class="example-margin"
109-
[color]="color"
110-
[checked]="checked"
111-
[disabled]="disabled">
112-
ScoreSaber's Top Ranked
113-
</mat-slide-toggle>
86+
<div *ngIf="SyncService_ScoreSaberTOP_RANKED">
87+
<app-sync-saber-max-songs class="right" [reader]="SyncService_ScoreSaberLATEST_RANKED"
88+
(update)="updateFeedSetting(SyncService_ScoreSaberLATEST_RANKED)"></app-sync-saber-max-songs>
89+
<mat-slide-toggle [(ngModel)]="SyncService_ScoreSaberLATEST_RANKED.IsEnabled"
90+
(change)="updateFeedSetting(SyncService_ScoreSaberLATEST_RANKED)">
91+
ScoreSaber's Latest
92+
</mat-slide-toggle>
93+
<br><br>
94+
</div>
95+
<div *ngIf="SyncService_ScoreSaberTOP_RANKED">
96+
<app-sync-saber-max-songs class="right"
97+
[reader]="SyncService_ScoreSaberTOP_RANKED"
98+
(update)="updateFeedSetting(SyncService_ScoreSaberTOP_RANKED)"
99+
></app-sync-saber-max-songs>
100+
<mat-slide-toggle [(ngModel)]="SyncService_ScoreSaberTOP_RANKED.IsEnabled"
101+
(change)="updateFeedSetting(SyncService_ScoreSaberTOP_RANKED)">
102+
ScoreSaber's Top Ranked
103+
</mat-slide-toggle>
104+
</div>
114105
</div>
115106
</div>
116107
<div class="right-col">
117108
<div class="right-select-all">Max Songs</div>
118109
<h1>For Me
119-
120-
<mat-slide-toggle
121-
class="enable-all"
122-
[color]="color"
123-
[checked]="checked"
124-
[disabled]="disabled">
110+
<mat-slide-toggle class="enable-all">
125111
Enable All
126112
</mat-slide-toggle></h1>
127113
<hr>
128114

129115
<div class="left-padd-gate">
130-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
131-
<mat-slide-toggle
132-
class="example-margin"
133-
[color]="color"
134-
[checked]="checked"
135-
[disabled]="disabled">
136-
BeastSaber's Following
137-
</mat-slide-toggle>
138-
<br><br>
139-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
140-
<mat-slide-toggle
141-
class="example-margin"
142-
[color]="color"
143-
[checked]="checked"
144-
[disabled]="disabled">
145-
BeastSaber's Bookmarks
146-
</mat-slide-toggle>
147-
<br><br>
148-
<app-sync-saber-max-songs class="right"></app-sync-saber-max-songs>
149-
<mat-slide-toggle
150-
class="example-margin"
151-
[color]="color"
152-
[checked]="checked"
153-
[disabled]="disabled">
154-
BeatSaver's Authors
155-
</mat-slide-toggle>
116+
<div *ngIf="SyncService_BeastSaberFOLLOWING">
117+
<app-sync-saber-max-songs class="right" [reader]="SyncService_BeastSaberFOLLOWING"
118+
(update)="updateFeedSetting(SyncService_BeastSaberFOLLOWING)"></app-sync-saber-max-songs>
119+
<mat-slide-toggle [(ngModel)]="SyncService_BeastSaberFOLLOWING.IsEnabled"
120+
(change)="updateFeedSetting(SyncService_BeastSaberFOLLOWING)">
121+
BeastSaber's Following
122+
</mat-slide-toggle>
123+
<br><br>
124+
</div>
125+
<div *ngIf="SyncService_BeastSaberBOOKMARKS">
126+
<app-sync-saber-max-songs class="right"
127+
[reader]="SyncService_BeastSaberBOOKMARKS"
128+
(update)="updateFeedSetting(SyncService_BeastSaberBOOKMARKS)"
129+
></app-sync-saber-max-songs>
130+
<mat-slide-toggle [(ngModel)]="SyncService_BeastSaberBOOKMARKS.IsEnabled"
131+
(change)="updateFeedSetting(SyncService_BeastSaberBOOKMARKS)">
132+
BeastSaber's Bookmarks
133+
</mat-slide-toggle>
134+
<br><br>
135+
</div>
136+
137+
<div *ngIf="SyncService_BeatSaverAUTHOR">
138+
<app-sync-saber-max-songs class="right"
139+
[reader]="SyncService_BeatSaverAUTHOR"
140+
(update)="updateFeedSetting(SyncService_BeatSaverAUTHOR)"
141+
></app-sync-saber-max-songs>
142+
<mat-slide-toggle [(ngModel)]="SyncService_BeatSaverAUTHOR.IsEnabled"
143+
(change)="updateFeedSetting(SyncService_BeatSaverAUTHOR)">
144+
BeatSaver's Authors
145+
</mat-slide-toggle>
146+
</div>
156147
</div>
157148
<br><br><br>
158149
<h1>My Username</h1>
159150
<hr>
160151
<div class="username-container">
161152
<br><br><br>
162153
<mat-form-field class="input-width">
163-
<input matInput placeholder="Beast Saber Username" value="">
154+
<input matInput placeholder="Beast Saber Username" [(ngModel)]="BeastSaberUsername" (input)="setBeastSaberUsername()">
164155
</mat-form-field>
165156
</div>
166157
</div>

0 commit comments

Comments
 (0)