Finished settings
This commit is contained in:
@@ -13,8 +13,5 @@ set_time_limit(298800);
|
||||
// the future
|
||||
ini_set('memory_limit', '1024M');
|
||||
|
||||
// git does not like empty folders
|
||||
if (!file_exists("session")) mkdir("session");
|
||||
|
||||
// the entry point
|
||||
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
|
||||
{
|
||||
$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
|
||||
{
|
||||
return $this->db["root"];
|
||||
return $this->db["root"] ?? "";
|
||||
}
|
||||
|
||||
public function set_root(string $root) : void
|
||||
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
@@ -1,23 +1,46 @@
|
||||
<?php
|
||||
// todo: whitelist / blacklist
|
||||
// todo: repack osz file
|
||||
// todo: dupe checker
|
||||
// todo: stardiff 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
|
||||
require_once "libraries/osu_library.php";
|
||||
require_once "libraries/optimizer.php";
|
||||
require_once "libraries/optimizer_settings.php";
|
||||
require_once "libraries/utils.php";
|
||||
require_once "libraries/template_engine.php";
|
||||
require_once "temp/dump.php";
|
||||
|
||||
|
||||
$settings_path = "session/settings.json";
|
||||
$settings = new optimizer_settings($settings_path);
|
||||
$lib = new osu_library();
|
||||
|
||||
$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";
|
||||
}
|
||||
@@ -28,28 +51,39 @@ function redirect($path)
|
||||
exit(0); // TERMINATE CURRENT SCRIPT!
|
||||
}
|
||||
|
||||
$te = new template_engine();
|
||||
if ($display == "main")
|
||||
if (!empty($settings->get_osu_path()))
|
||||
{
|
||||
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();
|
||||
redirect("./");
|
||||
}
|
||||
|
||||
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();
|
||||
redirect("./");
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_GET["repack"]) && !empty($_GET["key"]))
|
||||
$te = new template_engine();
|
||||
if ($display == "main")
|
||||
{
|
||||
if (isset($_GET["repack"]))
|
||||
{
|
||||
$key = $_GET["key"];
|
||||
$dl = @optimizer::repack($lib, $key);
|
||||
redirect("./" . $dl);
|
||||
if (!empty($_GET["key"]))
|
||||
{
|
||||
$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"]))
|
||||
@@ -95,6 +129,7 @@ if ($display == "main")
|
||||
}
|
||||
|
||||
$options = array(
|
||||
[ "./?settings", "Settings", "Go back to the setup/settings screen." ],
|
||||
[ "./?scan", "Scan", "Only scan for changes." ],
|
||||
[ "./?rescan", "Force rescan", "Fully rescan the library. <i>(cached)</i>" ],
|
||||
[ "./?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." ],
|
||||
[ "./?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!" ],
|
||||
[ "./?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" ],
|
||||
);
|
||||
|
||||
@@ -136,15 +172,37 @@ if ($display == "main")
|
||||
]);
|
||||
}
|
||||
|
||||
echo $te->get_html();
|
||||
|
||||
// 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")
|
||||
{
|
||||
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)
|
||||
// {
|
||||
|
||||
+8
-28
@@ -52,36 +52,16 @@ if ($format == "html")
|
||||
else $difftext = "difficulties";
|
||||
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
|
||||
{
|
||||
$response = array(
|
||||
"page" => $page,
|
||||
"maxpage" => $maxpage,
|
||||
"pagesize" => $pagesize,
|
||||
"mapsets" => $partial_library ?? array(),
|
||||
);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($partial_library);
|
||||
echo json_encode($response);
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
var xmlhttp = new XMLHttpRequest();
|
||||
var page = 1;
|
||||
var maxpage = 1;
|
||||
var url = "./splitter.php?format=json&page=";
|
||||
updateBrowser();
|
||||
|
||||
@@ -34,17 +35,38 @@ function nextPage() {
|
||||
updateBrowser();
|
||||
}
|
||||
|
||||
function changeBrowser(mapsets)
|
||||
function firstPage() {
|
||||
page = 1;
|
||||
updateBrowser();
|
||||
}
|
||||
|
||||
function lastPage() {
|
||||
page = maxpage;
|
||||
updateBrowser();
|
||||
}
|
||||
|
||||
function changeBrowser(response)
|
||||
{
|
||||
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 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 summary = true;
|
||||
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
<details class="mapset">
|
||||
\{\{ MAP_DIFFICULTIES \}\}
|
||||
</details>
|
||||
<a href="./?repack&key=\{\{ MAPSET_KEY \}\}">REPACK</a>
|
||||
↑ <a href="./?repack&key=\{\{ MAPSET_KEY \}\}">[ REPACK ]</a> ↑
|
||||
</div>
|
||||
+7
-2
@@ -16,8 +16,13 @@
|
||||
</div>
|
||||
<div class="main-item">
|
||||
<h2 id="a">Browser</h2>
|
||||
<a onclick="prevPage()">[ Previous ]</a>
|
||||
<a onclick="nextPage()">[ Next ]</a>
|
||||
<div class="browser-navbar">
|
||||
<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">
|
||||
<!-- todo JS -->
|
||||
</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>
|
||||
@@ -111,3 +111,14 @@ details.mapset summary::-webkit-details-marker {
|
||||
.mapset[open] summary .map {
|
||||
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