File size: 1,123 Bytes
4345f70
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { ParsedNameData } from '@aiostreams/types';
import { PARSE_REGEX } from './regex';

function matchPattern(
  filename: string,
  patterns: Record<string, RegExp>
): string {
  return (
    Object.entries(patterns).find(([_, pattern]) =>
      pattern.test(filename)
    )?.[0] ?? 'Unknown'
  );
}

function matchMultiplePatterns(
  filename: string,
  patterns: Record<string, RegExp>
): string[] {
  return Object.entries(patterns)
    .filter(([_, pattern]) => pattern.test(filename))
    .map(([tag]) => tag);
}

export function parseFilename(filename: string): ParsedNameData {
  const resolution = matchPattern(filename, PARSE_REGEX.resolutions);
  const quality = matchPattern(filename, PARSE_REGEX.qualities);
  const encode = matchPattern(filename, PARSE_REGEX.encodes);
  const visualTags = matchMultiplePatterns(filename, PARSE_REGEX.visualTags);
  const audioTags = matchMultiplePatterns(filename, PARSE_REGEX.audioTags);
  const languages = matchMultiplePatterns(filename, PARSE_REGEX.languages);

  return {
    resolution,
    quality,
    languages,
    encode,
    audioTags,
    visualTags,
  };
}