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 "
";
-// 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