Finished settings

This commit is contained in:
2020-12-29 00:39:20 +01:00
parent bbe7b5849a
commit 5c17a540ee
15 changed files with 199 additions and 51 deletions
-3
View File
@@ -13,8 +13,5 @@ set_time_limit(298800);
// the future // the future
ini_set('memory_limit', '1024M'); ini_set('memory_limit', '1024M');
// git does not like empty folders
if (!file_exists("session")) mkdir("session");
// the entry point // the entry point
require "main.php"; require "main.php";
+8
View File
@@ -256,6 +256,14 @@ class optimizer
} }
} }
public static function repack_all(osu_library $library) : void
{
foreach ($library->get_library() as $key => $mapset)
{
self::repack($library, $mapset["key"]);
}
}
public static function repack(osu_library $library, string $key) : string public static function repack(osu_library $library, string $key) : string
{ {
$path = $library->get_library()[$key]["path"] ?? ""; $path = $library->get_library()[$key]["path"] ?? "";
+48
View File
@@ -0,0 +1,48 @@
<?php
class optimizer_settings
{
public $path;
private $osu_path = "";
public function __construct(string $path)
{
$this->path = $path;
if (file_exists($path))
{
$this->load();
}
}
public function load()
{
$raw = file_get_contents($this->path);
$json = json_decode($raw, true);
$this->osu_path = $json["osu_folder"] ?? "";
}
public function save()
{
$json = array();
$json["osu_path"] = $this->osu_path;
$raw = json_encode($json);
file_put_contents($this->path);
}
public function set_osu_path($path) : void
{
$sanitized = str_replace("\\", "/", $path);
$sanitized = rtrim($sanitized, "/");
if (file_exists($path))
{
$this->osu_path = $sanitized;
}
}
public function get_osu_path() : string
{
return $this->osu_path;
}
}
+1 -1
View File
@@ -178,7 +178,7 @@ class osu_library
public function get_root() : string public function get_root() : string
{ {
return $this->db["root"]; return $this->db["root"] ?? "";
} }
public function set_root(string $root) : void public function set_root(string $root) : void
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

+70 -12
View File
@@ -1,23 +1,46 @@
<?php <?php
// todo: whitelist / blacklist // todo: whitelist / blacklist
// todo: repack osz file
// todo: dupe checker // todo: dupe checker
// todo: stardiff deleter // todo: stardiff deleter
// todo: mode deleter // todo: mode deleter
// git does not like empty folders
if (!file_exists("session")) mkdir("session");
if (!file_exists("session/cache")) mkdir("session/cache");
if (!file_exists("session/osz")) mkdir("session/osz");
// imports // imports
require_once "libraries/osu_library.php"; require_once "libraries/osu_library.php";
require_once "libraries/optimizer.php"; require_once "libraries/optimizer.php";
require_once "libraries/optimizer_settings.php";
require_once "libraries/utils.php"; require_once "libraries/utils.php";
require_once "libraries/template_engine.php"; require_once "libraries/template_engine.php";
require_once "temp/dump.php"; require_once "temp/dump.php";
$settings_path = "session/settings.json";
$settings = new optimizer_settings($settings_path);
$lib = new osu_library(); $lib = new osu_library();
$display = "start"; $display = "start";
if ($lib->is_loaded()) if (isset($_GET["settings"]) || empty($settings->get_osu_path()))
{
// $display = "start";
}
else if (!empty($_GET["notice"]))
{
$display = "notice";
$notice = $_GET["notice"];
}
else if (!empty($_GET["warn"]) && !empty($_GET["forward"]))
{
$display = "warn";
$forward = $_GET["forward"];
$warn = $_GET["warn"];
}
else if ($lib->is_loaded())
{ {
$display = "main"; $display = "main";
} }
@@ -28,28 +51,39 @@ function redirect($path)
exit(0); // TERMINATE CURRENT SCRIPT! exit(0); // TERMINATE CURRENT SCRIPT!
} }
$te = new template_engine(); if (!empty($settings->get_osu_path()))
if ($display == "main")
{ {
if (isset($_GET["rescan"])) if (isset($_GET["rescan"]))
{ {
$lib->rescan_library(json_decode(file_get_contents("session/settings.json"), true)["osu_folder"]); $lib->rescan_library($settings->get_osu_path());
$lib->save_db(); $lib->save_db();
redirect("./"); redirect("./");
} }
if (isset($_GET["scan"])) if (isset($_GET["scan"]))
{ {
$lib->scan_library(json_decode(file_get_contents("session/settings.json"), true)["osu_folder"]); $lib->scan_library($settings->get_osu_path());
$lib->save_db(); $lib->save_db();
redirect("./"); redirect("./");
} }
}
if (isset($_GET["repack"]) && !empty($_GET["key"])) $te = new template_engine();
if ($display == "main")
{
if (isset($_GET["repack"]))
{ {
$key = $_GET["key"]; if (!empty($_GET["key"]))
$dl = @optimizer::repack($lib, $key); {
redirect("./" . $dl); $key = $_GET["key"];
$dl = @optimizer::repack($lib, $key);
redirect("./" . $dl);
}
else if (isset($_GET["all"]))
{
@optimizer::repack_all($lib);
redirect("./?notice=repack");
}
} }
if (isset($_GET["blacken"])) if (isset($_GET["blacken"]))
@@ -95,6 +129,7 @@ if ($display == "main")
} }
$options = array( $options = array(
[ "./?settings", "Settings", "Go back to the setup/settings screen." ],
[ "./?scan", "Scan", "Only scan for changes." ], [ "./?scan", "Scan", "Only scan for changes." ],
[ "./?rescan", "Force rescan", "Fully rescan the library. <i>(cached)</i>" ], [ "./?rescan", "Force rescan", "Fully rescan the library. <i>(cached)</i>" ],
[ "./?blacken", "Remove backgrounds", "Replace the background files with 1x1 black images." ], [ "./?blacken", "Remove backgrounds", "Replace the background files with 1x1 black images." ],
@@ -104,6 +139,7 @@ if ($display == "main")
[ "./?nohit", "Remove custom hitsounds", "Does not remove storyboard elements." ], [ "./?nohit", "Remove custom hitsounds", "Does not remove storyboard elements." ],
[ "./?purify", "Remove junk files", "Remove everything that isn't referenced in .osu or .osb files." ], [ "./?purify", "Remove junk files", "Remove everything that isn't referenced in .osu or .osb files." ],
[ "./?nuke", "NUKE", "Remove everything that isn't .osu or a referenced audio/background file. Note: old/bad maps might lose vital elements!" ], [ "./?nuke", "NUKE", "Remove everything that isn't .osu or a referenced audio/background file. Note: old/bad maps might lose vital elements!" ],
[ "./?warn=repack&forward=" . urlencode("./?repack&all"), "Repack all", "Repack all maps to .osz files. Note: you should not share exported maps; always use official osu! links." ],
[ "./splitter.php?page=1", "Explore", "TBD" ], [ "./splitter.php?page=1", "Explore", "TBD" ],
); );
@@ -136,14 +172,36 @@ if ($display == "main")
]); ]);
} }
echo $te->get_html();
// dump($lib, "lib"); // dump($lib, "lib");
} }
else if ($display == "notice")
{
$notice_upper = strtoupper($notice);
$te->set_block_template("CONTENT", "NOTICE_{$notice_upper}");
}
else if ($display == "warn")
{
$warn_upper = strtoupper($warn);
$te->set_block("WARN_FORWARD_LINK", $forward);
$te->set_block_template("CONTENT", "WARN_{$warn_upper}");
}
else if ($display == "start") else if ($display == "start")
{ {
if (!empty($_POST["osu_folder"]))
{
$settings->set_osu_path($_POST["osu_folder"]);
$settings->save();
redirect("./?scan");
}
$te->set_block_template("CONTENT", "SETTINGS");
if (!empty($settings->get_osu_path()))
{
$te->set_block_template("SETTINGS_BACK", "SETTINGS_BACK_SOURCE");
}
} }
echo $te->get_html();
// foreach ($lib->get_library() as $mapset) // foreach ($lib->get_library() as $mapset)
+8 -28
View File
@@ -52,36 +52,16 @@ if ($format == "html")
else $difftext = "difficulties"; else $difftext = "difficulties";
echo $value["id"] . ": " . $firstdiff["Metadata"]["Artist"] . " - " . $firstdiff["Metadata"]["Title"] . " (" . $diffcount . " {$difftext})\n"; echo $value["id"] . ": " . $firstdiff["Metadata"]["Artist"] . " - " . $firstdiff["Metadata"]["Title"] . " (" . $diffcount . " {$difftext})\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";
// }
} }
else // default to json in every other case else // default to json in every other case
{ {
$response = array(
"page" => $page,
"maxpage" => $maxpage,
"pagesize" => $pagesize,
"mapsets" => $partial_library ?? array(),
);
header('Content-Type: application/json'); header('Content-Type: application/json');
echo json_encode($partial_library); echo json_encode($response);
} }
+26 -4
View File
@@ -1,5 +1,6 @@
var xmlhttp = new XMLHttpRequest(); var xmlhttp = new XMLHttpRequest();
var page = 1; var page = 1;
var maxpage = 1;
var url = "./splitter.php?format=json&page="; var url = "./splitter.php?format=json&page=";
updateBrowser(); updateBrowser();
@@ -34,17 +35,38 @@ function nextPage() {
updateBrowser(); updateBrowser();
} }
function changeBrowser(mapsets) function firstPage() {
page = 1;
updateBrowser();
}
function lastPage() {
page = maxpage;
updateBrowser();
}
function changeBrowser(response)
{ {
var browser = document.getElementById("browser"); var browser = document.getElementById("browser");
var output = "<div>Page " + page.toString() + "</div>"; if (!response.page)
{
return;
}
if (response.maxpage)
{
maxpage = response.maxpage;
}
var output = "<div>Page " + page.toString() + "/" + response.maxpage.toString() + "</div>";
var mapsetTemplate = `{{ MAIN_BROWSER_TEMPLATE_MAPSET }}`; var mapsetTemplate = `{{ MAIN_BROWSER_TEMPLATE_MAPSET }}`;
var template = `{{ MAIN_BROWSER_TEMPLATE_DIFFICULTY }}`; var template = `{{ MAIN_BROWSER_TEMPLATE_DIFFICULTY }}`;
for (var mapsetKey of Object.keys(mapsets))
for (var mapsetKey of Object.keys(response.mapsets))
{ {
var mapset = mapsets[mapsetKey]; var mapset = response.mapsets[mapsetKey];
var subOutput = ""; var subOutput = "";
var summary = true; var summary = true;
+1 -1
View File
@@ -2,5 +2,5 @@
<details class="mapset"> <details class="mapset">
\{\{ MAP_DIFFICULTIES \}\} \{\{ MAP_DIFFICULTIES \}\}
</details> </details>
<a href="./?repack&key=\{\{ MAPSET_KEY \}\}">REPACK</a> <a href="./?repack&key=\{\{ MAPSET_KEY \}\}">[ REPACK ]</a>
</div> </div>
+7 -2
View File
@@ -16,8 +16,13 @@
</div> </div>
<div class="main-item"> <div class="main-item">
<h2 id="a">Browser</h2> <h2 id="a">Browser</h2>
<a onclick="prevPage()">[ Previous ]</a> &nbsp; <div class="browser-navbar">
<a onclick="nextPage()">[ Next ]</a> <a onclick="firstPage()">[ &lt;&lt; First ]</a> &nbsp;
<a onclick="prevPage()">[ &lt; Previous ]</a> &nbsp;
<a onclick="nextPage()">[ Next &gt; ]</a> &nbsp;
<a onclick="lastPage()">[ Last &gt;&gt; ]</a> &nbsp;
</div>
<div id="pagenumber"></div>
<div id="browser" class="browser"> <div id="browser" class="browser">
<!-- todo JS --> <!-- todo JS -->
</div> </div>
+1
View File
@@ -0,0 +1 @@
Check your session/osz/ folder for the exported files.
+1
View File
@@ -0,0 +1 @@
<input type="submit" form="cancelform" value="Cancel" />
+11
View File
@@ -0,0 +1,11 @@
<div class="warn">
<h2>SETTINGS</h2>
<form method="POST" action="./?settings">
<label for="osu_folder">osu! folder: </label>
<input type="text" id="osu_folder" name="osu_folder" placeholder="C:\Games\osu!" /><br />
<p style="font-size:0.9em">(Use a fully qualified real path preferably without symlinks. Relative paths are supported in theory, but try to use absolute paths.)</p>
{{ SETTINGS_BACK }}
<input type="submit" value="Save" />
</form>
<form id="cancelform" method="GET" action="./"></form>
</div>
+11
View File
@@ -110,4 +110,15 @@ details.mapset summary::-webkit-details-marker {
.mapset[open] summary .map { .mapset[open] summary .map {
background-color: #444444; background-color: #444444;
}
.warn h2 {
margin: 0;
text-align: center;
}
.warn {
max-width: 400px;
margin: auto;
margin-top: 30px;
border: 1px solid white;
padding: 10px;
} }
+6
View File
@@ -0,0 +1,6 @@
<div class="warn">
<h2>WARNING!</h2>
<p>Repacking all beatmaps will take a LONG time. Are you sure you want to continue?</p>
<p style="text-align:center;"><a href="{{ WARN_FORWARD_LINK }}">[ Yes ]</a> &nbsp;&nbsp; <a href="./?">[ No ]</a></p>
<p style="font-size:0.9em">(The repacking will start after clicking the "yes" button. If you are unsure whether you clicked it, check your session/osz/ folder; there should be some .osz files already.)</p>
</div>