QStringList StorageGroup::getRecordingsGroups(void) { QStringList groups; MSqlQuery query(MSqlQuery::InitCon()); QString sql = "SELECT DISTINCT groupname " "FROM storagegroup " "WHERE groupname NOT IN ("; for (QStringList::const_iterator it = StorageGroup::kSpecialGroups.begin(); it != StorageGroup::kSpecialGroups.end(); ++it) sql.append(QString(" '%1',").arg(*it)); sql = sql.left(sql.length() - 1); sql.append(" );"); query.prepare(sql); if (query.exec() && query.isActive() && query.size() > 0) while (query.next()) groups += query.value(0).toString(); groups.sort(); groups.detach(); return groups; }
QStringList SubtitleReader::GetRawTextSubtitles(uint64_t &duration) { QMutexLocker lock(&m_RawTextSubtitles.lock); if (m_RawTextSubtitles.buffers.empty()) return QStringList(); duration = m_RawTextSubtitles.duration; QStringList result = m_RawTextSubtitles.buffers; result.detach(); m_RawTextSubtitles.buffers.clear(); return result; }
QStringList ActionSet::GetContextKeys(const QString &context_name) const { QStringList keys; ContextMap::const_iterator cit = m_contexts.find(context_name); if (cit == m_contexts.end()) return keys; Context::const_iterator it = (*cit).begin(); for (; it != (*cit).end(); ++it) keys += (*it)->GetKeys(); keys.sort(); keys.detach(); return keys; }
/** \fn ActionSet::GetKeys(const ActionID&) const * \brief Get the keys bound to an action by its identifier. */ QStringList ActionSet::GetKeys(const ActionID &id) const { QStringList keys; ContextMap::const_iterator cit = m_contexts.find(id.GetContext()); if (cit == m_contexts.end()) return keys; Context::const_iterator it = (*cit).find(id.GetAction()); if (it != (*cit).end()) keys = (*it)->GetKeys(); keys.detach(); return keys; }
QStringList StorageGroup::getGroupDirs(QString groupname, QString host) { QStringList groups; QString addHost; MSqlQuery query(MSqlQuery::InitCon()); if (!host.isEmpty()) addHost = " AND hostname = :HOSTNAME"; else addHost = ""; QString sql = QString("SELECT dirname,hostname " "FROM storagegroup " "WHERE groupname = :GROUPNAME %1").arg(addHost); query.prepare(sql); query.bindValue(":GROUPNAME", groupname); if (!host.isEmpty()) query.bindValue(":HOSTNAME", host); if (query.exec() && query.isActive() && query.size() > 0) { QString dirname; while (query.next()) { /* The storagegroup.dirname column uses utf8_bin collation, so Qt * uses QString::fromAscii() for toString(). Explicitly convert the * value using QString::fromUtf8() to prevent corruption. */ dirname = QString::fromUtf8(query.value(0) .toByteArray().constData()); groups += gCoreContext->GenMythURL(query.value(1).toString(), 0, dirname, groupname); } } groups.sort(); groups.detach(); return groups; }
/** \fn TextSubtitles::GetSubtitles(uint64_t timecode) const * \brief Returns the subtitles to display at the given timecode. * * \param timecode The timecode (frame number or time stamp) of the * current video position. * \return The subtitles as a list of strings. */ QStringList TextSubtitles::GetSubtitles(uint64_t timecode) { QStringList list; if (!m_isInProgress && m_subtitles.empty()) return list; text_subtitle_t searchTarget(timecode, timecode); TextSubtitleList::const_iterator nextSubPos = lower_bound(m_subtitles.begin(), m_subtitles.end(), searchTarget); uint64_t startCode = 0, endCode = 0; if (nextSubPos != m_subtitles.begin()) { TextSubtitleList::const_iterator currentSubPos = nextSubPos; --currentSubPos; const text_subtitle_t &sub = *currentSubPos; if (sub.start <= timecode && sub.end >= timecode) { // found a sub to display m_lastReturnedSubtitle = sub; QStringList tmp = m_lastReturnedSubtitle.textLines; tmp.detach(); return tmp; } // the subtitle time span has ended, let's display a blank sub startCode = sub.end + 1; } if (nextSubPos == m_subtitles.end()) { if (m_isInProgress) { const int maxReloadInterval = 1000; // ms if (IsFrameBasedTiming()) // Assume conservative 24fps endCode = startCode + maxReloadInterval / 24; else endCode = startCode + maxReloadInterval; QDateTime now = QDateTime::currentDateTimeUtc(); if (!m_fileName.isEmpty() && m_lastLoaded.msecsTo(now) >= maxReloadInterval) { TextSubtitleParser::LoadSubtitles(m_fileName, *this, true); } } else { // at the end of video, the blank subtitle should last // until forever endCode = startCode + INT_MAX; } } else { endCode = (*nextSubPos).start - 1; } // we are in a position in which there are no subtitles to display, // return an empty subtitle and create a dummy empty subtitle for this // time span so SubtitleChanged() functions also in this case text_subtitle_t blankSub(startCode, endCode); m_lastReturnedSubtitle = blankSub; return list; }