1 /***************************************************************************
2 Copyright (C) 2003-2009 Robby Stephenson <robby@periapsis.org>
3 ***************************************************************************/
4
5 /***************************************************************************
6 * *
7 * This program is free software; you can redistribute it and/or *
8 * modify it under the terms of the GNU General Public License as *
9 * published by the Free Software Foundation; either version 2 of *
10 * the License or (at your option) version 3 or any later version *
11 * accepted by the membership of KDE e.V. (or its successor approved *
12 * by the membership of KDE e.V.), which shall act as a proxy *
13 * defined in Section 14 of version 3 of the license. *
14 * *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
19 * *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
22 * *
23 ***************************************************************************/
24
25 #include "musiccollection.h"
26 #include "../entrycomparison.h"
27
28 #include <KLocalizedString>
29
30 namespace {
31 static const char* music_general = I18N_NOOP("General");
32 static const char* music_personal = I18N_NOOP("Personal");
33 }
34
35 using Tellico::Data::MusicCollection;
36
MusicCollection(bool addDefaultFields_,const QString & title_)37 MusicCollection::MusicCollection(bool addDefaultFields_, const QString& title_)
38 : Collection(title_.isEmpty() ? i18n("My Music") : title_) {
39 setDefaultGroupField(QStringLiteral("artist"));
40 if(addDefaultFields_) {
41 addFields(defaultFields());
42 }
43 }
44
defaultFields()45 Tellico::Data::FieldList MusicCollection::defaultFields() {
46 FieldList list;
47 FieldPtr field;
48
49 field = Field::createDefaultField(Field::TitleField);
50 field->setTitle(i18n("Album"));
51 list.append(field);
52
53 QStringList media;
54 media << i18n("Compact Disc") << i18n("DVD") << i18n("Cassette") << i18n("Vinyl");
55 field = new Field(QStringLiteral("medium"), i18n("Medium"), media);
56 field->setCategory(i18n(music_general));
57 field->setFlags(Field::AllowGrouped);
58 list.append(field);
59
60 field = new Field(QStringLiteral("artist"), i18n("Artist"));
61 field->setCategory(i18n(music_general));
62 field->setFlags(Field::AllowCompletion | Field::AllowGrouped | Field::AllowMultiple);
63 field->setFormatType(FieldFormat::FormatTitle); // don't use FormatName
64 list.append(field);
65
66 field = new Field(QStringLiteral("label"), i18n("Label"));
67 field->setCategory(i18n(music_general));
68 field->setFlags(Field::AllowCompletion | Field::AllowGrouped | Field::AllowMultiple);
69 field->setFormatType(FieldFormat::FormatPlain);
70 list.append(field);
71
72 field = new Field(QStringLiteral("year"), i18n("Year"), Field::Number);
73 field->setCategory(i18n(music_general));
74 field->setFlags(Field::AllowGrouped);
75 list.append(field);
76
77 field = new Field(QStringLiteral("genre"), i18n("Genre"));
78 field->setCategory(i18n(music_general));
79 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped);
80 field->setFormatType(FieldFormat::FormatPlain);
81 list.append(field);
82
83 field = new Field(QStringLiteral("track"), i18n("Tracks"), Field::Table);
84 field->setFormatType(FieldFormat::FormatTitle);
85 field->setProperty(QStringLiteral("columns"), QStringLiteral("3"));
86 field->setProperty(QStringLiteral("column1"), i18n("Title"));
87 field->setProperty(QStringLiteral("column2"), i18n("Artist"));
88 field->setProperty(QStringLiteral("column3"), i18n("Length"));
89 list.append(field);
90
91 field = new Field(QStringLiteral("rating"), i18n("Rating"), Field::Rating);
92 field->setCategory(i18n(music_personal));
93 field->setFlags(Field::AllowGrouped);
94 list.append(field);
95
96 field = new Field(QStringLiteral("pur_date"), i18n("Purchase Date"));
97 field->setCategory(i18n(music_personal));
98 field->setFormatType(FieldFormat::FormatDate);
99 list.append(field);
100
101 field = new Field(QStringLiteral("gift"), i18n("Gift"), Field::Bool);
102 field->setCategory(i18n(music_personal));
103 list.append(field);
104
105 field = new Field(QStringLiteral("pur_price"), i18n("Purchase Price"));
106 field->setCategory(i18n(music_personal));
107 list.append(field);
108
109 field = new Field(QStringLiteral("loaned"), i18n("Loaned"), Field::Bool);
110 field->setCategory(i18n(music_personal));
111 list.append(field);
112
113 field = new Field(QStringLiteral("keyword"), i18n("Keywords"));
114 field->setCategory(i18n(music_personal));
115 field->setFlags(Field::AllowCompletion | Field::AllowMultiple | Field::AllowGrouped);
116 list.append(field);
117
118 field = new Field(QStringLiteral("cover"), i18n("Cover"), Field::Image);
119 list.append(field);
120
121 field = new Field(QStringLiteral("comments"), i18n("Comments"), Field::Para);
122 field->setCategory(i18n(music_personal));
123 list.append(field);
124
125 list.append(Field::createDefaultField(Field::IDField));
126 list.append(Field::createDefaultField(Field::CreatedDateField));
127 list.append(Field::createDefaultField(Field::ModifiedDateField));
128
129 return list;
130 }
131
sameEntry(Tellico::Data::EntryPtr entry1_,Tellico::Data::EntryPtr entry2_) const132 int MusicCollection::sameEntry(Tellico::Data::EntryPtr entry1_, Tellico::Data::EntryPtr entry2_) const {
133 // not enough for title to be equal, must also have another field
134 int res = 0;
135 res += EntryComparison::MATCH_WEIGHT_MED*EntryComparison::score(entry1_, entry2_, QStringLiteral("title"), this);
136 res += EntryComparison::MATCH_WEIGHT_MED*EntryComparison::score(entry1_, entry2_, QStringLiteral("artist"), this);
137 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res;
138
139 res += EntryComparison::MATCH_WEIGHT_LOW*EntryComparison::score(entry1_, entry2_, QStringLiteral("year"), this);
140 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res;
141
142 res += EntryComparison::MATCH_WEIGHT_LOW*EntryComparison::score(entry1_, entry2_, QStringLiteral("label"), this);
143 if(res >= EntryComparison::ENTRY_PERFECT_MATCH) return res;
144
145 res += EntryComparison::MATCH_WEIGHT_LOW*EntryComparison::score(entry1_, entry2_, QStringLiteral("medium"), this);
146 return res;
147 }
148