Finished settings
This commit is contained in:
@@ -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";
|
||||||
@@ -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"] ?? "";
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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>
|
<div class="browser-navbar">
|
||||||
<a onclick="nextPage()">[ Next ]</a>
|
<a onclick="firstPage()">[ << First ]</a>
|
||||||
|
<a onclick="prevPage()">[ < Previous ]</a>
|
||||||
|
<a onclick="nextPage()">[ Next > ]</a>
|
||||||
|
<a onclick="lastPage()">[ Last >> ]</a>
|
||||||
|
</div>
|
||||||
|
<div id="pagenumber"></div>
|
||||||
<div id="browser" class="browser">
|
<div id="browser" class="browser">
|
||||||
<!-- todo JS -->
|
<!-- todo JS -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Check your session/osz/ folder for the exported files.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<input type="submit" form="cancelform" value="Cancel" />
|
||||||
@@ -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>
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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> <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>
|
||||||
Reference in New Issue
Block a user