#include bool IsValidURI(const QString &uri) { QRegularExpression regex(R"(^\/(?!\/)([a-zA-Z0-9\-_]+\/?)*[a-zA-Z0-9\-_]$)"); QRegularExpressionMatch match = regex.match(uri); return match.hasMatch(); } QString UnixTimestampGlobalToStringLocal(qint64 timestamp) { if ( timestamp == 0 ) return ""; QDateTime epochDateTime = QDateTime::fromSecsSinceEpoch(timestamp, Qt::UTC); QDateTime localDateTime = epochDateTime.toLocalTime(); QString formattedTime = localDateTime.toString("dd/MM hh:mm:ss"); return formattedTime; } QString TextColorHtml(QString text, QString color) { if (text.isEmpty()) return ""; return R"()" + text.toHtmlEscaped() + R"()"; } QString TextUnderlineColorHtml(QString text, QString color) { if (text.isEmpty()) return ""; if (color.isEmpty()) return R"()" + text.toHtmlEscaped() + R"()"; return R"()" + text.toHtmlEscaped() + R"()"; } QString TextBoltColorHtml(QString text, QString color ) { if (text.isEmpty()) return ""; if (color.isEmpty()) return R"()" + text.toHtmlEscaped() + R"()"; return R"()" + text.toHtmlEscaped() + R"()"; } QString FormatSecToStr(int seconds) { QString result = ""; int hours = seconds / 3600; int minutes = (seconds % 3600) / 60; int secs = seconds % 60; if (hours > 0) result += QString::number(hours) + "h "; if (minutes > 0) result += QString::number(minutes) + "m "; if (secs > 0 || result.isEmpty()) result += QString::number(secs) + "s"; return result.trimmed(); } QString TrimmedEnds(QString str) { return str.remove(QRegularExpression("\\s+$")); }