runOn: a space after the extension, not a bare dash
0c5ede9 cut "Angry.Birds.Rio.v1.2.2.cracked.READ.NFO-THETA.rar" at .NFO: the
release lost its group, and two groups' releases of one game would merge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0c5ede99dd
commit
6f7a1692d6
3 files changed
+7
-3
No files matched your search
+3
-1
@@ -699,7 +699,8 @@ pub fn run_on(name: &str) -> &str {
|
|||||||
if rest.is_empty() {
|
if rest.is_empty() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
let spaced = rest.starts_with(js::is_space) || rest.trim_start_matches(js::is_space).starts_with('-');
|
// Not a bare dash ("….READ.NFO-THETA.rar").
|
||||||
|
let spaced = rest.starts_with(js::is_space);
|
||||||
let repeats = ascii && rest.len() >= 4 && rest.as_bytes()[..4].eq_ignore_ascii_case(&b[..4]);
|
let repeats = ascii && rest.len() >= 4 && rest.as_bytes()[..4].eq_ignore_ascii_case(&b[..4]);
|
||||||
if spaced || repeats {
|
if spaced || repeats {
|
||||||
return &name[..m.end()];
|
return &name[..m.end()];
|
||||||
@@ -1496,6 +1497,7 @@ mod image_set_tests {
|
|||||||
("Goga Sekulic.part134.rar - Goga Sekulic - Diskografija (2000-2014).", "Goga Sekulic.part134.rar"),
|
("Goga Sekulic.part134.rar - Goga Sekulic - Diskografija (2000-2014).", "Goga Sekulic.part134.rar"),
|
||||||
("HASf293jLAIWUELvhaG3.part091.rar HASf293jLAIWUELvhaG3", "HASf293jLAIWUELvhaG3.part091.rar"),
|
("HASf293jLAIWUELvhaG3.part091.rar HASf293jLAIWUELvhaG3", "HASf293jLAIWUELvhaG3.part091.rar"),
|
||||||
("Movie.rar.Collection.mkv", "Movie.rar.Collection.mkv"),
|
("Movie.rar.Collection.mkv", "Movie.rar.Collection.mkv"),
|
||||||
|
("Angry.Birds.Rio.v1.2.2.cracked.READ.NFO-THETA.rar", "Angry.Birds.Rio.v1.2.2.cracked.READ.NFO-THETA.rar"),
|
||||||
("x.part01.rar", "x.part01.rar"),
|
("x.part01.rar", "x.part01.rar"),
|
||||||
] {
|
] {
|
||||||
assert_eq!(super::run_on(n), cut, "{n}");
|
assert_eq!(super::run_on(n), cut, "{n}");
|
||||||
|
|||||||
@@ -298,7 +298,8 @@ const RUN_ON = /\.(?:part\d+\.rar|vol\d+[+-]\d+\.par2|par2|rar|r\d{2,3}|7z(?:\.\
|
|||||||
/**
|
/**
|
||||||
* A quoted name that runs on past its extension into a title ("lois 1258 Billy Joel - Extremes.part01.rar lois 1258 Billy
|
* A quoted name that runs on past its extension into a title ("lois 1258 Billy Joel - Extremes.part01.rar lois 1258 Billy
|
||||||
* Joel - Extremes ", "GrooveCoverage.part26.rarGrooveCoveragebestof", "Goga Sekulic.part134.rar - Goga Sekulic - …": each
|
* Joel - Extremes ", "GrooveCoverage.part26.rarGrooveCoveragebestof", "Goga Sekulic.part134.rar - Goga Sekulic - …": each
|
||||||
* part a release of its own): the name up to that extension, when a space or a dash follows it, or the name's own start.
|
* part a release of its own): the name up to that extension, when a space follows it, or the name's own start. Not a
|
||||||
|
* bare dash ("Angry.Birds.Rio.v1.2.2.cracked.READ.NFO-THETA.rar" keeps its group).
|
||||||
*/
|
*/
|
||||||
export function runOn(name: string): string {
|
export function runOn(name: string): string {
|
||||||
const head = name.slice(0, 4).toLowerCase()
|
const head = name.slice(0, 4).toLowerCase()
|
||||||
@@ -307,7 +308,7 @@ export function runOn(name: string): string {
|
|||||||
const end = m.index + m[0].length
|
const end = m.index + m[0].length
|
||||||
const rest = name.slice(end)
|
const rest = name.slice(end)
|
||||||
if (rest.length === 0) return name
|
if (rest.length === 0) return name
|
||||||
if (/^\s|^\s*-/.test(rest) || (ascii && rest.slice(0, 4).toLowerCase() === head)) return name.slice(0, end)
|
if (/^\s/.test(rest) || (ascii && rest.slice(0, 4).toLowerCase() === head)) return name.slice(0, end)
|
||||||
}
|
}
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -315,6 +315,7 @@ test.group('release / par2 names', () => {
|
|||||||
assert.equal(runOn('Goga Sekulic.part134.rar - Goga Sekulic - Diskografija (2000-2014).'), 'Goga Sekulic.part134.rar')
|
assert.equal(runOn('Goga Sekulic.part134.rar - Goga Sekulic - Diskografija (2000-2014).'), 'Goga Sekulic.part134.rar')
|
||||||
assert.equal(runOn('HASf293jLAIWUELvhaG3.part091.rar HASf293jLAIWUELvhaG3'), 'HASf293jLAIWUELvhaG3.part091.rar')
|
assert.equal(runOn('HASf293jLAIWUELvhaG3.part091.rar HASf293jLAIWUELvhaG3'), 'HASf293jLAIWUELvhaG3.part091.rar')
|
||||||
assert.equal(runOn('Movie.rar.Collection.mkv'), 'Movie.rar.Collection.mkv')
|
assert.equal(runOn('Movie.rar.Collection.mkv'), 'Movie.rar.Collection.mkv')
|
||||||
|
assert.equal(runOn('Angry.Birds.Rio.v1.2.2.cracked.READ.NFO-THETA.rar'), 'Angry.Birds.Rio.v1.2.2.cracked.READ.NFO-THETA.rar')
|
||||||
assert.equal(runOn('x.part01.rar'), 'x.part01.rar')
|
assert.equal(runOn('x.part01.rar'), 'x.part01.rar')
|
||||||
const lois = (i: string, n: string) => releaseIdentity({ poster: 'p', subject: `(thnx to original poster) [${i}/92] - "${n}" yEnc`, name: n, weak: false })!
|
const lois = (i: string, n: string) => releaseIdentity({ poster: 'p', subject: `(thnx to original poster) [${i}/92] - "${n}" yEnc`, name: n, weak: false })!
|
||||||
assert.equal(lois('02', 'lois 1258 Billy Joel - Extremes.part01.rar lois 1258 Billy Joel - Extremes ').key, lois('01', 'lois 1258 Billy Joel - Extremes.par2 lois 1258 Billy Joel - Extremes ').key)
|
assert.equal(lois('02', 'lois 1258 Billy Joel - Extremes.part01.rar lois 1258 Billy Joel - Extremes ').key, lois('01', 'lois 1258 Billy Joel - Extremes.par2 lois 1258 Billy Joel - Extremes ').key)
|
||||||
|
|||||||
Reference in new issue
Block a user