libaccounts-qt  1.6
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 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(0)
51 {
52  if (m_serviceType != 0 && mode == AddReference)
53  ag_service_type_ref(m_serviceType);
54 }
55 
60  m_serviceType(0),
61  m_tags(0)
62 {
63 }
64 
70  m_serviceType(other.m_serviceType),
71  m_tags(0)
72 {
73  if (m_serviceType != 0)
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 != 0)
81  ag_service_type_unref(m_serviceType);
82  m_serviceType = other.m_serviceType;
83  if (m_serviceType != 0)
84  ag_service_type_ref(m_serviceType);
85  return *this;
86 }
87 
88 ServiceType::~ServiceType()
89 {
90  if (m_serviceType != 0) {
91  ag_service_type_unref(m_serviceType);
92  m_serviceType = 0;
93  }
94  if (m_tags != 0) {
95  delete m_tags;
96  m_tags = 0;
97  }
98 }
99 
105 {
106  return m_serviceType != 0;
107 }
108 
112 QString ServiceType::name() const
113 {
114  return UTF8(ag_service_type_get_name(m_serviceType));
115 }
116 
126 {
127  const gchar *id;
128 
129  /* libaccounts-glib returns the display name untranslated. */
130  id = ag_service_type_get_display_name(m_serviceType);
131  if (id != NULL) {
132  return qtTrId(id);
133  } else {
134  return QString();
135  }
136 }
137 
142 QString ServiceType::trCatalog() const
143 {
144  return ASCII(ag_service_type_get_i18n_domain(m_serviceType));
145 }
146 
150 QString ServiceType::iconName() const
151 {
152  return ASCII(ag_service_type_get_icon_name(m_serviceType));
153 }
154 
162 bool ServiceType::hasTag(const QString &tag) const
163 {
164  return ag_service_type_has_tag(m_serviceType, tag.toUtf8().constData());
165 }
166 
172 QSet<QString> ServiceType::tags() const
173 {
174  if (m_tags)
175  return *m_tags;
176 
177  m_tags = new QSet<QString>;
178  GList *list = ag_service_type_get_tags(m_serviceType);
179  GList *iter = list;
180  while (iter != NULL) {
181  m_tags->insert(UTF8(reinterpret_cast<const gchar *> (iter->data)));
182  iter = g_list_next(iter);
183  }
184  g_list_free(list);
185  return *m_tags;
186 }
187 
191 const QDomDocument ServiceType::domDocument() const
192 {
193  const gchar *data;
194  gsize len;
195 
196  ag_service_type_get_file_contents(m_serviceType, &data, &len);
197 
198  QDomDocument doc;
199  QString errorStr;
200  int errorLine;
201  int errorColumn;
202  if (!doc.setContent(QByteArray(data, len), true,
203  &errorStr, &errorLine, &errorColumn)) {
204  QString message(ASCII("Parse error reading serviceType file "
205  "at line %1, column %2:\n%3"));
206  message.arg(errorLine).arg(errorColumn).arg(errorStr);
207  qWarning() << __PRETTY_FUNCTION__ << message;
208  }
209 
210  return doc;
211 }
212