@@ -16,13 +16,69 @@ setting up the necessary programs to validate the checksum, see below for the gi | |||||
## Requirements | ## Requirements | ||||
* PHP 7.0+ | * PHP 7.0+ | ||||
* Python3.4+ | * Python3.4+ | ||||
* chardet | |||||
* eac_logchecker.py | |||||
* xld_logchecker.py | |||||
* [chardet](https://github.com/chardet/chardet) | |||||
* [eac_logchecker.py](https://github.com/OPSnet/eac_logchecker.py) | |||||
* [xld_logchecker.py](https://github.com/OPSnet/xld_logchecker.py) | |||||
## Installation | ## Installation | ||||
``` | ``` | ||||
$ composer require orpheusnet/logchecker | $ composer require orpheusnet/logchecker | ||||
$ pip3 install chardet | |||||
$ pip3 install eac-logchecker | |||||
$ pip3 install chardet eac-logchecker xld-logchecker | |||||
``` | |||||
## Usage | |||||
### CLI | |||||
``` | |||||
$ logchecker list | |||||
Logchecker by Orpheus 0.5.0 | |||||
Usage: | |||||
command [options] [arguments] | |||||
Options: | |||||
-h, --help Display this help message | |||||
-V, --version Display this application version | |||||
Available commands: | |||||
analyze analyze log file | |||||
help Displays help for a command | |||||
list Lists commands | |||||
$ logchecker analyze --help | |||||
Description: | |||||
analyze log file | |||||
Usage: | |||||
analyze [options] [--] <file> | |||||
Arguments: | |||||
file Log file to analyze | |||||
Options: | |||||
--output Print the HTML log text | |||||
-h, --help Display this help message | |||||
Help: | |||||
This command analyzes a log file | |||||
$ logchecker analyze tests/logs/wgdbcm.log | |||||
Score : 57 | |||||
Checksum: false | |||||
Details : | |||||
[Notice] Translated log from Русский (Russian) to English. | |||||
EAC version older than 0.99 (-30 points) | |||||
Could not verify read mode (-1 point) | |||||
Could not verify read offset (-1 point) | |||||
Could not verify null samples | |||||
Could not verify gap handling (-10 points) | |||||
Could not verify id3 tag setting (-1 point) | |||||
``` | |||||
### Code | |||||
``` | |||||
<?php | |||||
$logchecker = new OrpheusNET\Logchecker\Logchecker(); | |||||
$logchecker->add_file('path/to/file.log'); | |||||
list($score, $details, $checksum, $log_text) = $logchecker->parse(); | |||||
``` | ``` |
@@ -18,6 +18,7 @@ | |||||
"require": { | "require": { | ||||
"php": ">=7", | "php": ">=7", | ||||
"ext-mbstring": "*", | "ext-mbstring": "*", | ||||
"ext-yaml": "*", | |||||
"symfony/console": "^4.1" | "symfony/console": "^4.1" | ||||
}, | }, | ||||
"require-dev": { | "require-dev": { | ||||
@@ -4,20 +4,20 @@ | |||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | ||||
"This file is @generated automatically" | "This file is @generated automatically" | ||||
], | ], | ||||
"content-hash": "2a366400c7ef056c432e0380c4b48f5e", | |||||
"content-hash": "fa52b95b461ba9af6f89994e631f51e4", | |||||
"packages": [ | "packages": [ | ||||
{ | { | ||||
"name": "symfony/console", | "name": "symfony/console", | ||||
"version": "v4.1.7", | |||||
"version": "v4.1.8", | |||||
"source": { | "source": { | ||||
"type": "git", | "type": "git", | ||||
"url": "https://github.com/symfony/console.git", | "url": "https://github.com/symfony/console.git", | ||||
"reference": "432122af37d8cd52fba1b294b11976e0d20df595" | |||||
"reference": "c74f4d1988dfcd8760273e53551694da32b056d0" | |||||
}, | }, | ||||
"dist": { | "dist": { | ||||
"type": "zip", | "type": "zip", | ||||
"url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595", | |||||
"reference": "432122af37d8cd52fba1b294b11976e0d20df595", | |||||
"url": "https://api.github.com/repos/symfony/console/zipball/c74f4d1988dfcd8760273e53551694da32b056d0", | |||||
"reference": "c74f4d1988dfcd8760273e53551694da32b056d0", | |||||
"shasum": "" | "shasum": "" | ||||
}, | }, | ||||
"require": { | "require": { | ||||
@@ -72,7 +72,7 @@ | |||||
], | ], | ||||
"description": "Symfony Console Component", | "description": "Symfony Console Component", | ||||
"homepage": "https://symfony.com", | "homepage": "https://symfony.com", | ||||
"time": "2018-10-31T09:30:44+00:00" | |||||
"time": "2018-11-26T14:00:40+00:00" | |||||
}, | }, | ||||
{ | { | ||||
"name": "symfony/polyfill-mbstring", | "name": "symfony/polyfill-mbstring", | ||||
@@ -1057,28 +1057,28 @@ | |||||
}, | }, | ||||
{ | { | ||||
"name": "sebastian/environment", | "name": "sebastian/environment", | ||||
"version": "3.1.0", | |||||
"version": "4.0.1", | |||||
"source": { | "source": { | ||||
"type": "git", | "type": "git", | ||||
"url": "https://github.com/sebastianbergmann/environment.git", | "url": "https://github.com/sebastianbergmann/environment.git", | ||||
"reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" | |||||
"reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f" | |||||
}, | }, | ||||
"dist": { | "dist": { | ||||
"type": "zip", | "type": "zip", | ||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", | |||||
"reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", | |||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/febd209a219cea7b56ad799b30ebbea34b71eb8f", | |||||
"reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f", | |||||
"shasum": "" | "shasum": "" | ||||
}, | }, | ||||
"require": { | "require": { | ||||
"php": "^7.0" | |||||
"php": "^7.1" | |||||
}, | }, | ||||
"require-dev": { | "require-dev": { | ||||
"phpunit/phpunit": "^6.1" | |||||
"phpunit/phpunit": "^7.4" | |||||
}, | }, | ||||
"type": "library", | "type": "library", | ||||
"extra": { | "extra": { | ||||
"branch-alias": { | "branch-alias": { | ||||
"dev-master": "3.1.x-dev" | |||||
"dev-master": "4.0-dev" | |||||
} | } | ||||
}, | }, | ||||
"autoload": { | "autoload": { | ||||
@@ -1103,7 +1103,7 @@ | |||||
"environment", | "environment", | ||||
"hhvm" | "hhvm" | ||||
], | ], | ||||
"time": "2017-07-01T08:51:00+00:00" | |||||
"time": "2018-11-25T09:31:21+00:00" | |||||
}, | }, | ||||
{ | { | ||||
"name": "sebastian/exporter", | "name": "sebastian/exporter", | ||||
@@ -1551,7 +1551,8 @@ | |||||
"prefer-lowest": false, | "prefer-lowest": false, | ||||
"platform": { | "platform": { | ||||
"php": ">=7", | "php": ">=7", | ||||
"ext-mbstring": "*" | |||||
"ext-mbstring": "*", | |||||
"ext-yaml": "*" | |||||
}, | }, | ||||
"platform-dev": [] | "platform-dev": [] | ||||
} | } |
@@ -14,6 +14,7 @@ class AnalyzeCommand extends Command { | |||||
->setDescription('analyze log file') | ->setDescription('analyze log file') | ||||
->setHelp('This command analyzes a log file') | ->setHelp('This command analyzes a log file') | ||||
->addOption('output', null, InputOption::VALUE_NONE, 'Print the HTML log text') | ->addOption('output', null, InputOption::VALUE_NONE, 'Print the HTML log text') | ||||
->addOption('out', 'file', InputOption::VALUE_REQUIRED, 'File to write HTML log text to') | |||||
->addArgument('file', InputArgument::REQUIRED, 'Log file to analyze'); | ->addArgument('file', InputArgument::REQUIRED, 'Log file to analyze'); | ||||
} | } | ||||
@@ -42,5 +43,62 @@ class AnalyzeCommand extends Command { | |||||
$output->writeln('Log Text:'); | $output->writeln('Log Text:'); | ||||
$output->writeln($log_text); | $output->writeln($log_text); | ||||
} | } | ||||
if ($input->getOption('out')) { | |||||
$html_out = <<<HTML | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<title>Test</title> | |||||
<meta charset="utf-8"/> | |||||
<style> | |||||
.log1 { | |||||
} | |||||
.log2 { | |||||
color: yellow; | |||||
} | |||||
.log3 { | |||||
color: #0E88C6; | |||||
} | |||||
.log4 { | |||||
font-weight: bold; | |||||
} | |||||
.log5 { | |||||
text-decoration: underline; | |||||
} | |||||
.good { | |||||
font-weight: bold; | |||||
color: green; | |||||
} | |||||
.bad { | |||||
font-weight: bold; | |||||
color: red; | |||||
} | |||||
.goodish { | |||||
font-weight: bold; | |||||
color: #35BF00; | |||||
} | |||||
.badish { | |||||
font-weight: bold; | |||||
color: #E5B244; | |||||
} | |||||
</style> | |||||
</head> | |||||
<body> | |||||
<pre>{$log_text}</pre> | |||||
</body> | |||||
</html> | |||||
HTML; | |||||
file_put_contents($input->getOption('out'), $html_out); | |||||
} | |||||
} | } | ||||
} | } |
@@ -42,10 +42,13 @@ class Logchecker { | |||||
var $DubiousTracks = 0; | var $DubiousTracks = 0; | ||||
var $EAC_LANG = array(); | var $EAC_LANG = array(); | ||||
var $Chardet = null; | var $Chardet = null; | ||||
var $FakeDrives = [ | |||||
'Generic DVD-ROM SCSI CdRom Device' | |||||
]; | |||||
var $ValidateChecksum = true; | var $ValidateChecksum = true; | ||||
function __construct() { | |||||
public function __construct() { | |||||
$this->EAC_LANG = require_once(__DIR__ . '/eac_languages.php'); | $this->EAC_LANG = require_once(__DIR__ . '/eac_languages.php'); | ||||
try { | try { | ||||
$this->Chardet = new Chardet(); | $this->Chardet = new Chardet(); | ||||
@@ -58,6 +61,10 @@ class Logchecker { | |||||
$this->AllDrives = array_map(function($elem) { return explode(',', $elem); }, file(__DIR__.'/offsets.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)); | $this->AllDrives = array_map(function($elem) { return explode(',', $elem); }, file(__DIR__.'/offsets.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)); | ||||
} | } | ||||
public function get_log() { | |||||
return $this->Log; | |||||
} | |||||
/** | /** | ||||
* @param string $LogPath path to log file on local filesystem | * @param string $LogPath path to log file on local filesystem | ||||
*/ | */ | ||||
@@ -65,31 +72,6 @@ class Logchecker { | |||||
$this->reset(); | $this->reset(); | ||||
$this->LogPath = $LogPath; | $this->LogPath = $LogPath; | ||||
$this->Log = file_get_contents($this->LogPath); | $this->Log = file_get_contents($this->LogPath); | ||||
// To parse the log, we want to deal with the log in UTF-8. EAC by default should | |||||
// always output to UTF-16 and XLD to UTF-8, but sometimes people view the log and | |||||
// re-encode them to something else (like Windows-1251), and we need to use chardet | |||||
// to detect this so we can then convert it to UTF-8. | |||||
if (ord($this->Log[0]) . ord($this->Log[1]) == 0xFF . 0xFE) { | |||||
$this->Log = mb_convert_encoding(substr($this->Log, 2), 'UTF-8', 'UTF-16LE'); | |||||
} | |||||
elseif (ord($this->Log[0]) . ord($this->Log[1]) == 0xFE . 0xFF) { | |||||
$this->Log = mb_convert_encoding(substr($this->Log, 2), 'UTF-8', 'UTF-16BE'); | |||||
} | |||||
elseif (ord($this->Log[0]) == 0xEF && ord($this->Log[1]) == 0xBB && ord($this->Log[2]) == 0xBF) { | |||||
$this->Log = substr($this->Log, 3); | |||||
} | |||||
elseif ($this->Chardet !== null) { | |||||
try { | |||||
$Results = $this->Chardet->analyze($this->LogPath); | |||||
if ($Results['charset'] !== 'utf-8' && $Results['confidence'] > 0.7) { | |||||
$this->Log = mb_convert_encoding($this->Log, 'UTF-8', $Results['charset']); | |||||
} | |||||
} | |||||
catch (\Exception $exc) { | |||||
$this->account('chardet failed to analyze log encoding', false, false, false, true); | |||||
} | |||||
} | |||||
} | } | ||||
function reset() { | function reset() { | ||||
@@ -130,10 +112,179 @@ class Logchecker { | |||||
$this->ValidateChecksum = $Bool; | $this->ValidateChecksum = $Bool; | ||||
} | } | ||||
private function convert_encoding() { | |||||
// To parse the log, we want to deal with the log in UTF-8. EAC by default should | |||||
// always output to UTF-16 and XLD to UTF-8, but sometimes people view the log and | |||||
// re-encode them to something else (like Windows-1251), and we need to use chardet | |||||
// to detect this so we can then convert it to UTF-8. | |||||
if (ord($this->Log[0]) . ord($this->Log[1]) == 0xFF . 0xFE) { | |||||
$this->Log = mb_convert_encoding(substr($this->Log, 2), 'UTF-8', 'UTF-16LE'); | |||||
} | |||||
elseif (ord($this->Log[0]) . ord($this->Log[1]) == 0xFE . 0xFF) { | |||||
$this->Log = mb_convert_encoding(substr($this->Log, 2), 'UTF-8', 'UTF-16BE'); | |||||
} | |||||
elseif (ord($this->Log[0]) == 0xEF && ord($this->Log[1]) == 0xBB && ord($this->Log[2]) == 0xBF) { | |||||
$this->Log = substr($this->Log, 3); | |||||
} | |||||
elseif ($this->Chardet !== null) { | |||||
$Results = $this->Chardet->analyze($this->LogPath); | |||||
if ($Results['charset'] !== 'utf-8' && $Results['confidence'] > 0.7) { | |||||
$this->Log = mb_convert_encoding($this->Log, 'UTF-8', $Results['charset']); | |||||
} | |||||
} | |||||
} | |||||
/** | /** | ||||
* @return array Returns an array that contains [Score, Details, Checksum, Log] | * @return array Returns an array that contains [Score, Details, Checksum, Log] | ||||
*/ | */ | ||||
function parse() { | function parse() { | ||||
try { | |||||
$this->convert_encoding(); | |||||
} | |||||
catch (\Exception $exc) { | |||||
$this->Checksum = false; | |||||
$this->Score = 0; | |||||
$this->account('Could not detect log encoding, log is corrupt.'); | |||||
return $this->return_parse(); | |||||
} | |||||
if (strpos($this->Log, "Log created by: whipper") !== false) { | |||||
return $this->whipper_parse(); | |||||
} | |||||
else { | |||||
return $this->legacy_parse(); | |||||
} | |||||
} | |||||
private function whipper_parse() { | |||||
$Yaml = @yaml_parse($this->Log); | |||||
if ($Yaml === false) { | |||||
$this->Score = 0; | |||||
$this->account('Could not parse whipper log.'); | |||||
} | |||||
if (!empty($Yaml['SHA-256 hash'])) { | |||||
$Hash = $Yaml['SHA-256 hash']; | |||||
$lines = explode("\n", trim($this->Log)); | |||||
$Slice = array_slice($lines, 0, count($lines)-1); | |||||
$this->Checksum = strtolower(hash('sha256', implode("\n", $Slice))) === strtolower($Hash); | |||||
$Class = $this->Checksum ? 'good' : 'bad'; | |||||
$Yaml['SHA-256 hash'] = "<span class='{$Class}'>{$Hash}</span>"; | |||||
} | |||||
else { | |||||
$this->Checksum = false; | |||||
} | |||||
$Drive = $Yaml['Ripping phase information']['Drive']; | |||||
$Offset = $Yaml['Ripping phase information']['Read offset correction']; | |||||
if (in_array(trim($Drive), $this->FakeDrives)) { | |||||
$this->account('Virtual drive used: ' . $Drive, 20, false, false, false, 20); | |||||
$Yaml['Ripping phase information']['Drive'] = "<span class='bad'>{$Drive}</span>"; | |||||
} | |||||
else { | |||||
$this->get_drives($Drive); | |||||
$DriveClass = 'badish'; | |||||
if (count($this->Drives) > 0) { | |||||
$DriveClass = 'good'; | |||||
if (in_array((string) $Offset, $this->Offsets)) { | |||||
$OffsetClass = 'good'; | |||||
} | |||||
else { | |||||
$OffsetClass = 'bad'; | |||||
$this->account('Incorrect read offset for drive. Correct offsets are: ' . implode(', ', $this->Offsets) . ' (Checked against the following drive(s): ' . implode(', ', $this->Drives) . ')', 5, false, false, false, 5); | |||||
} | |||||
} | |||||
else { | |||||
$Drive .= ' (not found in database)'; | |||||
$OffsetClass = 'badish'; | |||||
if ($Offset === '0') { | |||||
$OffsetClass = 'bad'; | |||||
$this->account('The drive was not found in the database, so we cannot determine the correct read offset. However, the read offset in this case was 0, which is almost never correct. As such, we are assuming that the offset is incorrect', 5, false, false, false, 5); | |||||
} | |||||
} | |||||
$Yaml['Ripping phase information']['Drive'] = "<span class='{$DriveClass}'>{$Drive}</span>"; | |||||
$Offset = ($Offset > 0) ? '+' . (string) $Offset : (string) $Offset; | |||||
$Yaml['Ripping phase information']['Read offset correction'] = "<span class='{$OffsetClass}'>{$Offset}</span>"; | |||||
} | |||||
$DefeatCache = $Yaml['Ripping phase information']['Defeat audio cache']; | |||||
if ($DefeatCache) { | |||||
$Value = 'Yes'; | |||||
$Class = 'good'; | |||||
} | |||||
else { | |||||
$Value = 'No'; | |||||
$Class = 'bad'; | |||||
$this->account('"Defeat audio cache" should be yes', 10); | |||||
} | |||||
$Yaml['Ripping phase information']['Defeat audio cache'] = "<span class='{$Class}'>{$Value}</span>"; | |||||
foreach ($Yaml['Tracks'] as $Key => $Track) { | |||||
$Class = 'good'; | |||||
if ($Track['Test CRC'] !== $Track['Copy CRC']) { | |||||
$Class = 'bad'; | |||||
$this->account("CRC mismatch: {$Track['Test CRC']} and {$Track['Copy CRC']}", 30); | |||||
} | |||||
$Yaml['Tracks'][$Key]['Test CRC'] = "<span class='{$Class}'>{$Track['Test CRC']}</span>"; | |||||
$Yaml['Tracks'][$Key]['Copy CRC'] = "<span class='{$Class}'>{$Track['Copy CRC']}</span>"; | |||||
} | |||||
$this->Log = "Log created by: {$Yaml['Log created by']}\nLog creation date: {$Yaml['Log creation date']}\n\n"; | |||||
$this->Log .= "Ripping phase information:\n"; | |||||
foreach ($Yaml['Ripping phase information'] as $Key => $Value) { | |||||
$this->Log .= " {$Key}: {$Value}\n"; | |||||
} | |||||
$this->Log .= "\n"; | |||||
$this->Log .= "CD metadata:\n"; | |||||
foreach ($Yaml['CD metadata'] as $Key => $Value) { | |||||
$this->Log .= " {$Key}: {$Value}\n"; | |||||
} | |||||
$this->Log .= "\n"; | |||||
$this->Log .= "TOC:\n"; | |||||
foreach ($Yaml['TOC'] as $Key => $Track) { | |||||
$this->Log .= " {$Key}:\n"; | |||||
foreach ($Track as $KKey => $Value) { | |||||
$this->Log .= " {$KKey}: {$Value}\n"; | |||||
} | |||||
$this->Log .= "\n"; | |||||
} | |||||
$this->Log .= "\n"; | |||||
$this->Log .= "Tracks:\n"; | |||||
foreach ($Yaml['Tracks'] as $Key => $Track) { | |||||
$this->Log .= " {$Key}:\n"; | |||||
foreach ($Track as $KKey => $Value) { | |||||
if (is_array($Value)) { | |||||
$this->Log .= " {$KKey}:\n"; | |||||
foreach ($Value as $KKKey => $VValue) { | |||||
$this->Log .= " {$KKKey}: {$VValue}\n"; | |||||
} | |||||
} | |||||
else { | |||||
$this->Log .= " {$KKey}: {$Value}\n"; | |||||
} | |||||
} | |||||
$this->Log .= "\n"; | |||||
} | |||||
$this->Log .= "\n"; | |||||
$this->Log .= "Conclusive status report:\n"; | |||||
foreach ($Yaml['Conclusive status report'] as $Key => $Value) { | |||||
$this->Log .= "{$Key}: {$Value}\n"; | |||||
} | |||||
$this->Log .= "\n"; | |||||
$this->Log .= "SHA-256 hash: {$Yaml['SHA-256 hash']}\n"; | |||||
return $this->return_parse(); | |||||
} | |||||
private function legacy_parse() { | |||||
foreach ($this->EAC_LANG as $Lang => $Dict) { | foreach ($this->EAC_LANG as $Lang => $Dict) { | ||||
if ($Lang === 'en') { | if ($Lang === 'en') { | ||||
continue; | continue; | ||||
@@ -256,30 +407,27 @@ class Logchecker { | |||||
$this->Details[] = "Unrecognized log file! Feel free to report for manual review."; | $this->Details[] = "Unrecognized log file! Feel free to report for manual review."; | ||||
} | } | ||||
$this->Score = 0; | $this->Score = 0; | ||||
return $this->returnParse(); | |||||
return $this->return_parse(); | |||||
} else { | } else { | ||||
$this->RIPPER = ($EAC) ? "EAC" : "XLD"; | $this->RIPPER = ($EAC) ? "EAC" : "XLD"; | ||||
} | } | ||||
if ($this->ValidateChecksum && $this->Checksum && !empty($this->LogPath)) { | if ($this->ValidateChecksum && $this->Checksum && !empty($this->LogPath)) { | ||||
if ($EAC) { | if ($EAC) { | ||||
$CommandExists = Util::commandExists('eac_logchecker'); | |||||
if ($CommandExists) { | |||||
$Out = shell_exec("eac_logchecker {$this->LogPath}"); | |||||
$Strings = ['Log entry has no checksum!', 'Log entry was modified, checksum incorrect!']; | |||||
if (Util::strposArray($Out, $Strings) !== false || strpos($Out, 'Log entry is fine!') === false) { | |||||
$this->Checksum = false; | |||||
} | |||||
} | |||||
$Command = 'eac_logchecker'; | |||||
$BadStrings = ['Log entry has no checksum!', 'Log entry was modified, checksum incorrect!']; | |||||
$GoodString = 'Log entry is fine!'; | |||||
} | } | ||||
else { | else { | ||||
$Exe = __DIR__ . '/logchecker/xld_logchecker'; | |||||
if (file_exists($Exe)) { | |||||
$Out = shell_exec("{$Exe} {$this->LogPath}"); | |||||
if (strpos($Out, "Malformed") !== false || strpos($Out, "OK") === false) { | |||||
$this->Checksum = false; | |||||
} | |||||
} | |||||
$Command = 'xld_logchecker'; | |||||
$BadStrings = ['Malformed', 'Not a logfile']; | |||||
$GoodString = 'OK'; | |||||
} | |||||
$CommandExists = Util::commandExists($Command); | |||||
$Out = shell_exec("{$Command} {$this->LogPath}"); | |||||
if (Util::strposArray($Out, $BadStrings) !== false || strpos($Out, $GoodString) === false) { | |||||
$this->Checksum = false; | |||||
} | } | ||||
} | } | ||||
@@ -815,20 +963,32 @@ class Logchecker { | |||||
if ($this->Combined) { | if ($this->Combined) { | ||||
array_unshift($this->Details, "Combined Log (" . $this->Combined . ")"); | array_unshift($this->Details, "Combined Log (" . $this->Combined . ")"); | ||||
} //combined log msg | } //combined log msg | ||||
return $this->returnParse(); | |||||
return $this->return_parse(); | |||||
} | } | ||||
// Callback functions | // Callback functions | ||||
function drive($Matches) | function drive($Matches) | ||||
{ | { | ||||
global $DB; | |||||
$FakeDrives = array( | |||||
'Generic DVD-ROM SCSI CdRom Device' | |||||
); | |||||
if (in_array(trim($Matches[2]), $FakeDrives)) { | |||||
if (in_array(trim($Matches[2]), $this->FakeDrives)) { | |||||
$this->account('Virtual drive used: ' . $Matches[2], 20, false, false, false, 20); | $this->account('Virtual drive used: ' . $Matches[2], 20, false, false, false, 20); | ||||
return "<span class=\"log5\">Used Drive$Matches[1]</span>: <span class=\"bad\">$Matches[2]</span>"; | return "<span class=\"log5\">Used Drive$Matches[1]</span>: <span class=\"bad\">$Matches[2]</span>"; | ||||
} | } | ||||
$DriveName = $Matches[2]; | $DriveName = $Matches[2]; | ||||
$this->get_drives($DriveName); | |||||
if (count($this->Drives) > 0) { | |||||
$Class = 'good'; | |||||
$this->DriveFound = true; | |||||
} else { | |||||
$Class = 'badish'; | |||||
$Matches[2] .= ' (not found in database)'; | |||||
} | |||||
return "<span class=\"log5\">Used Drive$Matches[1]</span>: <span class=\"$Class\">$Matches[2]</span>"; | |||||
} | |||||
private function get_drives($DriveName) { | |||||
// Necessary transformations to get what the drives report themselves to match up into | |||||
// what is from the AccurateRIP DB | |||||
$DriveName = str_replace('JLMS', 'Lite-ON', $DriveName); | $DriveName = str_replace('JLMS', 'Lite-ON', $DriveName); | ||||
$DriveName = preg_replace('/TSSTcorp(BD|CD|DVD)/', 'TSSTcorp \1', $DriveName); | $DriveName = preg_replace('/TSSTcorp(BD|CD|DVD)/', 'TSSTcorp \1', $DriveName); | ||||
$DriveName = preg_replace('/HL-DT-ST(BD|CD|DVD)/', 'HL-DT-ST \1', $DriveName); | $DriveName = preg_replace('/HL-DT-ST(BD|CD|DVD)/', 'HL-DT-ST \1', $DriveName); | ||||
@@ -860,18 +1020,9 @@ class Logchecker { | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
if (count($this->Drives) > 0) { | |||||
$Class = 'good'; | |||||
$this->DriveFound = true; | |||||
} else { | |||||
$Class = 'badish'; | |||||
$Matches[2] .= ' (not found in database)'; | |||||
} | |||||
return "<span class=\"log5\">Used Drive$Matches[1]</span>: <span class=\"$Class\">$Matches[2]</span>"; | |||||
} | } | ||||
function media_type_xld($Matches) | |||||
{ | |||||
function media_type_xld($Matches) { | |||||
// Pressed CD | // Pressed CD | ||||
if (trim($Matches[2]) == "Pressed CD") { | if (trim($Matches[2]) == "Pressed CD") { | ||||
$Class = 'good'; | $Class = 'good'; | ||||
@@ -1052,7 +1203,7 @@ class Logchecker { | |||||
$Class = 'badish'; | $Class = 'badish'; | ||||
} | } | ||||
} | } | ||||
return '<span class="log5">' . ($this->RIPPER == "DBPA" ? '' : 'Read offset correction') . $Matches[1] . '</span>: <span class="' . $Class . '">' . $Matches[2] . '</span>'; | |||||
return '<span class="log5">Read offset correction' . $Matches[1] . '</span>: <span class="' . $Class . '">' . $Matches[2] . '</span>'; | |||||
} | } | ||||
function fill_offset_samples($Matches) | function fill_offset_samples($Matches) | ||||
{ | { | ||||
@@ -1241,7 +1392,7 @@ class Logchecker { | |||||
$this->Details[] = "Invalid log, no tracks!"; | $this->Details[] = "Invalid log, no tracks!"; | ||||
} | } | ||||
$this->Score = 0; | $this->Score = 0; | ||||
return $this->returnParse(); | |||||
return $this->return_parse(); | |||||
} | } | ||||
} | } | ||||
@@ -1285,7 +1436,7 @@ class Logchecker { | |||||
$this->BadTrack[] = $Prepend . $Msg . $Append; | $this->BadTrack[] = $Prepend . $Msg . $Append; | ||||
} | } | ||||
function returnParse() { | |||||
function return_parse() { | |||||
return array( | return array( | ||||
$this->Score, | $this->Score, | ||||
$this->Details, | $this->Details, | ||||
@@ -76,6 +76,9 @@ $EAC_LANG['en'] = array( | |||||
1223 => "Review Range", | 1223 => "Review Range", | ||||
1224 => "There were errors", | 1224 => "There were errors", | ||||
1225 => "End of status report", | 1225 => "End of status report", | ||||
1321 => "Not detected, thus appended to previous track", | |||||
1322 => "Appended to previous track", | |||||
1323 => "Appended to next track", | |||||
1325 => "Log checksum", | 1325 => "Log checksum", | ||||
1226 => "Track", | 1226 => "Track", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -146,9 +149,6 @@ $EAC_LANG['en'] = array( | |||||
1309 => "Add ID3 tag", | 1309 => "Add ID3 tag", | ||||
1310 => "Sample format", | 1310 => "Sample format", | ||||
1320 => "Gap handling", | 1320 => "Gap handling", | ||||
1321 => "Not detected, thus appended to previous track", | |||||
1322 => "Appended to previous track", | |||||
1323 => "Appended to next track", | |||||
1324 => "Left out", | 1324 => "Left out", | ||||
81700 => "L3Enc MP3 Encoder & Compatible", | 81700 => "L3Enc MP3 Encoder & Compatible", | ||||
@@ -248,6 +248,9 @@ $EAC_LANG['ru'] = array( | |||||
1223 => "Просмотр диапазона", | 1223 => "Просмотр диапазона", | ||||
1224 => "Были ошибки", | 1224 => "Были ошибки", | ||||
1225 => "Конец отчёта", | 1225 => "Конец отчёта", | ||||
1321 => "Не обнаружено, добавлено к предыдущему треку", | |||||
1322 => "Добавлено к предыдущему треку", | |||||
1323 => "Добавлено к следующему треку", | |||||
1325 => "Контрольная сумма отчёта", | 1325 => "Контрольная сумма отчёта", | ||||
1226 => "Трек", | 1226 => "Трек", | ||||
1230 => "Индекс", | 1230 => "Индекс", | ||||
@@ -321,9 +324,6 @@ $EAC_LANG['ru'] = array( | |||||
], | ], | ||||
1310 => "Формат сэмплов", | 1310 => "Формат сэмплов", | ||||
1320 => "Обработка зазоров", | 1320 => "Обработка зазоров", | ||||
1321 => "Не обнаружено, добавлено к предыдущему треку", | |||||
1322 => "Добавлено к предыдущему треку", | |||||
1323 => "Добавлено к следующему треку", | |||||
1324 => "Исключено", | 1324 => "Исключено", | ||||
81700 => "MP3: L3Enc и совместимые", | 81700 => "MP3: L3Enc и совместимые", | ||||
@@ -424,6 +424,9 @@ $EAC_LANG['bg'] = array( | |||||
1223 => "Прегледай Диапазона", | 1223 => "Прегледай Диапазона", | ||||
1224 => "Има грешки", | 1224 => "Има грешки", | ||||
1225 => "Край на отчета", | 1225 => "Край на отчета", | ||||
1321 => "Няма открити, прикачени към предишния трак", | |||||
1322 => "Прикачени към предишния трак", | |||||
1323 => "Прикачени към следващия Трак", | |||||
1325 => "Контролна сума от отчет", | 1325 => "Контролна сума от отчет", | ||||
1226 => "Трак", | 1226 => "Трак", | ||||
1230 => "Индекс", | 1230 => "Индекс", | ||||
@@ -494,9 +497,6 @@ $EAC_LANG['bg'] = array( | |||||
1309 => "Добави ID3 таг", | 1309 => "Добави ID3 таг", | ||||
1310 => "Дискретен формат", | 1310 => "Дискретен формат", | ||||
1320 => "Управление на празнини", | 1320 => "Управление на празнини", | ||||
1321 => "Няма открити, прикачени към предишния трак", | |||||
1322 => "Прикачени към предишния трак", | |||||
1323 => "Прикачени към следващия Трак", | |||||
1324 => "Извадени", | 1324 => "Извадени", | ||||
81700 => "L3Enc MP3 Енкодер & Съвместими", | 81700 => "L3Enc MP3 Енкодер & Съвместими", | ||||
@@ -592,6 +592,9 @@ $EAC_LANG['cs'] = array( | |||||
1223 => "Přehled rozsahu", | 1223 => "Přehled rozsahu", | ||||
1224 => "Vyskytly se chyby", | 1224 => "Vyskytly se chyby", | ||||
1225 => "Konec protokolu", | 1225 => "Konec protokolu", | ||||
1321 => "Nedetekovány - přidány k předchozí stopě", | |||||
1322 => "Přidány k předchozí stopě", | |||||
1323 => "Přidány k následující stopě", | |||||
1325 => "Kontrolní součet protokolu", | 1325 => "Kontrolní součet protokolu", | ||||
1226 => "Stopa", | 1226 => "Stopa", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -662,9 +665,6 @@ $EAC_LANG['cs'] = array( | |||||
1309 => "Přidat ID3 tag", | 1309 => "Přidat ID3 tag", | ||||
1310 => "Formát vzorkování", | 1310 => "Formát vzorkování", | ||||
1320 => "Nakládání s mezerami", | 1320 => "Nakládání s mezerami", | ||||
1321 => "Nedetekovány - přidány k předchozí stopě", | |||||
1322 => "Přidány k předchozí stopě", | |||||
1323 => "Přidány k následující stopě", | |||||
1324 => "Vynechány", | 1324 => "Vynechány", | ||||
81700 => "L3Enc MP3 enkodér nebo kompatibilní", | 81700 => "L3Enc MP3 enkodér nebo kompatibilní", | ||||
@@ -762,6 +762,9 @@ $EAC_LANG['nl'] = array( | |||||
1223 => "Controleer bereik", | 1223 => "Controleer bereik", | ||||
1224 => "Er zijn fouten", | 1224 => "Er zijn fouten", | ||||
1225 => "Einde status report", | 1225 => "Einde status report", | ||||
1321 => "Niet herkend, daarom achter de volgende track bijgevoegd", | |||||
1322 => "Achter de volgende track bijgevoegd", | |||||
1323 => "Vóór de volgende track bijgevoegd", | |||||
1325 => "Log proefsom", | 1325 => "Log proefsom", | ||||
1226 => "Track", | 1226 => "Track", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -833,9 +836,6 @@ $EAC_LANG['nl'] = array( | |||||
1309 => "ID3 tag toevoegen", | 1309 => "ID3 tag toevoegen", | ||||
1310 => "Sample formaat", | 1310 => "Sample formaat", | ||||
1320 => "Pauzebehandeling", | 1320 => "Pauzebehandeling", | ||||
1321 => "Niet herkend, daarom achter de volgende track bijgevoegd", | |||||
1322 => "Achter de volgende track bijgevoegd", | |||||
1323 => "Vóór de volgende track bijgevoegd", | |||||
1324 => "Weggelaten", | 1324 => "Weggelaten", | ||||
81700 => "L3Enc MP3 Encoder & Compatibele", | 81700 => "L3Enc MP3 Encoder & Compatibele", | ||||
@@ -933,6 +933,9 @@ $EAC_LANG['de'] = array( | |||||
1223 => "Überprüfe Bereich", | 1223 => "Überprüfe Bereich", | ||||
1224 => "Es sind Fehler aufgetreten", | 1224 => "Es sind Fehler aufgetreten", | ||||
1225 => "Ende des Statusreports", | 1225 => "Ende des Statusreports", | ||||
1321 => "Nicht erkannt, daher hinter dem vorigen Track angehängt", | |||||
1322 => "Hinter dem vorigen Track angehängt", | |||||
1323 => "Vor dem folgenden Track angehängt", | |||||
1325 => "Report Prüfsumme", | 1325 => "Report Prüfsumme", | ||||
1226 => "Track", | 1226 => "Track", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -1004,9 +1007,6 @@ $EAC_LANG['de'] = array( | |||||
1309 => "Füge ID3 Tag hinzu", | 1309 => "Füge ID3 Tag hinzu", | ||||
1310 => "Sampleformat", | 1310 => "Sampleformat", | ||||
1320 => "Pausenbehandlung", | 1320 => "Pausenbehandlung", | ||||
1321 => "Nicht erkannt, daher hinter dem vorigen Track angehängt", | |||||
1322 => "Hinter dem vorigen Track angehängt", | |||||
1323 => "Vor dem folgenden Track angehängt", | |||||
1324 => "Weggelassen", | 1324 => "Weggelassen", | ||||
81700 => "L3Enc MP3 Komprimierer & Kompatible", | 81700 => "L3Enc MP3 Komprimierer & Kompatible", | ||||
@@ -1104,6 +1104,9 @@ $EAC_LANG['it'] = array( | |||||
1223 => "Esamina Intervallo", | 1223 => "Esamina Intervallo", | ||||
1224 => "Sono stati riscontrati errori", | 1224 => "Sono stati riscontrati errori", | ||||
1225 => "Fine del resoconto di stato", | 1225 => "Fine del resoconto di stato", | ||||
1321 => "Non rilevato, così aggiunto a traccia precedente", | |||||
1322 => "Aggiunto a traccia precedente", | |||||
1323 => "Aggiunto a traccia successiva", | |||||
1325 => "Checksum del log", | 1325 => "Checksum del log", | ||||
1226 => "Traccia", | 1226 => "Traccia", | ||||
1230 => "Indice", | 1230 => "Indice", | ||||
@@ -1174,9 +1177,6 @@ $EAC_LANG['it'] = array( | |||||
1309 => "Aggiungi tag ID3", | 1309 => "Aggiungi tag ID3", | ||||
1310 => "Formato Sample", | 1310 => "Formato Sample", | ||||
1320 => "Gestione Gap", | 1320 => "Gestione Gap", | ||||
1321 => "Non rilevato, così aggiunto a traccia precedente", | |||||
1322 => "Aggiunto a traccia precedente", | |||||
1323 => "Aggiunto a traccia successiva", | |||||
1324 => "Left out", | 1324 => "Left out", | ||||
81700 => "Encoder MP3 L3Enc e compatibili", | 81700 => "Encoder MP3 L3Enc e compatibili", | ||||
@@ -1275,6 +1275,9 @@ $EAC_LANG['pl'] = array( | |||||
1223 => "Przeglądnij zakres", | 1223 => "Przeglądnij zakres", | ||||
1224 => "Były błędy", | 1224 => "Były błędy", | ||||
1225 => "Koniec raportu", | 1225 => "Koniec raportu", | ||||
1321 => "Nie wykryte, zatem dodawane do poprzedniego nagrania", | |||||
1322 => "Dodane do poprzedniego nagrania", | |||||
1323 => "Dodane do następnego nagrania", | |||||
1325 => "Suma kontrola sprawozdania", | 1325 => "Suma kontrola sprawozdania", | ||||
1226 => "Nagranie", | 1226 => "Nagranie", | ||||
1230 => "Indeks", | 1230 => "Indeks", | ||||
@@ -1345,9 +1348,6 @@ $EAC_LANG['pl'] = array( | |||||
1309 => "Dodawanie znaczników ID3", | 1309 => "Dodawanie znaczników ID3", | ||||
1310 => "Format próbki", | 1310 => "Format próbki", | ||||
1320 => "Przerwy", | 1320 => "Przerwy", | ||||
1321 => "Nie wykryte, zatem dodawane do poprzedniego nagrania", | |||||
1322 => "Dodane do poprzedniego nagrania", | |||||
1323 => "Dodane do następnego nagrania", | |||||
1324 => "Pominięte", | 1324 => "Pominięte", | ||||
81700 => "Koder MP3 L3Enc i zgodne", | 81700 => "Koder MP3 L3Enc i zgodne", | ||||
@@ -1446,6 +1446,9 @@ $EAC_LANG['zh-Hans'] = array( | |||||
1223 => "重新检查范围", | 1223 => "重新检查范围", | ||||
1224 => "出现错误", | 1224 => "出现错误", | ||||
1225 => "状态报告结尾", | 1225 => "状态报告结尾", | ||||
1321 => "没检测到,因此追加到上一曲目", | |||||
1322 => "追加到上一曲目", | |||||
1323 => "追加到下一曲目", | |||||
1325 => "记录校验日志", | 1325 => "记录校验日志", | ||||
1226 => "音轨", | 1226 => "音轨", | ||||
1230 => "索引", | 1230 => "索引", | ||||
@@ -1516,9 +1519,6 @@ $EAC_LANG['zh-Hans'] = array( | |||||
1309 => "添加 ID3 标签", | 1309 => "添加 ID3 标签", | ||||
1310 => "样本格式", | 1310 => "样本格式", | ||||
1320 => "间隙处理", | 1320 => "间隙处理", | ||||
1321 => "没检测到,因此追加到上一曲目", | |||||
1322 => "追加到上一曲目", | |||||
1323 => "追加到下一曲目", | |||||
1324 => "忽略", | 1324 => "忽略", | ||||
81700 => "L3Enc MP3 兼容编码器", | 81700 => "L3Enc MP3 兼容编码器", | ||||
@@ -1617,6 +1617,9 @@ $EAC_LANG['sr'] = array( | |||||
1223 => "Preispitivanje opsega", | 1223 => "Preispitivanje opsega", | ||||
1224 => "Bilo je grešaka", | 1224 => "Bilo je grešaka", | ||||
1225 => "Kraj statusnog izveštaja", | 1225 => "Kraj statusnog izveštaja", | ||||
1321 => "Nije detektovano, stoga pripojeno prethodnom track-u", | |||||
1322 => "Pripojeno prethodnom track-u", | |||||
1323 => "Pripojeno sledećem track-u", | |||||
1325 => "Kontrolna suma log fajla", | 1325 => "Kontrolna suma log fajla", | ||||
1226 => "Track", | 1226 => "Track", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -1687,9 +1690,6 @@ $EAC_LANG['sr'] = array( | |||||
1309 => "Dodaj ID3 tag", | 1309 => "Dodaj ID3 tag", | ||||
1310 => "Format sempla", | 1310 => "Format sempla", | ||||
1320 => "Upravljanje pauzama", | 1320 => "Upravljanje pauzama", | ||||
1321 => "Nije detektovano, stoga pripojeno prethodnom track-u", | |||||
1322 => "Pripojeno prethodnom track-u", | |||||
1323 => "Pripojeno sledećem track-u", | |||||
1324 => "Izostavljeno", | 1324 => "Izostavljeno", | ||||
81700 => "L3Enc MP3 Encoder & kompatibilni", | 81700 => "L3Enc MP3 Encoder & kompatibilni", | ||||
@@ -1786,6 +1786,9 @@ $EAC_LANG['se'] = [ | |||||
1223 => "Review Range", | 1223 => "Review Range", | ||||
1224 => "There were errors", | 1224 => "There were errors", | ||||
1225 => "Slut pĺ status rapport", | 1225 => "Slut pĺ status rapport", | ||||
1321 => "Ej pĺvisat, alltsĺ tillagt till föregĺende spĺr", | |||||
1322 => "Appended to previous track", | |||||
1323 => "Appended to next track", | |||||
1325 => "Log checksum", | 1325 => "Log checksum", | ||||
1226 => "Track", | 1226 => "Track", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -1841,9 +1844,6 @@ $EAC_LANG['se'] = [ | |||||
1309 => "Lägg till ID3 taggar", | 1309 => "Lägg till ID3 taggar", | ||||
1310 => "Sample format", | 1310 => "Sample format", | ||||
1320 => "Gap hantering", | 1320 => "Gap hantering", | ||||
1321 => "Ej pĺvisat, alltsĺ tillagt till föregĺende spĺr", | |||||
1322 => "Appended to previous track", | |||||
1323 => "Appended to next track", | |||||
1324 => "Left out", | 1324 => "Left out", | ||||
81700 => "L3Enc MP3 Encoder & Compatible", | 81700 => "L3Enc MP3 Encoder & Compatible", | ||||
@@ -1960,6 +1960,9 @@ $EAC_LANG['sk'] = array( | |||||
1223 => "Prezretie rozsahu", | 1223 => "Prezretie rozsahu", | ||||
1224 => "Vyskytli sa chyby", | 1224 => "Vyskytli sa chyby", | ||||
1225 => "Koniec stavovej správy", | 1225 => "Koniec stavovej správy", | ||||
1321 => "Nedetekované a pridané k predchádzajúcej stope", | |||||
1322 => "Pridané k predchádzajúcej stope", | |||||
1323 => "Pridané k nasledujúcej stope", | |||||
1325 => "Kontrolný súčet logu", | 1325 => "Kontrolný súčet logu", | ||||
1226 => "Stopa", | 1226 => "Stopa", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -2030,9 +2033,6 @@ $EAC_LANG['sk'] = array( | |||||
1309 => "Pridať ID3 tag", | 1309 => "Pridať ID3 tag", | ||||
1310 => "Formát vzorkovania", | 1310 => "Formát vzorkovania", | ||||
1320 => "Spracovnie medzier", | 1320 => "Spracovnie medzier", | ||||
1321 => "Nedetekované a pridané k predchádzajúcej stope", | |||||
1322 => "Pridané k predchádzajúcej stope", | |||||
1323 => "Pridané k nasledujúcej stope", | |||||
1324 => "Vynechané", | 1324 => "Vynechané", | ||||
81700 => "L3Enc MP3 kóder a kompatibilné", | 81700 => "L3Enc MP3 kóder a kompatibilné", | ||||
@@ -2132,6 +2132,9 @@ $EAC_LANG['es'] = array( | |||||
1223 => "Ver gama", | 1223 => "Ver gama", | ||||
1224 => "Hubo Errores", | 1224 => "Hubo Errores", | ||||
1225 => "Final del Informe", | 1225 => "Final del Informe", | ||||
1321 => "No se detectó, por lo que anexa a la pista anterior", | |||||
1322 => "Anexada a la pista anterior", | |||||
1323 => "Anexada a la pista siguiente", | |||||
1325 => "Log checksum", | 1325 => "Log checksum", | ||||
1226 => "Pista", | 1226 => "Pista", | ||||
1230 => "Índice", | 1230 => "Índice", | ||||
@@ -2202,9 +2205,6 @@ $EAC_LANG['es'] = array( | |||||
1309 => "Añadir ID3 tag", | 1309 => "Añadir ID3 tag", | ||||
1310 => "Formato de muestra", | 1310 => "Formato de muestra", | ||||
1320 => "Manejo de huecos", | 1320 => "Manejo de huecos", | ||||
1321 => "No se detectó, por lo que anexa a la pista anterior", | |||||
1322 => "Anexada a la pista anterior", | |||||
1323 => "Anexada a la pista siguiente", | |||||
1324 => "Left out", | 1324 => "Left out", | ||||
81700 => "Compresor MP3 L3Enc y Compatibles", | 81700 => "Compresor MP3 L3Enc y Compatibles", | ||||
@@ -2302,6 +2302,9 @@ $EAC_LANG['sv'] = array( | |||||
1223 => "Granska Område", | 1223 => "Granska Område", | ||||
1224 => "Det fanns fel", | 1224 => "Det fanns fel", | ||||
1225 => "Slut på status rapport", | 1225 => "Slut på status rapport", | ||||
1321 => "Hittades inte, därigenom tillagt till föregående spår", | |||||
1322 => "Lägg till föregående spår", | |||||
1323 => "Lägg till nästa spår", | |||||
1325 => "Logg-kontrollsumma", | 1325 => "Logg-kontrollsumma", | ||||
1226 => "Spår", | 1226 => "Spår", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -2372,9 +2375,6 @@ $EAC_LANG['sv'] = array( | |||||
1309 => "Lägg till ID3 tag", | 1309 => "Lägg till ID3 tag", | ||||
1310 => "Samplingsformat", | 1310 => "Samplingsformat", | ||||
1320 => "Gap-hantering", | 1320 => "Gap-hantering", | ||||
1321 => "Hittades inte, därigenom tillagt till föregående spår", | |||||
1322 => "Lägg till föregående spår", | |||||
1323 => "Lägg till nästa spår", | |||||
1324 => "Utelämnat", | 1324 => "Utelämnat", | ||||
81700 => "L3Enc MP3 Kodare & Kompatibla", | 81700 => "L3Enc MP3 Kodare & Kompatibla", | ||||
@@ -2472,6 +2472,9 @@ $EAC_LANG['fr'] = array( | |||||
1223 => "Revoir gamme", | 1223 => "Revoir gamme", | ||||
1224 => "Il y avait des erreurs", | 1224 => "Il y avait des erreurs", | ||||
1225 => "Fin du rapport d'état", | 1225 => "Fin du rapport d'état", | ||||
1321 => "Non détecté, ajouté à la piste précédente", | |||||
1322 => "Ajouté à la piste précédente", | |||||
1323 => "Ajouté à la piste suivante", | |||||
1325 => "Checksum de log", | 1325 => "Checksum de log", | ||||
1226 => "Piste", | 1226 => "Piste", | ||||
1230 => "Index", | 1230 => "Index", | ||||
@@ -2542,9 +2545,6 @@ $EAC_LANG['fr'] = array( | |||||
1309 => "Ajouter ID3 tag", | 1309 => "Ajouter ID3 tag", | ||||
1310 => "Format d'échantillon", | 1310 => "Format d'échantillon", | ||||
1320 => "Traitement des intervalles", | 1320 => "Traitement des intervalles", | ||||
1321 => "Non détecté, ajouté à la piste précédente", | |||||
1322 => "Ajouté à la piste précédente", | |||||
1323 => "Ajouté à la piste suivante", | |||||
1324 => "Exclu", | 1324 => "Exclu", | ||||
81700 => "Encodeur L3Enc MP3 & Compatible", | 81700 => "Encodeur L3Enc MP3 & Compatible", | ||||
@@ -2780,6 +2780,9 @@ $EAC_LANG['jp99_5'] = array( | |||||
1223 => "選択範囲再調査", | 1223 => "選択範囲再調査", | ||||
1224 => "エラーがありました", | 1224 => "エラーがありました", | ||||
1225 => "ステータス報告完了", | 1225 => "ステータス報告完了", | ||||
1321 => "Not detected, thus appended to previous track", | |||||
1322 => "Appended to previous track", | |||||
1323 => "Appended to next track", | |||||
1325 => "Log checksum", | 1325 => "Log checksum", | ||||
1226 => "トラック", | 1226 => "トラック", | ||||
1230 => "インデックス", | 1230 => "インデックス", | ||||
@@ -2851,9 +2854,6 @@ $EAC_LANG['jp99_5'] = array( | |||||
1309 => "Add ID3 tag", | 1309 => "Add ID3 tag", | ||||
1310 => "サンプルフォーマット", | 1310 => "サンプルフォーマット", | ||||
1320 => "Gap handling", | 1320 => "Gap handling", | ||||
1321 => "Not detected, thus appended to previous track", | |||||
1322 => "Appended to previous track", | |||||
1323 => "Appended to next track", | |||||
1324 => "Left out", | 1324 => "Left out", | ||||
81700 => "L3Enc MP3 Encoder & Compatible", | 81700 => "L3Enc MP3 Encoder & Compatible", | ||||