accounts-qt  1.16
service-type.cpp
1 /* vi: set et sw=4 ts=4 cino=t0,(0: */
2 /*
3  * This file is part of libaccounts-qt
4  *
5  * Copyright (C) 2009-2011 Nokia Corporation.
6  * Copyright (C) 2012-2016 Canonical Ltd.
7  * Copyright (C) 2012 Intel Corporation.
8  *
9  * Contact: Alberto Mardegan <alberto.mardegan@canonical.com>
10  * Contact: Jussi Laako <jussi.laako@linux.intel.com>
11  *
12  * This library is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU Lesser General Public License
14  * version 2.1 as published by the Free Software Foundation.
15  *
16  * This library is distributed in the hope that it will be useful, but
17  * WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with this library; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24  * 02110-1301 USA
25  */
26 
27 #include "service-type.h"
28 
29 #undef signals
30 #include <libaccounts-glib/ag-service-type.h>
31 
32 using namespace Accounts;
33 
34 namespace Accounts {
46 }; // namespace
47 
48 ServiceType::ServiceType(AgServiceType *serviceType, ReferenceMode mode):
49  m_serviceType(serviceType),
50  m_tags(nullptr)
51 {
52  if (m_serviceType != nullptr && mode == AddReference)
53  ag_service_type_ref(m_serviceType);
54 }
55 
60  m_serviceType(nullptr),
61  m_tags(nullptr)
62 {
63 }
64 
70  m_serviceType(other.m_serviceType),
71  m_tags(nullptr)
72 {
73  if (m_serviceType != nullptr)
74  ag_service_type_ref(m_serviceType);
75 }
76 
77 ServiceType &ServiceType::operator=(const ServiceType &other)
78 {
79  if (m_serviceType == other.m_serviceType) return *this;
80  if (m_serviceType != nullptr)
81  ag_service_type_unref(m_serviceType);
82  m_serviceType = other.m_serviceType;
83  if (m_serviceType != nullptr)
84  ag_service_type_ref(m_serviceType);
85  return *this;
86 }
87 
88 ServiceType::~ServiceType()
89 {
90  if (m_serviceType != nullptr) {
91  ag_service_type_unref(m_serviceType);
92  m_serviceType = nullptr;
93  }
94  if (m_tags != nullptr) {
95  delete m_tags;
96  m_tags = nullptr;
97  }
98 }
99 
105 {
106  return m_serviceType != nullptr;
107 }
108 
112 QString ServiceType::name() const
113 {
114  if (Q_UNLIKELY(!isValid())) return QString();
115  return UTF8(ag_service_type_get_name(m_serviceType));
116 }
117 
122 {
123  return UTF8(ag_service_type_get_description(m_serviceType));
124 }
125 
135 {
136  const gchar *id;
137 
138  /* libaccounts-glib returns the display name untranslated. */
139  id = ag_service_type_get_display_name(m_serviceType);
140  if (id != NULL) {
141  return qtTrId(id);
142  } else {
143  return QString();
144  }
145 }
146 
151 QString ServiceType::trCatalog() const
152 {
153  return ASCII(ag_service_type_get_i18n_domain(m_serviceType));
154 }
155 
159 QString ServiceType::iconName() const
160 {
161  return ASCII(ag_service_type_get_icon_name(m_serviceType));
162 }
163 
171 bool ServiceType::hasTag(const QString &tag) const
172 {
173  return ag_service_type_has_tag(m_serviceType, tag.toUtf8().constData());
174 }
175 
181 QSet<QString> ServiceType::tags() const
182 {
183  if (m_tags)
184  return *m_tags;
185 
186  m_tags = new QSet<QString>;
187  GList *list = ag_service_type_get_tags(m_serviceType);
188  GList *iter = list;
189  while (iter != NULL) {
190  m_tags->insert(UTF8(reinterpret_cast<const gchar *> (iter->data)));
191  iter = g_list_next(iter);
192  }
193  g_list_free(list);
194  return *m_tags;
195 }
196 
200 const QDomDocument ServiceType::domDocument() const
201 {
202  const gchar *data;
203  gsize len;
204 
205  ag_service_type_get_file_contents(m_serviceType, &data, &len);
206 
207  QDomDocument doc;
208  QString errorStr;
209  int errorLine;
210  int errorColumn;
211  if (!doc.setContent(QByteArray(data, len), true,
212  &errorStr, &errorLine, &errorColumn)) {
213  QString message(QStringLiteral("Parse error reading serviceType file "
214  "at line %1, column %2:\n%3"));
215  message = message.arg(errorLine).arg(errorColumn).arg(errorStr);
216  qWarning() << __PRETTY_FUNCTION__ << message;
217  }
218 
219  return doc;
220 }
221 
Accounts::ServiceType::domDocument
const QDomDocument domDocument() const
Definition: service-type.cpp:200
Accounts::ServiceType::description
QString description() const
Definition: service-type.cpp:121
Accounts::ServiceType::trCatalog
QString trCatalog() const
Definition: service-type.cpp:151
Accounts::ServiceType
Representation of an account service type.
Definition: service-type.h:50
Accounts::ServiceType::iconName
QString iconName() const
Definition: service-type.cpp:159
Accounts::ServiceType::tags
QSet< QString > tags() const
Return all tags of the service type as a set.
Definition: service-type.cpp:181
Accounts::ServiceType::ServiceType
ServiceType()
Construct an invalid serviceType.
Definition: service-type.cpp:59
Accounts::ServiceType::isValid
bool isValid() const
Check whether this object represents a ServiceType.
Definition: service-type.cpp:104
Accounts::ServiceType::name
QString name() const
Returns the name (ID) of the service type.
Definition: service-type.cpp:112
Accounts::ServiceType::displayName
QString displayName() const
Definition: service-type.cpp:134
Accounts::ServiceType::hasTag
bool hasTag(const QString &tag) const
Check if this service type has a tag.
Definition: service-type.cpp:171