cross-seed 6.0.0-3 → 6.0.0-30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/Result.js +17 -11
  2. package/dist/Result.js.map +1 -1
  3. package/dist/action.js +158 -47
  4. package/dist/action.js.map +1 -1
  5. package/dist/arr.js +200 -0
  6. package/dist/arr.js.map +1 -0
  7. package/dist/clients/Deluge.js +129 -71
  8. package/dist/clients/Deluge.js.map +1 -1
  9. package/dist/clients/QBittorrent.js +74 -58
  10. package/dist/clients/QBittorrent.js.map +1 -1
  11. package/dist/clients/RTorrent.js +12 -10
  12. package/dist/clients/RTorrent.js.map +1 -1
  13. package/dist/clients/TorrentClient.js.map +1 -1
  14. package/dist/clients/Transmission.js +10 -10
  15. package/dist/clients/Transmission.js.map +1 -1
  16. package/dist/cmd.js +16 -16
  17. package/dist/cmd.js.map +1 -1
  18. package/dist/config.template.cjs +83 -46
  19. package/dist/config.template.cjs.map +1 -1
  20. package/dist/configSchema.js +97 -13
  21. package/dist/configSchema.js.map +1 -1
  22. package/dist/configuration.js +3 -0
  23. package/dist/configuration.js.map +1 -1
  24. package/dist/constants.js +100 -6
  25. package/dist/constants.js.map +1 -1
  26. package/dist/dataFiles.js +4 -5
  27. package/dist/dataFiles.js.map +1 -1
  28. package/dist/decide.js +263 -158
  29. package/dist/decide.js.map +1 -1
  30. package/dist/diff.js +12 -2
  31. package/dist/diff.js.map +1 -1
  32. package/dist/errors.js +5 -2
  33. package/dist/errors.js.map +1 -1
  34. package/dist/indexers.js +31 -4
  35. package/dist/indexers.js.map +1 -1
  36. package/dist/jobs.js +2 -0
  37. package/dist/jobs.js.map +1 -1
  38. package/dist/logger.js +19 -5
  39. package/dist/logger.js.map +1 -1
  40. package/dist/migrations/05-caps.js +16 -0
  41. package/dist/migrations/05-caps.js.map +1 -0
  42. package/dist/migrations/06-uniqueDecisions.js +29 -0
  43. package/dist/migrations/06-uniqueDecisions.js.map +1 -0
  44. package/dist/migrations/migrations.js +11 -1
  45. package/dist/migrations/migrations.js.map +1 -1
  46. package/dist/parseTorrent.js +5 -0
  47. package/dist/parseTorrent.js.map +1 -1
  48. package/dist/pipeline.js +181 -85
  49. package/dist/pipeline.js.map +1 -1
  50. package/dist/preFilter.js +130 -52
  51. package/dist/preFilter.js.map +1 -1
  52. package/dist/pushNotifier.js +4 -2
  53. package/dist/pushNotifier.js.map +1 -1
  54. package/dist/runtimeConfig.js.map +1 -1
  55. package/dist/searchee.js +203 -13
  56. package/dist/searchee.js.map +1 -1
  57. package/dist/server.js +22 -15
  58. package/dist/server.js.map +1 -1
  59. package/dist/startup.js +2 -0
  60. package/dist/startup.js.map +1 -1
  61. package/dist/torrent.js +84 -39
  62. package/dist/torrent.js.map +1 -1
  63. package/dist/torznab.js +285 -95
  64. package/dist/torznab.js.map +1 -1
  65. package/dist/utils.js +155 -31
  66. package/dist/utils.js.map +1 -1
  67. package/package.json +3 -1
package/dist/preFilter.js CHANGED
@@ -1,61 +1,105 @@
1
1
  import ms from "ms";
2
- import { extname } from "path";
3
- import { EP_REGEX, SEASON_REGEX, VIDEO_EXTENSIONS } from "./constants.js";
2
+ import { basename, dirname } from "path";
3
+ import { statSync } from "fs";
4
+ import { ARR_DIR_REGEX, SONARR_SUBFOLDERS_REGEX, SEASON_REGEX, VIDEO_EXTENSIONS, VIDEO_DISC_EXTENSIONS, } from "./constants.js";
4
5
  import { db } from "./db.js";
5
6
  import { getEnabledIndexers } from "./indexers.js";
6
7
  import { Label, logger } from "./logger.js";
7
8
  import { getRuntimeConfig } from "./runtimeConfig.js";
8
- import { humanReadableDate, nMsAgo } from "./utils.js";
9
- import path from "path";
10
- export function filterByContent(searchee) {
11
- const { includeEpisodes, includeNonVideos, includeSingleEpisodes, blockList, } = getRuntimeConfig();
12
- function logReason(reason) {
13
- logger.verbose({
14
- label: Label.PREFILTER,
15
- message: `Torrent ${searchee.name} was not selected for searching because ${reason}`,
16
- });
17
- }
9
+ import { indexerDoesSupportMediaType } from "./torznab.js";
10
+ import { filesWithExt, getLogString, getMediaType, hasExt, humanReadableDate, MediaType, nMsAgo, } from "./utils.js";
11
+ const MAX_INT = Number.MAX_SAFE_INTEGER;
12
+ function logReason(reason, searchee, mediaType) {
13
+ logger.verbose({
14
+ label: Label.PREFILTER,
15
+ message: `${getLogString(searchee)} | MediaType: ${mediaType.toUpperCase()} - was not selected for searching because ${reason}`,
16
+ });
17
+ }
18
+ export function isSingleEpisode(searchee, mediaType) {
19
+ if (mediaType === MediaType.EPISODE)
20
+ return true;
21
+ if (mediaType !== MediaType.ANIME)
22
+ return false;
23
+ return filesWithExt(searchee.files, VIDEO_EXTENSIONS).length === 1;
24
+ // if (m === MediaType.EPISODE) return true;
25
+ // if (!(m === MediaType.ANIME || m === MediaType.VIDEO)) return false;
26
+ // if (searchee.files.length === 1 && m === MediaType.ANIME) return true;
27
+ // if (searchee.files.length > 5) return false; // Probably a pack, allow extra files
28
+ // To check arrs use: return parsedMedia?.episodes?.length === 1, uncomment above
29
+ }
30
+ export function filterByContent(searchee, includeEpisodes) {
31
+ const { fuzzySizeThreshold, includeNonVideos, includeSingleEpisodes, blockList, } = getRuntimeConfig();
32
+ const mediaType = getMediaType(searchee);
18
33
  const blockedNote = findBlockedStringInReleaseMaybe(searchee, blockList);
19
34
  if (blockedNote) {
20
- logReason(`it matched the blocklist - ("${blockedNote}")`);
35
+ logReason(`it matched the blocklist - ("${blockedNote}")`, searchee, mediaType);
21
36
  return false;
22
37
  }
23
- const isSingleEpisodeTorrent = searchee.files.length === 1 && EP_REGEX.test(searchee.name);
24
- const isSeasonPackEpisode = searchee.path &&
38
+ if ((!includeEpisodes || !includeSingleEpisodes) &&
39
+ searchee.path &&
25
40
  searchee.files.length === 1 &&
26
- SEASON_REGEX.test(path.basename(path.dirname(searchee.path)));
27
- if (!includeEpisodes &&
28
- !includeSingleEpisodes &&
29
- isSingleEpisodeTorrent &&
30
- !isSeasonPackEpisode) {
31
- logReason("it is a single episode");
41
+ (SEASON_REGEX.test(basename(dirname(searchee.path))) ||
42
+ SONARR_SUBFOLDERS_REGEX.test(basename(dirname(searchee.path))))) {
43
+ logReason("it is a season pack episode", searchee, mediaType);
44
+ return false;
45
+ }
46
+ if (!includeSingleEpisodes &&
47
+ searchee.label !== Label.ANNOUNCE &&
48
+ isSingleEpisode(searchee, mediaType)) {
49
+ logReason("it is a single episode", searchee, mediaType);
32
50
  return false;
33
51
  }
34
- if (!includeEpisodes && isSeasonPackEpisode) {
35
- logReason("it is a season pack episode");
52
+ const nonVideoSizeRatio = searchee.files.reduce((acc, cur) => {
53
+ if (!hasExt([cur], [...VIDEO_EXTENSIONS, ...VIDEO_DISC_EXTENSIONS])) {
54
+ return acc + cur.length;
55
+ }
56
+ return acc;
57
+ }, 0) / searchee.length;
58
+ if (!includeNonVideos && nonVideoSizeRatio > fuzzySizeThreshold) {
59
+ logReason(`nonVideoSizeRatio ${nonVideoSizeRatio} > ${fuzzySizeThreshold} fuzzySizeThreshold`, searchee, mediaType);
36
60
  return false;
37
61
  }
38
- const allFilesAreVideos = searchee.files.every((file) => VIDEO_EXTENSIONS.includes(extname(file.name)));
39
- if (!includeNonVideos && !allFilesAreVideos) {
40
- logReason("not all files are videos");
62
+ if (searchee.path &&
63
+ statSync(searchee.path).isDirectory() &&
64
+ ARR_DIR_REGEX.test(basename(searchee.path)) &&
65
+ nonVideoSizeRatio < 0.02 &&
66
+ !(searchee.files.length > 1 &&
67
+ SONARR_SUBFOLDERS_REGEX.test(basename(searchee.path)))) {
68
+ logReason("it looks like an arr movie/series directory", searchee, mediaType);
41
69
  return false;
42
70
  }
43
71
  return true;
44
72
  }
45
73
  export function findBlockedStringInReleaseMaybe(searchee, blockList) {
46
74
  return blockList.find((blockedStr) => {
47
- return (searchee.name.includes(blockedStr) ||
75
+ return (searchee.title.includes(blockedStr) ||
76
+ (searchee.path &&
77
+ basename(dirname(searchee.path)).includes(blockedStr)) ||
48
78
  blockedStr === searchee.infoHash);
49
79
  });
50
80
  }
51
- export function filterDupes(searchees) {
81
+ /**
82
+ * Filters duplicates from searchees that should be for different candidates,
83
+ * e.g. all searchees created by cross-seed.
84
+ * @param searchees - An array of searchees to filter duplicates from.
85
+ * @returns An array of searchees with duplicates removed, preferring infoHash.
86
+ */
87
+ export function filterDupesByName(searchees) {
52
88
  const duplicateMap = searchees.reduce((acc, cur) => {
53
- const entry = acc.get(cur.name);
89
+ const entry = acc.get(cur.title);
54
90
  if (entry === undefined) {
55
- acc.set(cur.name, cur);
91
+ acc.set(cur.title, cur);
92
+ return acc;
93
+ }
94
+ if (cur.files.length > entry.files.length) {
95
+ acc.set(cur.title, cur);
96
+ return acc;
56
97
  }
57
- else if (cur.infoHash && !entry.infoHash) {
58
- acc.set(cur.name, cur);
98
+ if (cur.files.length < entry.files.length) {
99
+ return acc;
100
+ }
101
+ if (cur.infoHash && !entry.infoHash) {
102
+ acc.set(cur.title, cur);
59
103
  }
60
104
  return acc;
61
105
  }, new Map());
@@ -69,9 +113,39 @@ export function filterDupes(searchees) {
69
113
  }
70
114
  return filtered;
71
115
  }
116
+ /**
117
+ * Filters duplicates from searchees that are for the same candidates,
118
+ * e.g. searchees for the same media but different resolutions.
119
+ * @param searchees - An array of searchees for a specific media.
120
+ * @returns An array of searchees that are unique from a matching perspective.
121
+ */
122
+ export function filterDupesFromSimilar(searchees) {
123
+ const filteredSearchees = [];
124
+ for (const searchee of searchees) {
125
+ const isDupe = filteredSearchees.some((s) => {
126
+ if (searchee.length !== s.length)
127
+ return false;
128
+ if (searchee.files.length !== s.files.length)
129
+ return false;
130
+ const potentialFiles = s.files.map((f) => f.length);
131
+ return searchee.files.every((file) => {
132
+ const index = potentialFiles.indexOf(file.length);
133
+ if (index === -1)
134
+ return false;
135
+ potentialFiles.splice(index, 1);
136
+ return true;
137
+ });
138
+ });
139
+ if (!isDupe) {
140
+ filteredSearchees.push(searchee);
141
+ }
142
+ }
143
+ return filteredSearchees;
144
+ }
72
145
  export async function filterTimestamps(searchee) {
73
146
  const { excludeOlder, excludeRecentSearch } = getRuntimeConfig();
74
147
  const enabledIndexers = await getEnabledIndexers();
148
+ const mediaType = getMediaType(searchee);
75
149
  const timestampDataSql = (await db("searchee")
76
150
  // @ts-expect-error crossJoin supports string
77
151
  .crossJoin("indexer")
@@ -79,32 +153,36 @@ export async function filterTimestamps(searchee) {
79
153
  "timestamp.indexer_id": "indexer.id",
80
154
  "timestamp.searchee_id": "searchee.id",
81
155
  })
82
- .where("searchee.name", searchee.name)
83
- .whereIn("indexer.id", enabledIndexers.map((i) => i.id))
156
+ .where("searchee.name", searchee.title)
157
+ .whereIn("indexer.id", enabledIndexers
158
+ .filter((indexer) => indexerDoesSupportMediaType(mediaType, JSON.parse(indexer.categories)))
159
+ .map((indexer) => indexer.id))
84
160
  .min({
85
- first_searched_any: db.raw("coalesce(timestamp.first_searched, 9223372036854775807)"),
161
+ earliest_first_search: db.raw(`coalesce(timestamp.first_searched, ${MAX_INT})`),
162
+ })
163
+ .max({
164
+ latest_first_search: db.raw(`coalesce(timestamp.first_searched, ${MAX_INT})`),
86
165
  })
87
166
  .min({
88
- last_searched_all: db.raw("coalesce(timestamp.last_searched, 0)"),
167
+ earliest_last_search: db.raw("coalesce(timestamp.last_searched, 0)"),
89
168
  })
90
169
  .first());
91
- const { first_searched_any, last_searched_all } = timestampDataSql;
92
- function logReason(reason) {
93
- logger.verbose({
94
- label: Label.PREFILTER,
95
- message: `Torrent ${searchee.name} was not selected for searching because ${reason}`,
96
- });
97
- }
98
- if (typeof excludeOlder === "number" &&
99
- first_searched_any &&
100
- first_searched_any < nMsAgo(excludeOlder)) {
101
- logReason(`its first search timestamp ${humanReadableDate(first_searched_any)} is older than ${ms(excludeOlder, { long: true })} ago`);
102
- return false;
170
+ const { earliest_first_search, latest_first_search, earliest_last_search } = timestampDataSql;
171
+ const skipBefore = excludeOlder
172
+ ? nMsAgo(excludeOlder)
173
+ : Number.NEGATIVE_INFINITY;
174
+ // Don't exclude if new indexer was added
175
+ if (!latest_first_search || latest_first_search !== MAX_INT) {
176
+ if (earliest_first_search && earliest_first_search < skipBefore) {
177
+ logReason(`its first search timestamp ${humanReadableDate(earliest_first_search)} is older than ${ms(excludeOlder, { long: true })} ago`, searchee, mediaType);
178
+ return false;
179
+ }
103
180
  }
104
- if (typeof excludeRecentSearch === "number" &&
105
- last_searched_all &&
106
- last_searched_all > nMsAgo(excludeRecentSearch)) {
107
- logReason(`its last search timestamp ${humanReadableDate(last_searched_all)} is newer than ${ms(excludeRecentSearch, { long: true })} ago`);
181
+ const skipAfter = excludeRecentSearch
182
+ ? nMsAgo(excludeRecentSearch)
183
+ : Number.POSITIVE_INFINITY;
184
+ if (earliest_last_search && earliest_last_search > skipAfter) {
185
+ logReason(`its last search timestamp ${humanReadableDate(earliest_last_search)} is newer than ${ms(excludeRecentSearch, { long: true })} ago`, searchee, mediaType);
108
186
  return false;
109
187
  }
110
188
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../src/preFilter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../src/preFilter.ts"],"names":[],"mappings":"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"}
@@ -43,12 +43,13 @@ export class PushNotifier {
43
43
  }
44
44
  }
45
45
  }
46
- export function sendResultsNotification(searchee, results, source) {
47
- const name = searchee.name;
46
+ export function sendResultsNotification(searchee, results) {
47
+ const source = searchee.label;
48
48
  const notableSuccesses = results.filter(([, , actionResult]) => actionResult === InjectionResult.SUCCESS ||
49
49
  actionResult === SaveResult.SAVED);
50
50
  const failures = results.filter(([, , actionResult]) => actionResult === InjectionResult.FAILURE);
51
51
  if (notableSuccesses.length) {
52
+ const name = notableSuccesses[0][0].metafile.name;
52
53
  const numTrackers = notableSuccesses.length;
53
54
  const infoHashes = notableSuccesses.map(([assessment]) => assessment.metafile.infoHash);
54
55
  const trackers = notableSuccesses.map(([, tracker]) => tracker);
@@ -69,6 +70,7 @@ export function sendResultsNotification(searchee, results, source) {
69
70
  });
70
71
  }
71
72
  if (failures.length) {
73
+ const name = failures[0][0].metafile.name;
72
74
  const numTrackers = failures.length;
73
75
  const infoHashes = failures.map(([assessment]) => assessment.metafile.infoHash);
74
76
  const trackers = failures.map(([, tracker]) => tracker);
@@ -1 +1 @@
1
- {"version":3,"file":"pushNotifier.js","sourceRoot":"","sources":["../src/pushNotifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pushNotifier.js","sourceRoot":"","sources":["../src/pushNotifier.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../src/runtimeConfig.ts"],"names":[],"mappings":"AAuCA,IAAI,aAA4B,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACxD,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,OAAO,aAAa,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../src/runtimeConfig.ts"],"names":[],"mappings":"AAwCA,IAAI,aAA4B,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACxD,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,OAAO,aAAa,CAAC;AACtB,CAAC"}
package/dist/searchee.js CHANGED
@@ -1,14 +1,29 @@
1
1
  import { readdirSync, statSync } from "fs";
2
- import { basename, extname, join, relative } from "path";
3
- import { VIDEO_EXTENSIONS } from "./constants.js";
4
- import { logger } from "./logger.js";
2
+ import { basename, dirname, join, relative } from "path";
3
+ import { ANIME_REGEX, ANIME_GROUP_REGEX, ARR_DIR_REGEX, EP_REGEX, RELEASE_GROUP_REGEX, SEASON_REGEX, RES_STRICT_REGEX, parseSource, SONARR_SUBFOLDERS_REGEX, MOVIE_REGEX, VIDEO_EXTENSIONS, } from "./constants.js";
4
+ import { Label, logger } from "./logger.js";
5
5
  import { resultOf, resultOfErr } from "./Result.js";
6
6
  import { parseTorrentFromFilename } from "./torrent.js";
7
+ import { createKeyTitle, extractInt, filesWithExt, getLogString, hasExt, isBadTitle, } from "./utils.js";
7
8
  export function hasInfoHash(searchee) {
8
9
  return searchee.infoHash != null;
9
10
  }
10
- export function hasVideo(searchee) {
11
- return searchee.files.some((file) => VIDEO_EXTENSIONS.includes(extname(file.name)));
11
+ var SearcheeSource;
12
+ (function (SearcheeSource) {
13
+ SearcheeSource["TORRENT"] = "torrentDir";
14
+ SearcheeSource["DATA"] = "dataDir";
15
+ SearcheeSource["VIRTUAL"] = "virtual";
16
+ })(SearcheeSource || (SearcheeSource = {}));
17
+ export function getSearcheeSource(searchee) {
18
+ if (searchee.infoHash) {
19
+ return SearcheeSource.TORRENT;
20
+ }
21
+ else if (searchee.path) {
22
+ return SearcheeSource.DATA;
23
+ }
24
+ else {
25
+ return SearcheeSource.VIRTUAL;
26
+ }
12
27
  }
13
28
  function getFileNamesFromRootRec(root, isDirHint) {
14
29
  const isDir = isDirHint !== undefined ? isDirHint : statSync(root).isDirectory();
@@ -27,18 +42,82 @@ function getFilesFromDataRoot(rootPath) {
27
42
  length: statSync(file).size,
28
43
  }));
29
44
  }
45
+ /**
46
+ * Parse title from SXX or Season XX. Return null if no title found.
47
+ * Also tries to parse titles that are just `Show`, returns `Show` if better not found.
48
+ * @param files files in the searchee
49
+ * @param options.seasonMatch if the searchee is a `Season X` folder
50
+ * @param options.path if data based, the path to the searchee
51
+ */
52
+ function parseTitle(files, seasonMatch, path) {
53
+ const videoFiles = filesWithExt(files, VIDEO_EXTENSIONS);
54
+ for (const videoFile of videoFiles) {
55
+ const ep = videoFile.name.match(EP_REGEX);
56
+ if (ep) {
57
+ const seasonVal = ep.groups.season ??
58
+ ep.groups.year ??
59
+ seasonMatch?.groups.seasonNum;
60
+ const season = seasonVal ? `S${extractInt(seasonVal)}` : "";
61
+ const episode = videoFiles.length === 1
62
+ ? `E${ep.groups.episode ? extractInt(ep.groups.episode) : `${ep.groups.month}.${ep.groups.day}`}`
63
+ : "";
64
+ if (season.length || episode.length || !seasonMatch) {
65
+ return `${ep.groups.title} ${season}${episode}`.trim();
66
+ }
67
+ }
68
+ if (path && seasonMatch) {
69
+ const title = basename(dirname(path)).match(ARR_DIR_REGEX)?.groups
70
+ ?.title;
71
+ if (title?.length) {
72
+ return `${title} S${seasonMatch.groups.seasonNum}`;
73
+ }
74
+ }
75
+ const anime = videoFile.name.match(ANIME_REGEX);
76
+ if (anime) {
77
+ const season = seasonMatch
78
+ ? `S${seasonMatch.groups.seasonNum}`
79
+ : "";
80
+ if (season.length || !seasonMatch) {
81
+ return `${anime.groups.title} ${season}`.trim();
82
+ }
83
+ }
84
+ }
85
+ return null;
86
+ }
30
87
  export function createSearcheeFromMetafile(meta) {
31
- return {
88
+ const seasonMatch = meta.name.length < 12 ? meta.name.match(SONARR_SUBFOLDERS_REGEX) : null;
89
+ if (!seasonMatch &&
90
+ (meta.name.match(/\d/) || !hasExt(meta.files, VIDEO_EXTENSIONS))) {
91
+ return resultOf({
92
+ files: meta.files,
93
+ infoHash: meta.infoHash,
94
+ name: meta.name,
95
+ title: meta.name,
96
+ length: meta.length,
97
+ });
98
+ }
99
+ const title = parseTitle(meta.files, seasonMatch) ??
100
+ (!seasonMatch ? meta.name : null);
101
+ if (!title) {
102
+ const msg = `Could not find title for ${getLogString(meta)} from child files`;
103
+ logger.verbose({
104
+ label: Label.PREFILTER,
105
+ message: msg,
106
+ });
107
+ return resultOfErr(new Error(msg));
108
+ }
109
+ return resultOf({
32
110
  files: meta.files,
33
111
  infoHash: meta.infoHash,
34
112
  name: meta.name,
113
+ title,
35
114
  length: meta.length,
36
- };
115
+ });
37
116
  }
38
117
  export async function createSearcheeFromTorrentFile(filepath) {
39
118
  try {
40
119
  const meta = await parseTorrentFromFilename(filepath);
41
- return resultOf(createSearcheeFromMetafile(meta));
120
+ return createSearcheeFromMetafile(meta);
42
121
  }
43
122
  catch (e) {
44
123
  logger.error(`Failed to parse ${basename(filepath)}`);
@@ -46,13 +125,124 @@ export async function createSearcheeFromTorrentFile(filepath) {
46
125
  return resultOfErr(e);
47
126
  }
48
127
  }
49
- export async function createSearcheeFromPath(filepath) {
50
- const totalLength = getFilesFromDataRoot(filepath).reduce((runningTotal, file) => runningTotal + file.length, 0);
128
+ export async function createSearcheeFromPath(root) {
129
+ const files = getFilesFromDataRoot(root);
130
+ if (files.length === 0) {
131
+ const msg = `No files found in ${root}`;
132
+ logger.verbose({
133
+ label: Label.PREFILTER,
134
+ message: msg,
135
+ });
136
+ return resultOfErr(new Error(msg));
137
+ }
138
+ const totalLength = files.reduce((runningTotal, file) => runningTotal + file.length, 0);
139
+ const baseName = basename(root);
140
+ const seasonMatch = baseName.length < 12 ? baseName.match(SONARR_SUBFOLDERS_REGEX) : null;
141
+ if (!seasonMatch &&
142
+ (baseName.match(/\d/) || !hasExt(files, VIDEO_EXTENSIONS))) {
143
+ return resultOf({
144
+ files: files,
145
+ path: root,
146
+ name: baseName,
147
+ title: baseName,
148
+ length: totalLength,
149
+ });
150
+ }
151
+ const title = parseTitle(files, seasonMatch, root) ??
152
+ (!seasonMatch ? baseName : null);
153
+ if (!title) {
154
+ const msg = `Could not find title for ${root} in parent directory or child files`;
155
+ logger.verbose({
156
+ label: Label.PREFILTER,
157
+ message: msg,
158
+ });
159
+ return resultOfErr(new Error(msg));
160
+ }
51
161
  return resultOf({
52
- files: getFilesFromDataRoot(filepath),
53
- path: filepath,
54
- name: basename(filepath),
162
+ files: files,
163
+ path: root,
164
+ name: baseName,
165
+ title,
55
166
  length: totalLength,
56
167
  });
57
168
  }
169
+ export function getKeyMetaInfo(stem) {
170
+ const resM = stem.match(RES_STRICT_REGEX)?.groups?.res;
171
+ const res = resM ? `.${resM}` : "";
172
+ const sourceM = parseSource(stem);
173
+ const source = sourceM ? `.${sourceM}` : "";
174
+ const groupM = stem.match(RELEASE_GROUP_REGEX)?.groups?.group;
175
+ if (groupM) {
176
+ return `${res}${source}-${groupM}`.toLowerCase();
177
+ }
178
+ const groupAnimeM = stem.match(ANIME_GROUP_REGEX)?.groups?.group;
179
+ if (groupAnimeM) {
180
+ return `${res}${source}-${groupAnimeM}`.toLowerCase();
181
+ }
182
+ return `${res}${source}`.toLowerCase();
183
+ }
184
+ export function getMovieKey(stem) {
185
+ const match = stem.match(MOVIE_REGEX);
186
+ if (!match)
187
+ return null;
188
+ const keyTitle = createKeyTitle(match.groups.title);
189
+ if (!keyTitle)
190
+ return null;
191
+ const year = extractInt(match.groups.year);
192
+ const ensembleTitle = `${match.groups.title}.${year}`;
193
+ return { ensembleTitle, keyTitle, year };
194
+ }
195
+ export function getSeasonKey(stem) {
196
+ const match = stem.match(SEASON_REGEX);
197
+ if (!match)
198
+ return null;
199
+ const keyTitle = createKeyTitle(match.groups.title);
200
+ if (!keyTitle)
201
+ return null;
202
+ const season = `S${extractInt(match.groups.season)}`;
203
+ const ensembleTitle = `${match.groups.title}.${season}`;
204
+ return { ensembleTitle, keyTitle, season };
205
+ }
206
+ export function getEpisodeKey(stem) {
207
+ const match = stem.match(EP_REGEX);
208
+ if (!match)
209
+ return null;
210
+ const keyTitle = createKeyTitle(match.groups.title);
211
+ if (!keyTitle)
212
+ return null;
213
+ const season = match.groups.season
214
+ ? `S${extractInt(match.groups.season)}`
215
+ : match.groups.year
216
+ ? `S${match.groups.year}`
217
+ : undefined;
218
+ const ensembleTitle = `${match.groups.title}${season ? `.${season}` : ""}`;
219
+ const episode = match.groups.episode
220
+ ? extractInt(match.groups.episode)
221
+ : `${match.groups.month}.${match.groups.day}`;
222
+ return { ensembleTitle, keyTitle, season, episode };
223
+ }
224
+ export function getAnimeKeys(stem) {
225
+ const match = stem.match(ANIME_REGEX);
226
+ if (!match)
227
+ return null;
228
+ const firstTitle = match.groups.title;
229
+ const altTitle = match.groups.altTitle;
230
+ const keyTitles = [];
231
+ const ensembleTitles = [];
232
+ for (const title of [firstTitle, altTitle]) {
233
+ if (!title)
234
+ continue;
235
+ if (isBadTitle(title))
236
+ continue;
237
+ const keyTitle = createKeyTitle(title);
238
+ if (!keyTitle)
239
+ return null;
240
+ keyTitles.push(keyTitle);
241
+ ensembleTitles.push(title);
242
+ }
243
+ if (keyTitles.length === 0)
244
+ return null;
245
+ const release = extractInt(match.groups.release);
246
+ return { ensembleTitles, keyTitles, release };
247
+ }
58
248
  //# sourceMappingURL=searchee.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"searchee.js","sourceRoot":"","sources":["../src/searchee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchee.js","sourceRoot":"","sources":["../src/searchee.ts"],"names":[],"mappings":"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"}