pineapple-music/lyricsmanager.h
Gary Wang b2eb29ab5d
lyricsmanager: parse time string by ourselves
QTime::fromString() can lead a crash when build with icu-enabled
Qt 6.8.0, see QTBUG-130597. Anyway let's workaround this issue
by simply implement it by ourselves.
2024-10-26 19:38:04 +08:00

44 lines
995 B
C++

// SPDX-FileCopyrightText: 2024 Gary Wang <git@blumia.net>
//
// SPDX-License-Identifier: MIT
#pragma once
#include <QHash>
#include <QList>
#include <QLoggingCategory>
#include <QObject>
Q_DECLARE_LOGGING_CATEGORY(lcLyrics)
Q_DECLARE_LOGGING_CATEGORY(lcLyricsParser)
class LyricsManager : public QObject
{
Q_OBJECT
public:
explicit LyricsManager(QObject *parent);
~LyricsManager();
bool loadLyrics(QString filepath);
bool hasLyrics() const;
void updateCurrentTimeMs(int curTimeMs, int totalTimeMs);
QString lyrics(int lineOffset = 0) const;
double maskPercent(int curTimeMs);
static int parseTimeToMilliseconds(const QString& timeString);
protected:
private:
void reset();
int currentLyricsTime() const;
int nextLyricsTime() const;
QHash<int, QString> m_lyricsMap;
QList<int> m_timestampList;
int m_currentLyricsTime = 0;
int m_nextLyricsTime = 0;
int m_timeOffset = 0;
};