Skip to content

Commit 8c97b55

Browse files
committed
Fix missing composer, add data normalize
1 parent 6869d20 commit 8c97b55

File tree

4 files changed

+79
-16
lines changed

4 files changed

+79
-16
lines changed

dist/core/metadata/thb-wiki.js

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,19 @@ class THBWiki {
6464
parseRelatedRowInfo(trackInfoRow) {
6565
const defaultInfoParser = (name) => {
6666
return (data) => {
67+
let textContent = data.textContent;
68+
/*
69+
要是这个值就是一个_, THBWiki 会转成一个警告...
70+
例如疯帽子茶会'千年战争'中出现的编曲者就有一个_
71+
https://thwiki.cc/%E5%8D%83%E5%B9%B4%E6%88%98%E4%BA%89%EF%BD%9Eiek_loin_staim_haf_il_dis_o-del_al
72+
*/
73+
const warningMatch = textContent.match(/\[\[(.+)\]\]/);
74+
if (warningMatch) {
75+
textContent = warningMatch[1];
76+
}
6777
return {
6878
name,
69-
result: data.textContent.trim().split(',')
79+
result: textContent.trim().split(',')
7080
};
7181
};
7282
};
@@ -114,6 +124,19 @@ class THBWiki {
114124
}
115125
return action(data);
116126
}
127+
rowDataNormalize(rowData) {
128+
const normalizeAction = (str) => {
129+
return str.replace('(人物)', '');
130+
};
131+
for (const [key, value] of Object.entries(rowData)) {
132+
if (typeof value === 'string') {
133+
rowData[key] = normalizeAction(value);
134+
}
135+
if (Array.isArray(value)) {
136+
rowData[key] = value.map(v => normalizeAction(v));
137+
}
138+
}
139+
}
117140
parseRow(trackNumberElement) {
118141
const trackNumber = parseInt(trackNumberElement.textContent, 10).toString();
119142
const trackNumberRow = trackNumberElement.parentElement;
@@ -126,25 +149,33 @@ class THBWiki {
126149
const [comments] = infos
127150
.filter(it => it.name === 'comments')
128151
.map(it => it.result);
129-
const artists = ['vocals', 'coverVocals', 'harmonyVocals', 'accompanyVocals', 'chorusVocals', 'instruments', 'remix', 'arrangers']
152+
const arrangers = ['remix', 'arrangers']
130153
.flatMap(name => infos
131154
.filter(it => it.name === name)
132155
.map(it => it.result)
133156
.flat());
157+
const performers = ['vocals', 'coverVocals', 'harmonyVocals', 'accompanyVocals', 'chorusVocals', 'instruments']
158+
.flatMap(name => infos
159+
.filter(it => it.name === name)
160+
.map(it => it.result)
161+
.flat());
162+
const artists = performers.concat(arrangers);
134163
const [composers] = infos
135164
.filter(it => it.name === 'composers')
136165
.map(it => it.result);
137-
if (artists.length === 0) {
166+
if (arrangers.length === 0) {
138167
artists.push(...composers);
139168
}
140-
return {
169+
const rowData = {
141170
title,
142-
artists: [...new Set(artists)].map(it => it.replace('(人物)', '')),
171+
artists: [...new Set(artists)],
143172
trackNumber,
144173
comments,
145-
lyricists: lyricists ? lyricists.map(it => it.replace('(人物)', '')) : lyricists,
146-
composers: composers ? composers.map(it => it.replace('(人物)', '')) : composers,
174+
lyricists,
175+
composers,
147176
};
177+
this.rowDataNormalize(rowData);
178+
return rowData;
148179
}
149180
async getMetadata(albumName) {
150181
const url = `https://thwiki.cc/index.php?search=${encodeURIComponent(albumName)}`;

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "touhou-tagger",
3-
"version": "1.0.4",
3+
"version": "1.0.5",
44
"description": "从 THBWiki 自动填写东方Project CD曲目信息.",
55
"main": "dist/core/index.js",
66
"bin": {

src/core/metadata/thb-wiki.ts

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,19 @@ export class THBWiki implements MetadataSource {
6767
private parseRelatedRowInfo(trackInfoRow: Element): TrackParseInfo {
6868
const defaultInfoParser = (name: string): (data: Element) => TrackParseInfo => {
6969
return (data: Element) => {
70+
let textContent = data.textContent!
71+
/*
72+
要是这个值就是一个_, THBWiki 会转成一个警告...
73+
例如疯帽子茶会'千年战争'中出现的编曲者就有一个_
74+
https://thwiki.cc/%E5%8D%83%E5%B9%B4%E6%88%98%E4%BA%89%EF%BD%9Eiek_loin_staim_haf_il_dis_o-del_al
75+
*/
76+
const warningMatch = textContent.match(/\[\[(.+)\]\]/)
77+
if (warningMatch) {
78+
textContent = warningMatch[1]
79+
}
7080
return {
7181
name,
72-
result: data.textContent!.trim().split(',')
82+
result: textContent.trim().split(',')
7383
}
7484
}
7585
}
@@ -116,6 +126,19 @@ export class THBWiki implements MetadataSource {
116126
}
117127
return action(data)
118128
}
129+
private rowDataNormalize(rowData: any) {
130+
const normalizeAction = (str: string) => {
131+
return str.replace('(人物)', '')
132+
}
133+
for (const [key, value] of Object.entries(rowData)) {
134+
if (typeof value === 'string') {
135+
rowData[key] = normalizeAction(value)
136+
}
137+
if (Array.isArray(value)) {
138+
rowData[key] = value.map(v => normalizeAction(v))
139+
}
140+
}
141+
}
119142
private parseRow(trackNumberElement: Element) {
120143
const trackNumber = parseInt(trackNumberElement.textContent!, 10).toString()
121144
const trackNumberRow = trackNumberElement.parentElement as HTMLTableRowElement
@@ -128,26 +151,35 @@ export class THBWiki implements MetadataSource {
128151
const [comments] = infos
129152
.filter(it => it.name === 'comments')
130153
.map(it => it.result as string)
131-
const artists = ['vocals', 'coverVocals', 'harmonyVocals', 'accompanyVocals', 'chorusVocals', 'instruments', 'remix', 'arrangers']
154+
const arrangers = ['remix', 'arrangers']
132155
.flatMap(name => infos
133156
.filter(it => it.name === name)
134157
.map(it => it.result as string[])
135158
.flat()
136159
)
160+
const performers = ['vocals', 'coverVocals', 'harmonyVocals', 'accompanyVocals', 'chorusVocals', 'instruments']
161+
.flatMap(name => infos
162+
.filter(it => it.name === name)
163+
.map(it => it.result as string[])
164+
.flat()
165+
)
166+
const artists = performers.concat(arrangers)
137167
const [composers] = infos
138168
.filter(it => it.name === 'composers')
139169
.map(it => it.result as string[])
140-
if (artists.length === 0) {
170+
if (arrangers.length === 0) {
141171
artists.push(...composers)
142172
}
143-
return {
173+
const rowData = {
144174
title,
145-
artists: [...new Set(artists)].map(it => it.replace('(人物)', '')),
175+
artists: [...new Set(artists)],
146176
trackNumber,
147177
comments,
148-
lyricists: lyricists ? lyricists.map(it => it.replace('(人物)', '')) : lyricists,
149-
composers: composers ? composers.map(it => it.replace('(人物)', '')) : composers,
178+
lyricists,
179+
composers,
150180
}
181+
this.rowDataNormalize(rowData)
182+
return rowData
151183
}
152184
async getMetadata(albumName: string) {
153185
const url = `https://thwiki.cc/index.php?search=${encodeURIComponent(albumName)}`

0 commit comments

Comments
 (0)