From bf60071b839ae55c6933820ee4b738ae6b1e6fce Mon Sep 17 00:00:00 2001 From: Thayol Date: Sat, 26 Dec 2020 16:42:51 +0100 Subject: [PATCH] Splitter json support --- libraries/osu_library.php | 34 ++++++++++--- main.php | 6 ++- splitter.php | 101 +++++++++++++++++++++++--------------- 3 files changed, 93 insertions(+), 48 deletions(-) diff --git a/libraries/osu_library.php b/libraries/osu_library.php index c5918e7..213a8ef 100644 --- a/libraries/osu_library.php +++ b/libraries/osu_library.php @@ -27,11 +27,24 @@ class osu_library $root = str_ireplace("\\", "/", $root); // fuck windows backslash $root = rtrim($root, "/"); // remove trailing slash(es) - $this->set_root($root); // update db entry - - $glob = glob($this->get_library_folder() . "/*", GLOB_ONLYDIR); + // giving a different library should always cause a full rescan + if ($this->get_root() !== $root) + { + $this->rescan_library($root); + } $library = $this->get_library(); + $library_folder = $this->get_library_folder(); + foreach ($library as $key => $entry) + { + if (!file_exists($library_folder . "/" . $key)) + { + $this->unset_library_key($key); + }; + } + + $glob = glob($library_folder . "/*", GLOB_ONLYDIR); + natsort($glob); // i like wasting your processing power foreach($glob as $folder) { @@ -54,6 +67,7 @@ class osu_library public function rescan_library(string $root) : void { $this->clear_library(); + $this->set_root($root); // update db entry $this->scan_library($root); } @@ -88,7 +102,7 @@ class osu_library if ($changed) { - unset($this->db["library"][$key]); + $this->unset_library_key($key); $this->scan_add_folder($folder); } } @@ -142,14 +156,22 @@ class osu_library "difficulties" => $difficulties, ); - // if (!isset($this->db["library"])) $this->db["library"] = array(); - + $this->add_to_library($key, $entry); + } + + + public function add_to_library(string $key, array $entry) : void + { // init empty if (!isset($this->db["library"])) $this->db["library"] = array(); $this->db["library"][$key] = $entry; } + public function unset_library_key(string $key) : void + { + if (isset($this->db["library"][$key])) unset($this->db["library"][$key]); + } public function get_root() : string { diff --git a/main.php b/main.php index f6ac867..a824e68 100644 --- a/main.php +++ b/main.php @@ -86,8 +86,10 @@ foreach ($lib->get_library() as $set) $proc_time += $map["parsing_time"] ?? 0; } } -echo "

Parse time: " . $proc_time . " seconds

"; -echo "

Scan time: " . $lib->get_scan_time() . " seconds

"; +$proc_time = round($proc_time, 3); +$scan_time = round($lib->get_scan_time(), 3); +echo "

Total parse time: " . $proc_time . " seconds

"; +echo "

Scan time: " . $scan_time . " seconds

"; // foreach ($lib->get_library() as $mapset) // { // echo '
'; diff --git a/splitter.php b/splitter.php index 3d7b24c..45a808b 100644 --- a/splitter.php +++ b/splitter.php @@ -1,10 +1,13 @@ get_library(); @@ -15,52 +18,70 @@ if ($page > $maxpage) $page = $maxpage; $startindex = ($page - 1) * $pagesize; -$start = file_get_contents("resources/start.html"); -$start = str_replace("{{ STYLE }}", file_get_contents("resources/style.css"), $start); -echo $start; - $partial_library = array_slice($library, $startindex, $pagesize); -$previous = $page - 1; -if ($previous < 1) $previous = 1; -$next = $page + 1; -if ($next > $maxpage) $next = $maxpage; -echo '

Page ' . $page . '/' . $maxpage . ' of osu! songs

'; -echo '[Previous] '; -echo '[Next] '; -echo "
";
-// print_r($partial_library);
-// foreach ($partial_library as $key => $value)
-// {
-	// $firstdiff = $value["difficulties"][array_key_first($value["difficulties"])];
-	// echo $firstdiff["artist"] . " - " . $firstdiff["title"] . " (" . count($value["difficulties"]) . " difficulties)\n";
-// }
-$proc_times = array();
-foreach ($library as $key => $set)
+if ($format == "html")
 {
-	$tiempo = 0;
-	foreach ($set["difficulties"] as $map)
-	{
-		$tiempo += $map["parsing_time"];
-	}
-	$proc_times[$key] = $tiempo;
-}
+	$previous = $page - 1;
+	if ($previous < 1) $previous = 1;
+	$next = $page + 1;
+	if ($next > $maxpage) $next = $maxpage;
+	
+	$start = file_get_contents("resources/start.html");
+	$start = str_replace("{{ STYLE }}", file_get_contents("resources/style.css"), $start);
+	echo $start;
 
-arsort($proc_times);
-
-foreach ($proc_times as $key => $tiempo)
-{
-	$value = $library[$key];
-	$firstdiff = $value["difficulties"][array_key_first($value["difficulties"])];
-	$diffcount = 0;
-	foreach ($value["difficulties"] as $diff)
+	echo '

Page ' . $page . '/' . $maxpage . ' of osu! songs

'; + echo '[Previous] '; + echo '[Next] '; + echo "
";
+	// print_r($partial_library);
+	foreach ($partial_library as $key => $value)
 	{
-		if ($diff["format"] != "storyboard")
+		$firstdiff = $value["difficulties"][array_key_first($value["difficulties"])];
+		$diffcount = 0;
+		foreach ($value["difficulties"] as $diff)
 		{
-			$diffcount++;
+			if ($diff["format"] != "storyboard")
+			{
+				$diffcount++;
+			}
 		}
+		if ($diffcount == 1) $difftext = "difficulty";
+		else $difftext = "difficulties";
+		echo $value["id"] . ": " . $firstdiff["Metadata"]["Artist"] . " - " . $firstdiff["Metadata"]["Title"] . " (" . $diffcount . " {$difftext})\n";
 	}
-	echo str_pad(round($tiempo, 5), 7, "0") . "s " . $value["id"] . ": " . $firstdiff["Metadata"]["Artist"] . " - " . $firstdiff["Metadata"]["Title"] . " (" . $diffcount . " difficulties)\n";
+	// $proc_times = array();
+	// foreach ($library as $key => $set)
+	// {
+		// $tiempo = 0;
+		// foreach ($set["difficulties"] as $map)
+		// {
+			// $tiempo += $map["parsing_time"];
+		// }
+		// $proc_times[$key] = $tiempo;
+	// }
+
+	// arsort($proc_times);
+
+	// foreach ($proc_times as $key => $tiempo)
+	// {
+		// $value = $library[$key];
+		// $firstdiff = $value["difficulties"][array_key_first($value["difficulties"])];
+		// $diffcount = 0;
+		// foreach ($value["difficulties"] as $diff)
+		// {
+			// if ($diff["format"] != "storyboard")
+			// {
+				// $diffcount++;
+			// }
+		// }
+		// echo str_pad(round($tiempo, 5), 7, "0") . "s " . $value["id"] . ": " . $firstdiff["Metadata"]["Artist"] . " - " . $firstdiff["Metadata"]["Title"] . " (" . $diffcount . " difficulties)\n";
+	// }
 }
-echo "
"; \ No newline at end of file +else // default to json in every other case +{ + header('Content-Type: application/json'); + echo json_encode($partial_library); +} \ No newline at end of file