diff --git a/README.md b/README.md index 6661292..00f775d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # lrc-cli -A CLI tool for LRC. +[WIP] A CLI tool for LRC. See [releases](https://git.owu.one/starset-mirror/lrc-cli/releases) for binaries. ## Usage diff --git a/convert.go b/convert.go index 510eace..d03527d 100644 --- a/convert.go +++ b/convert.go @@ -90,12 +90,6 @@ func srtToLrc(sourceFile, targetFile string) { Content: make([]string, len(srtEntries)), } - // Add default metadata - title := strings.TrimSuffix(filepath.Base(targetFile), filepath.Ext(targetFile)) - lyrics.Metadata["ti"] = title - lyrics.Metadata["ar"] = "" - lyrics.Metadata["al"] = "" - for i, entry := range srtEntries { lyrics.Timeline[i] = entry.StartTime lyrics.Content[i] = entry.Content diff --git a/srt.go b/srt.go index 58cd75f..6700b44 100644 --- a/srt.go +++ b/srt.go @@ -19,55 +19,35 @@ func parseSRT(filePath string) ([]SRTEntry, error) { scanner := bufio.NewScanner(file) var entries []SRTEntry var currentEntry SRTEntry - var isContent bool - var contentBuffer strings.Builder for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) - if line == "" { if currentEntry.Number != 0 { - currentEntry.Content = contentBuffer.String() entries = append(entries, currentEntry) currentEntry = SRTEntry{} - isContent = false - contentBuffer.Reset() } continue } if currentEntry.Number == 0 { currentEntry.Number, _ = strconv.Atoi(line) - } else if isEntryTimeStampUnset(currentEntry) { + } else if currentEntry.StartTime.Hours == 0 { times := strings.Split(line, " --> ") - if len(times) == 2 { - currentEntry.StartTime = parseSRTTimestamp(times[0]) - currentEntry.EndTime = parseSRTTimestamp(times[1]) - isContent = true - } - } else if isContent { - if contentBuffer.Len() > 0 { - contentBuffer.WriteString("\n") - } - contentBuffer.WriteString(line) + currentEntry.StartTime = parseSRTTimestamp(times[0]) + currentEntry.EndTime = parseSRTTimestamp(times[1]) + } else { + currentEntry.Content += line + "\n" } } if currentEntry.Number != 0 { - currentEntry.Content = contentBuffer.String() entries = append(entries, currentEntry) } return entries, scanner.Err() } -func isEntryTimeStampUnset(currentEntry SRTEntry) bool { - return currentEntry.StartTime.Hours == 0 && currentEntry.StartTime.Minutes == 0 && - currentEntry.StartTime.Seconds == 0 && currentEntry.StartTime.Milliseconds == 0 && - currentEntry.EndTime.Hours == 0 && currentEntry.EndTime.Minutes == 0 && - currentEntry.EndTime.Seconds == 0 && currentEntry.EndTime.Milliseconds == 0 -} - func convertSRT(sourceFile, targetFile, targetFmt string) { switch targetFmt { case "txt": @@ -84,26 +64,12 @@ func formatSRTTimestamp(ts Timestamp) string { } func parseSRTTimestamp(timeStr string) Timestamp { - parts := strings.Split(timeStr, ",") - if len(parts) != 2 { - return Timestamp{} - } - - timeParts := strings.Split(parts[0], ":") - if len(timeParts) != 3 { - return Timestamp{} - } - - hours, _ := strconv.Atoi(timeParts[0]) - minutes, _ := strconv.Atoi(timeParts[1]) - seconds, _ := strconv.Atoi(timeParts[2]) - milliseconds, _ := strconv.Atoi(parts[1]) - + t, _ := time.Parse("15:04:05,000", timeStr) return Timestamp{ - Hours: hours, - Minutes: minutes, - Seconds: seconds, - Milliseconds: milliseconds, + Hours: t.Hour(), + Minutes: t.Minute(), + Seconds: t.Second(), + Milliseconds: t.Nanosecond() / 1e6, } }