This commit is contained in:
2019-09-29 03:39:18 -07:00
commit 82d79df388
9 changed files with 610 additions and 0 deletions

157
Rollup.php Executable file
View File

@@ -0,0 +1,157 @@
<?php
// Rollup
$version = file_get_contents(__DIR__."/version.txt");
// Includes
require (__DIR__."/functions.php");
// Load preferences
$prefs_file = "/Users/".get_current_user()."/Library/Preferences/org.profiteroles.Rollup.php";
if (!file_exists($prefs_file)) {
if (!copy(__DIR__."/prefs.php",$prefs_file)) {
echo "Error creating preferences file";
die;
}
}
$p = unserialize(file_get_contents($prefs_file));
$p['etbin'] = __DIR__."/exiftool";
$p['pfiletypes'] = array("jpg","jpeg","dng","heic","png","gif");
$p['vfiletypes'] = array("mov","mp4","m4v");
$p['screenshot_dims'] = array(320,640,750,828,1125,1242);
// Enable this option to verify newnames against those made with a prior version of rollup
$p['debug_verify_names'] = 0;
// No files dragged
array_shift($argv);
switch (@$argv[0]) {
case "Preferences...":
if (!exec("php ".__DIR__."/RollupPrefs.php")) {
echo "\nALERT:Warning|Google did not accept your API key\n";
}
die;
case "Check for Updates...":
$curr_version = @file_get_contents("https://www.profiteroles.org/git/profiteroles/Rollup/raw/master/version.txt");
if (!$curr_version) {
echo "\nALERT:Can't connect|Error checking for latest version\n";
die;
}
if ($curr_version > $version) {
if(askMulti("Rollup ".$curr_version." is available (you have ".$version.")", array("Cancel","Download")) == 1) {
exec("open https://www.profiteroles.org/git/profiteroles/Rollup");
echo "QUITAPP\n";
} else {
die;
}
} else {
echo "\nALERT:Up-to-date|".$version." is the latest version.\n";
die;
}
}
function alert($string, $title = "Warning") {
echo "\nALERT:".$title."|".$string."\n";
}
// Build list of valid dropped files
foreach ($argv as $target) {
if (is_dir($target)) {
$it = new RecursiveDirectoryIterator($target);
foreach(new RecursiveIteratorIterator($it) as $file) {
if (in_array(strtolower(pathinfo($file,PATHINFO_EXTENSION)), $p['allowed'])) {
$files[] = $file->getpathname();
}
}
} elseif (in_array(strtolower(pathinfo($target,PATHINFO_EXTENSION)), $p['allowed'])) {
$files[] = $target;
}
}
if (!@$files) { echo "\nALERT:No supported files|Supported filetypes: ".implode(", ",$p['allowed'])."\n"; die; } else { sort($files); }
if (count($files) > $p['limit']) { if (!ask("Really process ".count($files)." files?")) { die; } }
// Process files
$i = 0;
foreach ($files as $file) {
unset($parts, $ext, $mparts, $z, $e);
$parts = pathinfo($file);
$ext = strtolower($parts['extension']);
$z['%FILE'] = $parts['filename'];
$z['%EXT'] = $parts['extension'];
if ($p['debug_verify_names']) {
$p['maxlength'] = 999;
$z['%FILE'] = substr($parts['filename'],-8,8);
echo "[VERIFY]";
} else {
echo $parts['basename'];
}
if (strlen($parts['basename']) > $p['maxlength']) {
echo "-> SKIP\n";
} else {
$raw = eval("return ".shell_exec($p['etbin']." -php ".escapeshellarg($file)));
if (is_array($raw[0])) { $e = $raw[0]; } else { echo "Exiftool error\n"; die; }
$z['%DTO'] = formatDateTime($e);
$z['%DUR'] = formatDuration($e);
$z['%SW'] = formatSoftware($e,$p);
$z['%MODEL'] = formatModel($e);
$z['%PLACE'] = formatPlace($e,$p);
if (in_array($ext,$p['pfiletypes'])) {
$newname = str_replace(array_keys($z),array_values($z),$p['pt']);
} elseif (in_array($ext,$p['vfiletypes'])) {
$newname = str_replace(array_keys($z),array_values($z),$p['vt']);
}
$figureoutabetterwaytodothis_a = array("____","___","__");
$figureoutabetterwaytodothis_b = array("_","_","_");
$newname = str_replace($figureoutabetterwaytodothis_a,$figureoutabetterwaytodothis_b,$newname);
if (!@$newname) {
echo " -> ERROR\n";
} else {
echo " -> ".$newname."\n";
if ($p['debug_verify_names']) {
if ($parts['basename'] != $newname) {
echo "FAIL";
echo "\nALERT:Filename changed|".$parts['basename']." VS ".$newname;;
} else {
echo "pass";
}
} else {
if (!@$p['dry_run']) {
rename($file,$parts['dirname']."/".$newname);
} else {
echo "\nDisable dry run to rename files!";
}
}
}
echo updateProgress($i,count($files));
$i++;
}
}
?>