コード例 #1
0
bool VideoFilterSettings::matches_filter(const VideoMetadata &mdata) const
{
    bool matches = true;

    //textfilter
    if (!textfilter.isEmpty())
    {
        matches = false;
        matches = matches || mdata.GetTitle().contains(textfilter, Qt::CaseInsensitive);
        matches = matches || mdata.GetSubtitle().contains(textfilter, Qt::CaseInsensitive);
        matches = matches || mdata.GetPlot().contains(textfilter, Qt::CaseInsensitive);
    }
    //search for season with optionally episode nr.
    if (matches && season != -1) {
        matches = season == mdata.GetSeason();
        matches = matches && (episode == -1 || episode == mdata.GetEpisode());
    }
    if (matches && insertdate.isValid()) {
        matches = mdata.GetInsertdate().isValid() && mdata.GetInsertdate() >= insertdate;
    }
    if (matches && genre != kGenreFilterAll)
    {
        matches = false;

        const VideoMetadata::genre_list &gl = mdata.GetGenres();
        for (VideoMetadata::genre_list::const_iterator p = gl.begin();
             p != gl.end(); ++p)
        {
            if ((matches = p->first == genre))
            {
                break;
            }
        }
    }

    if (matches && country != kCountryFilterAll)
    {
        matches = false;

        const VideoMetadata::country_list &cl = mdata.GetCountries();
        for (VideoMetadata::country_list::const_iterator p = cl.begin();
             p != cl.end(); ++p)
        {
            if ((matches = p->first == country))
            {
                break;
            }
        }
    }

    if (matches && cast != kCastFilterAll)
    {
        const VideoMetadata::cast_list &cl = mdata.GetCast();

        if (cast == kCastFilterUnknown && cl.size() == 0)
        {
            matches = true;
        }
        else
        {
            matches = false;

            for (VideoMetadata::cast_list::const_iterator p = cl.begin();
                 p != cl.end(); ++p)
            {
                if ((matches = p->first == cast))
                {
                    break;
                }
            }
        }
    }

    if (matches && category != kCategoryFilterAll)
    {
        matches = category == mdata.GetCategoryID();
    }

    if (matches && year != kYearFilterAll)
    {
        if (year == kYearFilterUnknown)
        {
            matches = (mdata.GetYear() == 0) ||
                    (mdata.GetYear() == VIDEO_YEAR_DEFAULT);
        }
        else
        {
            matches = year == mdata.GetYear();
        }
    }

    if (matches && runtime != kRuntimeFilterAll)
    {
        if (runtime == kRuntimeFilterUnknown)
        {
            matches = mdata.GetLength() == 0;
        }
        else
        {
            matches = runtime == (mdata.GetLength() / 30);
        }
    }

    if (matches && userrating != kUserRatingFilterAll)
    {
        matches = mdata.GetUserRating() >= userrating;
    }

    if (matches && browse != kBrowseFilterAll)
    {
        matches = mdata.GetBrowse() == browse;
    }

    if (matches && watched != kWatchedFilterAll)
    {
        matches = mdata.GetWatched() == watched;
    }

    if (matches && m_inetref != kInetRefFilterAll)
    {
        matches = mdata.GetInetRef() == VIDEO_INETREF_DEFAULT;
    }

    if (matches && m_coverfile != kCoverFileFilterAll)
    {
        matches = IsDefaultCoverFile(mdata.GetCoverFile());
    }

    if (matches && m_parental_level)
    {
        matches = (mdata.GetShowLevel() != ParentalLevel::plNone) &&
                (mdata.GetShowLevel() <= m_parental_level);
    }

    return matches;
}
コード例 #2
0
QString GetDisplayCountries(const VideoMetadata &item)
{
    QStringList ret;
    CopySecond(item.GetCountries(), ret);
    return ret.join(", ");
}