Skip to content

Commit

Permalink
Merge pull request #101 from seeyabye/fix/update-parts
Browse files Browse the repository at this point in the history
[Fix][Enhancement] Improved Convert-JVTitle and fixed issues related to multi-part files.
  • Loading branch information
jvlflame committed Sep 25, 2020
2 parents b3e2c88 + b047f6c commit 480e5ab
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 84 deletions.
104 changes: 26 additions & 78 deletions src/Javinizer/Private/Convert-JVTitle.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,26 @@ function Convert-JVTitle {
try {
$id = ($file | Select-String $RegexString).Matches.Groups[$RegexIdMatch].Value
$partNum = ($file | Select-String $RegexString).Matches.Groups[$RegexPtMatch].Value

# If ID#### and there's no hypen, subsequent searches will fail
if($id -match '^([a-z]+)(\d+)$') {
$id = $Matches[1] + "-" + ($Matches[2] -replace '^0{1,5}', '').PadLeft(3, '0')
}
} catch {
Write-JVLog -Write:$script:JVLogWrite -LogPath $script:JVLogPath -WriteLevel $script:JVLogWriteLevel -Level Debug -Message "File [$file] not matched by regex"
break
}
if ($fileBaseNameUpper -eq 1) {
if ($partNum -ne '') {
$fileBaseNameUpper = "$id-pt$PartNum"
$fileBaseNameUpper = "$id-PT$PartNum"
} elseif ($id -ne '') {
$fileBaseNameUpper = "$id"
} else {
$fileBaseNameUpper = $file
}
} else {
if ($partNum -ne '') {
$fileBaseNameUpper[$index] = "$id-pt$PartNum"
$fileBaseNameUpper[$index] = "$id-PT$PartNum"
} elseif ($id -ne '') {
$fileBaseNameUpper[$index] = "$id"
} else {
Expand Down Expand Up @@ -145,6 +150,7 @@ function Convert-JVTitle {
# Write modified filename to $fileBaseNameHyphen, inserting a '-' at the specified
# index between the alphabetical and numerical character, and appending extension
$fileBaseNameHyphen = ($file.Insert($x + 1, '-'))
break
}
}
# Get index if file changed
Expand All @@ -161,34 +167,17 @@ function Convert-JVTitle {
# Clean any trailing text if not removed by $RemoveStrings
for ($x = 0; $x -lt $fileBaseNameUpper.Length; $x++) {
$filePartNumber = $null
#Match ID-###A, ID###B, etc.
if ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[a-dA-D]") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
if ($fileP3 -eq 'A') { $filePartNumber = '1' }
elseif ($fileP3 -eq 'B') { $filePartNumber = '2' }
elseif ($fileP3 -eq 'C') { $filePartNumber = '3' }
elseif ($fileP3 -eq 'D') { $filePartNumber = '4' }
#elseif ($fileP3 -eq 'E') { $filePartNumber = '5' }
#elseif ($fileP3 -eq 'F') { $filePartNumber = '6' }
#elseif ($fileP3 -eq 'G') { $filePartNumber = '7' }
#elseif ($fileP3 -eq 'H') { $filePartNumber = '8' }
#elseif ($fileP3 -eq 'I') { $filePartNumber = '9' }
}
# Match ID-###A, ID###B, etc.
# Match ID-###-A, ID-###-B, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-][a-dA-D]") {
# Match ID-### - A, ID-### - B, etc.
if ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?R?\s?[-]?\s?[A-D]$") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$fileP3 = $fileP3 -replace '-', ''
if ($fileP3 -eq 'A') { $filePartNumber = '1' }
elseif ($fileP3 -eq 'B') { $filePartNumber = '2' }
elseif ($fileP3 -eq 'C') { $filePartNumber = '3' }
elseif ($fileP3 -eq 'D') { $filePartNumber = '4' }
#elseif ($fileP3 -eq 'E') { $filePartNumber = '5' }
#elseif ($fileP3 -eq 'F') { $filePartNumber = '6' }
#elseif ($fileP3 -eq 'G') { $filePartNumber = '7' }
#elseif ($fileP3 -eq 'H') { $filePartNumber = '8' }
#elseif ($fileP3 -eq 'I') { $filePartNumber = '9' }
$fileBaseNameUpperCleaned += $fileP1 + "-" + (($fileP2 -replace '-', '') -replace '^0{1,5}', '').PadLeft(3, '0')
$fileP3 = ($fileP3 -replace '-', '').Trim()
$asciiP3 = [int][char]$fileP3
if ($asciiP3 -gt 64 -and $asciiP3 -lt 69) {
$filePartNumber = $asciiP3 - 64
}
}
<#
#Match ID-###-A, ID-###-B, etc.
Expand All @@ -199,66 +188,25 @@ function Convert-JVTitle {
}
#>
# Match ID-###-1, ID-###-2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-]\d$") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = ($fileP3 -replace '-', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-###-01, ID-###-02, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-]0\d$") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = (($fileP3 -replace '-', '') -replace '0', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-###-001, ID-###-002, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-]00\d$") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = (($fileP3 -replace '-', '') -replace '0', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-### - pt1, ID-### - pt2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E? [-] pt|PT") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = ((($fileP3 -replace '-', '') -replace '0', '') -replace 'pt', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-### - part1, ID ### - part2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E? [-] part|PART") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = ((($fileP3 -replace '-', '') -replace '0', '') -replace 'pt', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-###-pt1, ID-###-pt2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-]pt|PT") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = ((($fileP3 -replace '-', '') -replace '0', '') -replace 'pt', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-### - pt1, ID-### - pt2, etc.
# Match ID-###-part1, ID-###-part2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-]part|PART") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = ((($fileP3 -replace '-', '') -replace '0', '') -replace 'pt', '')[1]
$filePartNumber = $filePartNum
}
# Match ID-### - part1, ID ### - part2, etc.
# Match ID-###-cd1, ID-###-cd2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?[-]cd|CD") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?)"
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
$filePartNum = ((($fileP3 -replace '-', '') -replace '0', '') -replace 'cd', '')[1]
$filePartNumber = $filePartNum
# Match ID-### - cd1, ID-### - cd2, etc.
elseif ($fileBaseNameUpper[$x] -match "[-][0-9]{1,6}Z?E?R?\s?[-]\s?(cd|part|pt)?[-]?\d{1,3}") {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6}Z?E?\s?[-])"
$fileBaseNameUpperCleaned += $fileP1 + "-" + (($fileP2 -replace '-', '') -replace '^0{1,5}', '').Trim().PadLeft(3, '0')
$filePartNum = ((($fileP3.Trim() -replace '-', '') -replace '^0{1,5}', '') -replace '(cd|part|pt)', '')
$filePartNumber = [int]$filePartNum
}

# Match everything else
else {
$fileP1, $fileP2, $fileP3 = $fileBaseNameUpper[$x] -split "([-][0-9]{1,6})"
if ($fileP3 -match '^Z' -or $fileP3 -match '^E') {
if ($fileP3 -match '^[ZER]') {
$fileBaseNameUpperCleaned += $fileP1 + $fileP2 + $fileP3
} else {
$fileBaseNameUpperCleaned += $fileP1 + $fileP2
Expand Down
122 changes: 116 additions & 6 deletions src/Tests/Unit/Javinizer-Function.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,123 @@ InModuleScope 'Javinizer' {
$WarningPreference = "SilentlyContinue"
#-------------------------------------------------------------------------
Describe 'Javinizer Private Function Tests' -Tag Unit {
Context 'FunctionName' {
<#
It 'should ...' {

}#it
#>
}#context_FunctionName
BeforeAll {
function Get-Files ($fileNames) {
$files = @()
foreach($file in $FileNames) {
$file = [PSCustomObject]@{
Name = $file
BaseName = $file.Substring(0, $file.Length - 4)
}
$files += $file
}
return $files
}
}

Context 'Convert-JVTitle' {
It 'Should convert multipart ID-### accordingly' {
$fileNames = @(
"bbi-094a.wmv",
"bbi-094-b.wmv",
"bbi-094 - c.wmv",
"bbi-094-4.wmv",
"bbi-094 - 1.wmv",
"bbi-094-02.wmv",
"bbi-094-003.wmv",
"bbi-094 - 004.wmv",
"bbi-094-pt1.wmv",
"bbi-094 - pt2.wmv",
"bbi-094-part3.wmv",
"bbi-094 - part4.wmv",
"bbi-094-cd1.wmv",
"bbi-094 - cd2.wmv",
"bbi00094c.wmv",
"bbi00094-d.wmv",
"bbi00094 - a.wmv",
"bbi00094-pt2.wmv",
"bbi00094 - pt3.wmv",
"bbi00094-cd4.wmv",
"bbi00094 - cd1.wmv"
)

$files = Get-Files $fileNames
$results = Convert-JVTitle $files -RegexEnabled $false
$results.ContentId | Should -Be (,"BBI00094" * $fileNames.Length)
$results.Id | Should -Be (,"BBI-094" * $fileNames.Length)
$results.PartNumber | Should -Be ((1..4) * [Math]::Ceiling($fileNames.Length / 4))[0..($fileNames.Length - 1)]
}

It 'Should work fine for ID ending in E, Z and R' {
$fileNames = @(
"ibw-230z.mp4",
"ktra-213e.mp4",
"gesd-093r.mp4"
)

$files = @()
foreach($file in $FileNames) {
$file = [PSCustomObject]@{
Name = $file
BaseName = $file.Substring(0, $file.Length - 4)
}
$files += $file
}

$results = Convert-JVTitle $files -RegexEnabled $false
$results.ContentId | Should -Be ("IBW00230Z", "KTRA00213E", "GESD00093R")
$results.Id | Should -Be ("IBW-230Z", "KTRA-213E", "GESD-093R")
$results.PartNumber | Should -Be (,$null * $fileNames.Length)
}

It 'Should work fine for multipart ID ending in E, Z and R' {
$fileNames = @(
"ibw-230za.mp4",
"ibw-230z-b.mp4",
"ibw-230z - c.mp4",
"ibw-230z-4.mp4",
"ibw-230z - 1.mp4",
"ibw-230z-02.mp4",
"ibw-230z-003.mp4",
"ibw-230z - 004.mp4",
"ibw-230z-pt1.mp4",
"ibw-230z - pt2.mp4",
"ibw-230z-part3.mp4",
"ibw-230z - part4.mp4",
"ibw-230z-cd1.mp4",
"ibw-230z - cd2.mp4",
"ibw00230zc.mp4",
"ibw00230z-d.mp4",
"ibw00230z - a.mp4",
"ibw00230z-pt2.mp4",
"ibw00230z - pt3.mp4",
"ibw00230z-cd4.mp4",
"ibw00230z - cd1.mp4"
)

$files = Get-Files $fileNames
$results = Convert-JVTitle $files -RegexEnabled $false
$results.ContentId | Should -Be (,"IBW00230Z" * $fileNames.Length)
$results.Id | Should -Be (,"IBW-230Z" * $fileNames.Length)
$results.PartNumber | Should -Be ((1..4) * [Math]::Ceiling($fileNames.Length / 4))[0..($fileNames.Length - 1)]
}

It 'Should fail for multiparts > D except Z, E, R. Numerics are OK.' {
$fileNames = @(
"bbi-094f.wmv",
"bbi-094 - g.mp4",
"bbi-094-pt5.mp4"
)

$files = Get-Files $fileNames
$results = Convert-JVTitle $files -RegexEnabled $false
$results.ContentId | Should -Be (,"BBI00094" * $fileNames.Length)
$results.Id | Should -Be (,"BBI-094" * $fileNames.Length)
$results.PartNumber | Should -Be ($null, $null, 5)
}
}

}#describe_PrivateFunctions
Describe 'Javinizer Public Function Tests' -Tag Unit {
Context 'FunctionName' {
Expand Down

0 comments on commit 480e5ab

Please sign in to comment.