Frontend and backend work together fine, complete workflow is implemented
This commit is contained in:
@@ -1,32 +1,7 @@
|
||||
import { TracklistEntry } from '../types'
|
||||
// web/frontend/src/utils/validators.ts
|
||||
|
||||
export const parseTracklist = (lines: string[]): TracklistEntry[] => {
|
||||
return lines.map((line) => {
|
||||
const trimmed = line.trim()
|
||||
// Try to parse as "%ts %tn - %an"
|
||||
const match = trimmed.match(/^(\d{1,2}:\d{2}(:\d{2})?)\s+(.+?)\s*-\s*(.+)$/)
|
||||
if (match) {
|
||||
return {
|
||||
ts: match[1],
|
||||
tn: match[3].trim(),
|
||||
an: match[4].trim(),
|
||||
}
|
||||
}
|
||||
// Try to parse as "%ts %tn"
|
||||
const simpleMatch = trimmed.match(/^(\d{1,2}:\d{2}(:\d{2})?)\s+(.+)$/)
|
||||
if (simpleMatch) {
|
||||
return {
|
||||
ts: simpleMatch[1],
|
||||
tn: simpleMatch[3].trim(),
|
||||
}
|
||||
}
|
||||
// Fallback: just use the line as is (will be flagged as error)
|
||||
return {
|
||||
ts: '',
|
||||
tn: trimmed,
|
||||
}
|
||||
})
|
||||
}
|
||||
import { TracklistEntry } from '../types'
|
||||
import { parseTracklistWithFormat } from './parser'
|
||||
|
||||
export const validateTracklist = (
|
||||
entries: TracklistEntry[]
|
||||
@@ -53,4 +28,35 @@ export const validateTracklist = (
|
||||
isValid: errors.length === 0,
|
||||
errors,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// New function that parses and validates using the format
|
||||
export function parseAndValidateTracklist(text: string, format: string): {
|
||||
entries: TracklistEntry[]
|
||||
errors: { line: number; message: string }[]
|
||||
isValid: boolean
|
||||
} {
|
||||
// We need to handle parsing errors gracefully.
|
||||
// parseTracklistWithFormat will throw on some errors, but we can catch and mark as invalid.
|
||||
try {
|
||||
const entries = parseTracklistWithFormat(text, format)
|
||||
const validation = validateTracklist(entries)
|
||||
return {
|
||||
entries,
|
||||
errors: validation.errors,
|
||||
isValid: validation.isValid,
|
||||
}
|
||||
} catch (error) {
|
||||
// If parsing fails (e.g., invalid format), treat all lines as errors
|
||||
const lines = text.split('\n').filter(line => line.trim() !== '')
|
||||
const errors = lines.map((_, index) => ({
|
||||
line: index + 1,
|
||||
message: error instanceof Error ? error.message : 'Parse error',
|
||||
}))
|
||||
return {
|
||||
entries: [],
|
||||
errors,
|
||||
isValid: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user