-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmapTags.js
More file actions
93 lines (78 loc) · 2.15 KB
/
mapTags.js
File metadata and controls
93 lines (78 loc) · 2.15 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
const genres = {
"Comedy": "Comedy",
"Games & Quizzes": "Comedy",
"Entertainment": "Comedy",
"Discussion & Talk": "Comedy",
"Drama": "Drama",
"Readings": "Drama",
"Factual": "Factual",
"Learning": "Factual",
"Music": "Music"
}
const parentSeries = [
'Book at Bedtime',
'Classic Serial',
'Book of the Week',
'Saturday Drama'
];
const programmeAndSeriesRegExp = /^(.*): Series (\d+)\w*$/;
const parentSeriesRegexp = new RegExp('^('
+ parentSeries.join('|')
+ ')(?:: (.*))?$');
const findAlbum = tags => {
const taggedAlbum = tags['album'];
return taggedAlbum;
}
const findTrack = tags => {
const taggedTrack = tags['track'];
return taggedTrack;
}
const findTitle = tags => {
const taggedTitle = tags['title'];
return taggedTitle;
}
const findGenre = tags => {
const taggedGenre = tags['genre'];
return taggedGenre;
}
const mapGenre = tags => {
const taggedGenre = findGenre(tags);
const mappedGenre = genres[taggedGenre];
if (!mappedGenre) {
throw new Error("Unfound genre: " + taggedGenre);
}
return mappedGenre;
};
const findProgrammeAndSeries = tags => {
const taggedAlbum = findAlbum(tags);
let seriesName, seriesNumber;
const seriesAndEpisodeMatch = programmeAndSeriesRegExp.exec(taggedAlbum);
if (seriesAndEpisodeMatch) {
seriesName = seriesAndEpisodeMatch[1];
seriesNumber = seriesAndEpisodeMatch[2];
} else {
seriesName = taggedAlbum;
seriesNumber = '1';
}
let parentSeries, programme, albumArtist;
const parentSeriesMatch = parentSeriesRegexp.exec(seriesName);
if (parentSeriesMatch) {
parentSeries = parentSeriesMatch[1];
programme = parentSeriesMatch[2] || findTitle(tags);
} else {
programme = seriesName;
}
return { programme, seriesNumber, parentSeries };
}
const mapArtist = genre => {
return 'BBC Radio ' + genre;
}
module.exports = {
mapGenre,
mapArtist,
findAlbum,
findGenre,
findTitle,
findTrack,
findProgrammeAndSeries
};