Пример #1
0
RecordingQuality::RecordingQuality(
    const RecordingInfo *ri, const RecordingGaps &rg,
    const QDateTime &first, const QDateTime &latest) :
    m_continuity_error_count(0), m_packet_count(0),
    m_overall_score(1.0), m_recording_gaps(rg)
{
    if (!ri)
        return;

    m_program_key = ri->MakeUniqueKey();

    // trim start
    QDateTime start = get_start(*ri);
    while (!m_recording_gaps.empty() &&
           m_recording_gaps.first().GetStart() < start)
    {
        RecordingGap &first = m_recording_gaps.first();
        if (start < first.GetEnd())
            first = RecordingGap(start, first.GetEnd());
        else
            m_recording_gaps.pop_front();
    }

    // trim end
    QDateTime end = get_end(*ri);
    while (!m_recording_gaps.empty() &&
           m_recording_gaps.back().GetEnd() > end)
    {
        RecordingGap &back = m_recording_gaps.back();
        if (back.GetStart() < end)
            back = RecordingGap(back.GetStart(), end);
        else
            m_recording_gaps.pop_back();
    }

    // account for late start
    int start_gap = (first.isValid()) ? start.secsTo(first) : 0;
    if (start_gap > 15)
        m_recording_gaps.push_front(RecordingGap(start, first));

    // account for missing end
    int end_gap = (latest.isValid()) ? latest.secsTo(end) : 0;
    if (end_gap > 15)
        m_recording_gaps.push_back(RecordingGap(latest, end));

    stable_sort(m_recording_gaps.begin(), m_recording_gaps.end());
    merge_overlapping(m_recording_gaps);

    m_overall_score = score_gaps(*ri, m_recording_gaps);

    LOG(VB_RECORD, LOG_INFO,
        QString("RecordingQuality() start(%1) end(%2) score(%3)")
        .arg(MythDate::toString(start, MythDate::ISODate))
        .arg(MythDate::toString(end, MythDate::ISODate))
        .arg(m_overall_score));
}