accounts-qt 1.17
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.h>
31
32using namespace Accounts;
33
34namespace Accounts {
46}; // namespace
47
48ServiceType::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
77ServiceType &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
88ServiceType::~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
112QString 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
152{
153 return ASCII(ag_service_type_get_i18n_domain(m_serviceType));
154}
155
160{
161 return ASCII(ag_service_type_get_icon_name(m_serviceType));
162}
163
171bool ServiceType::hasTag(const QString &tag) const
172{
173 return ag_service_type_has_tag(m_serviceType, tag.toUtf8().constData());
174}
175
181QSet<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
200const 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
Representation of an account service type.
Definition: service-type.h:50
QSet< QString > tags() const
Return all tags of the service type as a set.
ServiceType()
Construct an invalid serviceType.
bool isValid() const
Check whether this object represents a ServiceType.
QString name() const
Returns the name (ID) of the service type.
QString iconName() const
QString displayName() const
QString description() const
bool hasTag(const QString &tag) const
Check if this service type has a tag.
QString trCatalog() const
const QDomDocument domDocument() const