get_backgrounds() as $file) self::blacken_image($file);
}
public static function remove_videos(osu_library $library)
{
foreach ($library->get_videos() as $file)
{
if (file_exists($file)) unlink($file);
}
}
public static function remove_storyboards(osu_library $library) : void
{
// exclude vital files if they are used in the storyboard
$storyboards_safe = $library->get_storyboards();
$storyboards_safe = array_diff($storyboards_safe, $library->get_backgrounds());
$storyboards_safe = array_diff($storyboards_safe, $library->get_audiofiles());
foreach ($storyboards_safe as $file)
{
if (file_exists($file)) unlink($file);
}
foreach ($library->get_osb_files() as $file)
{
if (file_exists($file)) unlink($file);
}
}
private static function build_removand_sublist(array &$queue, string $folder, bool $single_level = false)
{
foreach (glob(utils::globsafe($folder) . "/*") as $file)
{
if (is_dir($file))
{
if (!$single_level) self::build_removand_sublist($queue, $file, false); // recursion
}
else
{
$queue[] = $file;
}
}
}
public static function build_removand_list(osu_library $library, bool $single_level = false) : array
{
$queue = array();
$times_c = array();
$time_1 = microtime(true);
foreach ($library->get_folders() as $folder)
{
$time_start = microtime(true);
self::build_removand_sublist($queue, $folder, $single_level);
$time_end = microtime(true);
$times_c[$folder] = $time_end - $time_start;
}
$time_2 = microtime(true);
arsort($times_c);
$times_c = array_splice($times_c, 0, 100);
$time_3 = $time_2-$time_1;
echo "{$time_3}
";
echo "
"; print_r($times_c); echo ""; return $queue; } public static function build_excluded_list(osu_library $library) : array { $background_files = $library->get_backgrounds(); $video_files = $library->get_videos(); $audio_files = $library->get_audiofiles(); $storyboard_files = $library->get_storyboards(); $hitsound_files = $library->get_hitsounds(); // $osu_files = $library->get_osu_files(); // $osb_files = $library->get_osb_files(); $physical_excluded = $library->get_parsed_files(); $essential_excluded = array_merge($background_files, $video_files, $audio_files); // $physical_excluded = array_merge($osb_files, $osu_files); $other_excluded = array_merge($storyboard_files, $hitsound_files); $excluded = array_merge($essential_excluded, $physical_excluded, $other_excluded); return $excluded; } public static function cut_extension(string $path) : string { $directory = pathinfo($path, PATHINFO_DIRNAME) ?? ""; if (!empty($directory)) $directory .= "/"; // append slash if set return $directory . (pathinfo($path, PATHINFO_FILENAME) ?? ""); } // because peppy thinks file extensions are wildcards: // you can have image.mp3 in storyboards in jfif // and you can have ogg vorbis hitsounds in mysound.wav.png.whatever public static function array_diff_ver_peppy(array &$files, array &$exclusions) : array { // osu! is case insensitive $files_lowercase = array(); foreach ($files as $key => $value) { $files_lowercase[$key] = self::cut_extension(mb_strtolower($value)); } $exclusions_lowercase = array(); foreach ($exclusions as $key => $value) { $exclusions_lowercase[$key] = self::cut_extension(mb_strtolower($value)); } // return values from the original, but only the ones that did not get removed return array_intersect_key($files, array_diff($files_lowercase, $exclusions_lowercase)); } public static function remove_skins(osu_library $library) : void { $removand = self::build_removand_list($library, true); $exclusions = self::build_excluded_list($library); $junk_files = self::array_diff_ver_peppy($removand, $exclusions); foreach ($junk_files as $file) { if (self::is_skinnable_image($file) || self::is_skinnable_other($file)) { // if (file_exists($file)) unlink($file); echo $file . "