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
|
||||
$source_id = $req->get('id');
|
||||
$source = base64_decode(str_replace('-', '/', $source_id));
|
||||
$real_source = realpath($source);
|
||||
$source_path = base64_decode(str_replace('-', '/', $source_id));
|
||||
$real_source_path = realpath($source_path);
|
||||
|
||||
// Ensure the source is a valid directory, and lies below the configured source_dir
|
||||
if (!is_dir($source)) {
|
||||
if (!is_dir($source_path)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$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;
|
||||
}
|
||||
|
||||
$source = new HandBrakeCluster_Rips_Source($source_path);
|
||||
|
||||
$this->smarty->assign('source_path', $source_path);
|
||||
$this->smarty->assign('source', $source);
|
||||
$this->smarty->assign('output', $source->output());
|
||||
|
||||
?>
|
||||
@@ -12,7 +12,11 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<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>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Reference in New Issue
Block a user