Skip to content

Commit ff68cc1

Browse files
committed
transforms all resolution formats to xxxp notation
1 parent 952eb12 commit ff68cc1

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

index.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const Parser = require("./src/parser").Parser;
22
const handlers = require("./src/handlers");
3+
const trasformers = require("./src/transformers");
34

45
const defaultParser = new Parser();
56

@@ -9,3 +10,4 @@ exports.addDefaults = handlers.addDefaults;
910
exports.addHandler = (handlerName, handler, options) => defaultParser.addHandler(handlerName, handler, options);
1011
exports.parse = title => defaultParser.parse(title);
1112
exports.Parser = Parser;
13+
exports.Transformers = trasformers;

src/handlers.js

+6-8
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@ const { value, integer, boolean, lowercase, date, range, yearRange, array } = re
33
exports.addDefaults = /** @type Parser */ parser => {
44

55
// Resolution
6-
parser.addHandler("resolution", /[([]?1920x1080[)\]]?/i, value("1080p"), { remove: true });
7-
parser.addHandler("resolution", /[([]?(?:1280|960)x720[)\]]?/i, value("720p"), { remove: true });
8-
parser.addHandler("resolution", /[([]?640x480[)\]]?/i, value("480p"), { remove: true });
9-
parser.addHandler("resolution", /[([]?(\d{3,4}x\d{3,4})[)\]]?/i, lowercase, { remove: true });
106
parser.addHandler("resolution", /\b[([]?4k[)\]]?\b/i, value("4k"), { remove: true });
11-
parser.addHandler("resolution", /(2160[pi])/i, value("4k"), { skipIfAlreadyFound: false, remove: true });
12-
parser.addHandler("resolution", /([0-9]{3,4}[pi])/i, lowercase, { remove: true });
7+
parser.addHandler("resolution", /2160[pi]/i, value("4k"), { skipIfAlreadyFound: false, remove: true });
8+
parser.addHandler("resolution", /[([]?3840x2160[)\]]?/i, value("4k"), { remove: true });
9+
parser.addHandler("resolution", /[([]?\d{3,4}x(\d{3,4})[)\]]?/i, value("$1p"), { remove: true });
10+
parser.addHandler("resolution", /([0-9]{3,4})[pi]/i, value("$1p"), { remove: true });
1311

1412
// Year
1513
parser.addHandler("date", /(?<=\W|^)([([]?(?:19[6-9]|20[012])[0-9][. -/\\](?:0[1-9]|1[012])[. -/\\](?:0[1-9]|[12][0-9]|3[01])[)\]]?)(?=\W|$)/, date("YYYY MM DD"), { remove: true });
@@ -161,8 +159,8 @@ exports.addDefaults = /** @type Parser */ parser => {
161159
const partTitle = title.slice(startIndex, endIndex);
162160

163161
// try to match the episode inside the title with a separator, if not found include the start of the title as well
164-
const matches = partTitle.match(/(?<!movie\W*|film\W*)[ .]?[([-][ .]?(\d{1,3})(?:a|b|v\d)?(?:\W|$)/i) ||
165-
partTitle.match(/^[ .]?(\d{1,3})(?:a|b|v\d)?(?:\W|$)(?!movie|film)/i);
162+
const matches = partTitle.match(/(?<!movie\W*|film\W*)[ .]?[([-][ .]?(\d{1,4})(?:a|b|v\d)?(?:\W|$)(?!movie|film)/i) ||
163+
partTitle.match(/^[ .]?(\d{1,4})(?:a|b|v\d)?(?:\W|$)(?!movie|film)/i);
166164

167165
if (matches) {
168166
result.episodes = [matches[matches.length - 1]]

src/transformers.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
const moment = require('moment');
1+
const moment = require("moment");
22

33
exports.none = input => input;
44

5-
exports.value = staticValue => () => staticValue;
5+
exports.value = staticValue => input => staticValue.replace("$1", input);
66

77
exports.integer = input => parseInt(input, 10);
88

test/resolution.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ describe("Parsing resolution", () => {
3434

3535
it("should detect custom resolution correctly", () => {
3636
const releaseName = "[JacobSwaggedUp] Kizumonogatari I: Tekketsu-hen (BD 1280x544) [MP4 Movie]";
37-
expect(parse(releaseName)).to.deep.include({ resolution: "1280x544" });
37+
38+
expect(parse(releaseName)).to.deep.include({ resolution: "544p" });
39+
});
40+
41+
it("should detect 720i resolution and format as 720p", () => {
42+
const releaseName = "UFC 187 PPV 720i HDTV X264-KYR";
43+
44+
expect(parse(releaseName)).to.deep.include({ resolution: "720p" });
3845
});
3946
});

0 commit comments

Comments
 (0)