Added Source class to parse HandBrake output
Added a Source class which executes HandBrake -t 0 to list the available titles and streams in a given source. Added a placeholder on the source-details page to display HandBrake output
This commit is contained in:
43
HandBrakeCluster/Rips/Source.class.php
Normal file
43
HandBrakeCluster/Rips/Source.class.php
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class HandBrakeCluster_Rips_Source {
|
||||||
|
|
||||||
|
protected $source;
|
||||||
|
protected $output;
|
||||||
|
|
||||||
|
public function __construct($source) {
|
||||||
|
$this->source = $source;
|
||||||
|
|
||||||
|
$this->scan();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function scan() {
|
||||||
|
$source_shell = escapeshellarg($this->source);
|
||||||
|
$handbrake_cmd = "HandBrakeCLI -i {$source_shell} -t 0";
|
||||||
|
|
||||||
|
$handbrake_pid = popen($handbrake_cmd, 'r');
|
||||||
|
$handbrake_output = fread($handbrake_pid, 1024);
|
||||||
|
while (!feof($handbrake_pid)) {
|
||||||
|
$handbrake_output = fread($handbrake_pid, 1024);
|
||||||
|
}
|
||||||
|
pclose($handbrake_pid);
|
||||||
|
|
||||||
|
|
||||||
|
// Process the output
|
||||||
|
$lines = explode("\n", $handbrake_output);
|
||||||
|
foreach ($lines as $line) {
|
||||||
|
// Skip any line that doesn't begin with a + (with optional leading whitespace)
|
||||||
|
if ( ! preg_match('/\s*\+/', $line)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->output .= $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function output() {
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -6,19 +6,22 @@ $config = $main->config();
|
|||||||
|
|
||||||
// Grab the name of this source
|
// Grab the name of this source
|
||||||
$source_id = $req->get('id');
|
$source_id = $req->get('id');
|
||||||
$source = base64_decode(str_replace('-', '/', $source_id));
|
$source_path = base64_decode(str_replace('-', '/', $source_id));
|
||||||
$real_source = realpath($source);
|
$real_source_path = realpath($source_path);
|
||||||
|
|
||||||
// Ensure the source is a valid directory, and lies below the configured source_dir
|
// Ensure the source is a valid directory, and lies below the configured source_dir
|
||||||
if (!is_dir($source)) {
|
if (!is_dir($source_path)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$real_source_dir = realpath($config->get('rips.source_dir'));
|
$real_source_dir = realpath($config->get('rips.source_dir'));
|
||||||
if (substr($real_source, 0, strlen($real_source_dir)) != $real_source_dir) {
|
if (substr($real_source_path, 0, strlen($real_source_dir)) != $real_source_dir) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$source = new HandBrakeCluster_Rips_Source($source_path);
|
||||||
|
|
||||||
|
$this->smarty->assign('source_path', $source_path);
|
||||||
$this->smarty->assign('source', $source);
|
$this->smarty->assign('source', $source);
|
||||||
|
$this->smarty->assign('output', $source->output());
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -12,7 +12,11 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Source</th>
|
<th>Source</th>
|
||||||
<td>{$source|escape:"html"}</td>
|
<td>{$source_path|escape:"html"}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Output</th>
|
||||||
|
<td>{$output|escape:"html"}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
Reference in New Issue
Block a user