filealias.cpp
1 //------------------------------------------------------------------------------
2 // filealias.cpp
3 //------------------------------------------------------------------------------
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 // 02110-1301, USA.
19 //
20 //------------------------------------------------------------------------------
21 // Copyright (C) 2014 "Zalewa" <zalewapl@gmail.com>
22 //------------------------------------------------------------------------------
23 #include "filealias.h"
24 
25 FileAlias::FileAlias()
26 {
27 }
28 
29 FileAlias::FileAlias(const QString &name)
30 {
31  d.name = name;
32 }
33 
34 void FileAlias::addAlias(const QString &val)
35 {
36  if (!d.aliases.contains(val, Qt::CaseInsensitive))
37  {
38  d.aliases << val;
39  }
40 }
41 
42 void FileAlias::addAliases(const QStringList &val)
43 {
44  foreach (const QString &element, val)
45  {
46  addAlias(element);
47  }
48 }
49 
50 const QStringList &FileAlias::aliases() const
51 {
52  return d.aliases;
53 }
54 
55 void FileAlias::setAliases(const QStringList &val)
56 {
57  d.aliases = val;
58 }
59 
60 FileAlias FileAlias::deserializeQVariant(const QVariant &var)
61 {
62  QVariantMap m = var.toMap();
63  FileAlias result;
64  result.setAliases(m["aliases"].toStringList());
65  result.setName(m["name"].toString());
66  return result;
67 }
68 
69 QVariant FileAlias::serializeQVariant() const
70 {
71  QVariantMap m;
72  m["aliases"] = aliases();
73  m["name"] = name();
74  return m;
75 }
76 
77 FileAlias FileAlias::freeDoom1Aliases()
78 {
79  FileAlias result;
80  result.setName("doom.wad");
81  QStringList aliases;
82  aliases << "freedomu.wad" << "freedoom1.wad";
83  result.setAliases(aliases);
84  return result;
85 }
86 
87 QList<FileAlias> FileAlias::freeDoom2Aliases()
88 {
89  QStringList bases;
90  // Each of these are equivalent in terms of modern source-ports.
91  // If custom levels require one of those WADs as a base, I'd assume
92  // they will run just fine with any of them, and thus also with freedoom.
93  bases << "doom2.wad" << "tnt.wad" << "plutonia.wad";
94  QList<FileAlias> result;
95  foreach (const QString &base, bases)
96  {
97  FileAlias alias;
98  alias.setName(base);
99  QStringList aliases;
100  aliases << "freedoom.wad" << "freedoom2.wad";
101  alias.setAliases(aliases);
102  result << alias;
103  }
104  return result;
105 }
106 
107 bool FileAlias::isSameName(const QString &otherName) const
108 {
109  return d.name.compare(otherName, Qt::CaseInsensitive) == 0;
110 }
111 
112 bool FileAlias::isValid() const
113 {
114  return !name().isEmpty() && !aliases().isEmpty();
115 }
116 
117 const QString &FileAlias::name() const
118 {
119  return d.name;
120 }
121 
122 void FileAlias::setName(const QString &val)
123 {
124  d.name = val;
125 }
126 
128 {
129  QList<FileAlias> result;
130  result << freeDoom1Aliases();
131  foreach (const FileAlias &alias, freeDoom2Aliases())
132  {
133  result << alias;
134  }
135  return result;
136 }
138 QList<FileAlias> FileAliasList::mergeDuplicates(const QList<FileAlias> &input)
139 {
140  QList<FileAlias> result;
141  foreach (const FileAlias &alias, input)
142  {
143  bool merged = false;
144  for (int i = 0; i < result.size(); ++i)
145  {
146  FileAlias &aliasOnList = result[i];
147  if (aliasOnList.isSameName(alias.name()))
148  {
149  aliasOnList.addAliases(alias.aliases());
150  merged = true;
151  break;
152  }
153  }
154  if (!merged)
155  {
156  result << alias;
157  }
158  }
159  return result;
160 }
bool isValid() const
Valid FileAlias has a name and at least one alias.
Definition: filealias.cpp:112
void addAliases(const QStringList &val)
Will ensure unique values.
Definition: filealias.cpp:42
static QList< FileAlias > standardWadAliases()
Standard/default aliases for configuration init.
Definition: filealias.cpp:127
bool isSameName(const QString &otherName) const
Compares passed string to local name and checks if they're same.
Definition: filealias.cpp:107
void addAlias(const QString &val)
Will ensure unique values.
Definition: filealias.cpp:34