File indexing completed on 2024-05-12 05:09:23
0001 /*************************************************************************** 0002 Copyright (C) 2003-2009 Robby Stephenson <robby@periapsis.org> 0003 ***************************************************************************/ 0004 0005 /*************************************************************************** 0006 * * 0007 * This program is free software; you can redistribute it and/or * 0008 * modify it under the terms of the GNU General Public License as * 0009 * published by the Free Software Foundation; either version 2 of * 0010 * the License or (at your option) version 3 or any later version * 0011 * accepted by the membership of KDE e.V. (or its successor approved * 0012 * by the membership of KDE e.V.), which shall act as a proxy * 0013 * defined in Section 14 of version 3 of the license. * 0014 * * 0015 * This program is distributed in the hope that it will be useful, * 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0018 * GNU General Public License for more details. * 0019 * * 0020 * You should have received a copy of the GNU General Public License * 0021 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 0022 * * 0023 ***************************************************************************/ 0024 0025 #include "videocollection.h" 0026 #include "../entrycomparison.h" 0027 0028 #include <KLocalizedString> 0029 0030 namespace { 0031 static const char* video_general = I18N_NOOP("General"); 0032 static const char* video_people = I18N_NOOP("Other People"); 0033 static const char* video_features = I18N_NOOP("Features"); 0034 static const char* video_personal = I18N_NOOP("Personal"); 0035 } 0036 0037 using Tellico::Data::VideoCollection; 0038 0039 VideoCollection::VideoCollection(bool addDefaultFields_, const QString& title_) 0040 : Collection(title_.isEmpty() ? i18n("My Videos") : title_) { 0041 setDefaultGroupField(QStringLiteral("genre")); 0042 if(addDefaultFields_) { 0043 addFields(defaultFields()); 0044 } 0045 } 0046 0047 Tellico::Data::FieldList VideoCollection::defaultFields() { 0048 FieldList list; 0049 FieldPtr field; 0050 0051 list.append(Field::createDefaultField(Field::TitleField)); 0052 0053 QStringList media; 0054 media << i18n("DVD") << i18n("VHS") << i18n("VCD") << i18n("DivX") << i18n("Blu-ray") << i18n("HD DVD"); 0055 field = new Field(QStringLiteral("medium"), i18n("Medium"), media); 0056 field->setCategory(i18n(video_general)); 0057 field->setFlags(Field::AllowGrouped); 0058 list.append(field); 0059 0060 field = new Field(QStringLiteral("year"), i18n("Production Year"), Field::Number); 0061 field->setCategory(i18n(video_general)); 0062 field->setFlags(Field::AllowGrouped); 0063 list.append(field); 0064 0065 auto cert = FieldFormat::splitValue(i18nc("Movie ratings - " 0066 "G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)", 0067 "G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)"), 0068 FieldFormat::CommaRegExpSplit); 0069 field = new Field(QStringLiteral("certification"), i18n("Certification"), cert); 0070 field->setCategory(i18n(video_general)); 0071 field->setFlags(Field::AllowGrouped); 0072 list.append(field); 0073 0074 field = new Field(QStringLiteral("genre"), i18n("Genre")); 0075 field->setCategory(i18n(video_general)); 0076 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0077 field->setFormatType(FieldFormat::FormatPlain); 0078 list.append(field); 0079 0080 QStringList region; 0081 region << i18n("Region 0") 0082 << i18n("Region 1") 0083 << i18n("Region 2") 0084 << i18n("Region 3") 0085 << i18n("Region 4") 0086 << i18n("Region 5") 0087 << i18n("Region 6") 0088 << i18n("Region 7") 0089 << i18n("Region 8"); 0090 field = new Field(QStringLiteral("region"), i18n("Region"), region); 0091 field->setCategory(i18n(video_general)); 0092 field->setFlags(Field::AllowGrouped); 0093 list.append(field); 0094 0095 field = new Field(QStringLiteral("nationality"), i18n("Nationality")); 0096 field->setCategory(i18n(video_general)); 0097 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0098 field->setFormatType(FieldFormat::FormatPlain); 0099 list.append(field); 0100 0101 QStringList format; 0102 format << i18n("NTSC") << i18n("PAL") << i18n("SECAM"); 0103 field = new Field(QStringLiteral("format"), i18n("Format"), format); 0104 field->setCategory(i18n(video_general)); 0105 field->setFlags(Field::AllowGrouped); 0106 list.append(field); 0107 0108 field = new Field(QStringLiteral("cast"), i18n("Cast"), Field::Table); 0109 field->setProperty(QStringLiteral("columns"), QStringLiteral("2")); 0110 field->setProperty(QStringLiteral("column1"), i18n("Actor/Actress")); 0111 field->setProperty(QStringLiteral("column2"), i18n("Role")); 0112 field->setFormatType(FieldFormat::FormatName); 0113 field->setFlags(Field::AllowGrouped); 0114 field->setDescription(i18n("A table for the cast members, along with the roles they play")); 0115 list.append(field); 0116 0117 field = new Field(QStringLiteral("director"), i18n("Director")); 0118 field->setCategory(i18n(video_people)); 0119 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0120 field->setFormatType(FieldFormat::FormatName); 0121 list.append(field); 0122 0123 field = new Field(QStringLiteral("producer"), i18n("Producer")); 0124 field->setCategory(i18n(video_people)); 0125 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0126 field->setFormatType(FieldFormat::FormatName); 0127 list.append(field); 0128 0129 field = new Field(QStringLiteral("writer"), i18n("Writer")); 0130 field->setCategory(i18n(video_people)); 0131 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0132 field->setFormatType(FieldFormat::FormatName); 0133 list.append(field); 0134 0135 field = new Field(QStringLiteral("composer"), i18n("Composer")); 0136 field->setCategory(i18n(video_people)); 0137 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0138 field->setFormatType(FieldFormat::FormatName); 0139 list.append(field); 0140 0141 field = new Field(QStringLiteral("studio"), i18n("Studio")); 0142 field->setCategory(i18n(video_people)); 0143 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0144 field->setFormatType(FieldFormat::FormatPlain); 0145 list.append(field); 0146 0147 field = new Field(QStringLiteral("language"), i18n("Language Tracks")); 0148 field->setCategory(i18n(video_features)); 0149 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0150 field->setFormatType(FieldFormat::FormatPlain); 0151 list.append(field); 0152 0153 field = new Field(QStringLiteral("subtitle"), i18n("Subtitle Languages")); 0154 field->setCategory(i18n(video_features)); 0155 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0156 field->setFormatType(FieldFormat::FormatPlain); 0157 list.append(field); 0158 0159 field = new Field(QStringLiteral("audio-track"), i18n("Audio Tracks")); 0160 field->setCategory(i18n(video_features)); 0161 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0162 field->setFormatType(FieldFormat::FormatPlain); 0163 list.append(field); 0164 0165 field = new Field(QStringLiteral("running-time"), i18n("Running Time"), Field::Number); 0166 field->setCategory(i18n(video_features)); 0167 field->setDescription(i18n("The running time of the video (in minutes)")); 0168 list.append(field); 0169 0170 field = new Field(QStringLiteral("aspect-ratio"), i18n("Aspect Ratio")); 0171 field->setCategory(i18n(video_features)); 0172 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0173 list.append(field); 0174 0175 field = new Field(QStringLiteral("widescreen"), i18n("Widescreen"), Field::Bool); 0176 field->setCategory(i18n(video_features)); 0177 list.append(field); 0178 0179 QStringList color; 0180 color << i18n("Color") << i18n("Black & White"); 0181 field = new Field(QStringLiteral("color"), i18n("Color Mode"), color); 0182 field->setCategory(i18n(video_features)); 0183 field->setFlags(Field::AllowGrouped); 0184 list.append(field); 0185 0186 field = new Field(QStringLiteral("directors-cut"), i18n("Director's Cut"), Field::Bool); 0187 field->setCategory(i18n(video_features)); 0188 list.append(field); 0189 0190 field = new Field(QStringLiteral("plot"), i18n("Plot Summary"), Field::Para); 0191 list.append(field); 0192 0193 field = new Field(QStringLiteral("rating"), i18n("Personal Rating"), Field::Rating); 0194 field->setCategory(i18n(video_personal)); 0195 field->setFlags(Field::AllowGrouped); 0196 list.append(field); 0197 0198 field = new Field(QStringLiteral("pur_date"), i18n("Purchase Date")); 0199 field->setCategory(i18n(video_personal)); 0200 field->setFormatType(FieldFormat::FormatDate); 0201 list.append(field); 0202 0203 field = new Field(QStringLiteral("gift"), i18n("Gift"), Field::Bool); 0204 field->setCategory(i18n(video_personal)); 0205 list.append(field); 0206 0207 field = new Field(QStringLiteral("pur_price"), i18n("Purchase Price")); 0208 field->setCategory(i18n(video_personal)); 0209 list.append(field); 0210 0211 field = new Field(QStringLiteral("loaned"), i18n("Loaned"), Field::Bool); 0212 field->setCategory(i18n(video_personal)); 0213 list.append(field); 0214 0215 field = new Field(QStringLiteral("keyword"), i18n("Keywords")); 0216 field->setCategory(i18n(video_personal)); 0217 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped); 0218 list.append(field); 0219 0220 field = new Field(QStringLiteral("cover"), i18n("Cover"), Field::Image); 0221 list.append(field); 0222 0223 field = new Field(QStringLiteral("comments"), i18n("Comments"), Field::Para); 0224 list.append(field); 0225 0226 list.append(Field::createDefaultField(Field::IDField)); 0227 list.append(Field::createDefaultField(Field::CreatedDateField)); 0228 list.append(Field::createDefaultField(Field::ModifiedDateField)); 0229 0230 return list; 0231 } 0232 0233 int VideoCollection::sameEntry(Tellico::Data::EntryPtr entry1_, Tellico::Data::EntryPtr entry2_) const { 0234 // when imdb field is equal it is the same 0235 if(EntryComparison::score(entry1_, entry2_, QStringLiteral("imdb"), this) > 0) { 0236 return EntryComparison::ENTRY_PERFECT_MATCH; 0237 } 0238 // not enough for title to be equal, must also have another field 0239 // ever possible for a studio to do two movies with identical titles? 0240 int res = 0; 0241 res += EntryComparison::MATCH_WEIGHT_HIGH*EntryComparison::score(entry1_, entry2_, QStringLiteral("title"), this); 0242 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res; 0243 0244 res += EntryComparison::MATCH_WEIGHT_LOW *EntryComparison::score(entry1_, entry2_, QStringLiteral("year"), this); 0245 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res; 0246 0247 res += EntryComparison::MATCH_WEIGHT_LOW *EntryComparison::score(entry1_, entry2_, QStringLiteral("director"), this); 0248 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res; 0249 0250 res += EntryComparison::MATCH_WEIGHT_LOW *EntryComparison::score(entry1_, entry2_, QStringLiteral("studio"), this); 0251 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res; 0252 0253 res += EntryComparison::MATCH_WEIGHT_LOW *EntryComparison::score(entry1_, entry2_, QStringLiteral("medium"), this); 0254 return res; 0255 }