+
+
# Welcome to [nise.moe]
+
wtf is this?
+
This application will automatically crawl [osu!std] top scores and search for stolen replays or obvious relax/timewarp scores.
+
It started collecting replays on 2024-01-12
+
This website is not affiliated with the osu! game nor ppy. It is an unrelated, unaffiliated, 3rd party project.
+
If you have any suggestions or want to report bugs, feel free to join the Discord server below.
+
+
# do you use rss? (nerd)
+
you can keep up with newly detected scores with the rss feed, subscribe to it using your favorite reader.
+
-
-
-

-
-
new scores [live]
-
new scores [disconnected]
-
-
-
-
-
- nothing yet...
- new scores will appear here.
-
-
-
+
+
+
+
+
+
+
+

+
+
new scores [live]
+
new scores [disconnected]
+
+
+
+
+
+ nothing yet...
+ new scores will appear here.
+
+
+
+
+
+
diff --git a/nise-frontend/src/app/home/home.component.ts b/nise-frontend/src/app/home/home.component.ts
index 24fdecf..b16911f 100644
--- a/nise-frontend/src/app/home/home.component.ts
+++ b/nise-frontend/src/app/home/home.component.ts
@@ -6,7 +6,8 @@ import {RxStompService} from "../../corelib/stomp/stomp.service";
import {Message} from "@stomp/stompjs/esm6";
import {ReplayData} from "../replays";
import {DecimalPipe, NgForOf, NgIf} from "@angular/common";
-import {RouterLink} from "@angular/router";
+import {Router, RouterLink} from "@angular/router";
+import {HttpClient} from "@angular/common/http";
interface Statistics {
total_beatmaps: number;
@@ -16,6 +17,10 @@ interface Statistics {
total_replay_similarity: number;
}
+interface AnalyzeReplayResponse {
+ id: string;
+}
+
@Component({
selector: 'app-home',
standalone: true,
@@ -36,8 +41,12 @@ export class HomeComponent implements OnInit, OnDestroy {
statistics: Statistics | null = null;
wantsConnection: boolean = true;
+ loading = false;
+
constructor(
private localCacheService: LocalCacheService,
+ private router: Router,
+ private httpClient: HttpClient,
private rxStompService: RxStompService,
) { }
@@ -92,4 +101,27 @@ export class HomeComponent implements OnInit, OnDestroy {
);
}
+ uploadReplay(event: any) {
+ if (event.target.files.length <= 0) {
+ return;
+ }
+
+ this.loading = true;
+
+ const file: File = event.target.files[0];
+
+ const formData = new FormData();
+ formData.append('replay', file);
+
+ this.httpClient.post
(`${environment.apiUrl}/analyze`, formData).subscribe({
+ next: (response) => {
+ this.loading = false;
+ this.router.navigate(['/c/' + response.id ]);
+ },
+ error: (error) => {
+ this.loading = false;
+ },
+ });
+ }
+
}
diff --git a/nise-frontend/src/assets/style.css b/nise-frontend/src/assets/style.css
index f7b6571..26d98c1 100644
--- a/nise-frontend/src/assets/style.css
+++ b/nise-frontend/src/assets/style.css
@@ -59,7 +59,7 @@ html {
@media screen and (min-width: 768px) {
.main {
- width: 820px !important;
+ width: 850px !important;
}
.header {