1 /**
2  * This file is part of TelepathyQt
3  *
4  * @copyright Copyright (C) 2010 Collabora Ltd. <http://www.collabora.co.uk/>
5  * @copyright Copyright (C) 2010 Nokia Corporation
6  * @license LGPL 2.1
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21  */
22 
23 #include <TelepathyQt/RequestableChannelClassSpec>
24 
25 namespace Tp
26 {
27 
28 struct TP_QT_NO_EXPORT RequestableChannelClassSpec::Private : public QSharedData
29 {
PrivateTp::RequestableChannelClassSpec::Private30     Private(const RequestableChannelClass &rcc)
31         : rcc(rcc) {}
32 
33     RequestableChannelClass rcc;
34 };
35 
36 /**
37  * \class RequestableChannelClassSpec
38  * \ingroup wrappers
39  * \headerfile TelepathyQt/requestable-channel-class-spec.h <TelepathyQt/RequestableChannelClassSpec>
40  *
41  * \brief The RequestableChannelClassSpec class represents a Telepathy
42  * requestable channel class.
43  */
44 
RequestableChannelClassSpec(const RequestableChannelClass & rcc)45 RequestableChannelClassSpec::RequestableChannelClassSpec(const RequestableChannelClass &rcc)
46     : mPriv(new Private(rcc))
47 {
48 }
49 
RequestableChannelClassSpec()50 RequestableChannelClassSpec::RequestableChannelClassSpec()
51 {
52 }
53 
RequestableChannelClassSpec(const RequestableChannelClassSpec & other)54 RequestableChannelClassSpec::RequestableChannelClassSpec(const RequestableChannelClassSpec &other)
55     : mPriv(other.mPriv)
56 {
57 }
58 
~RequestableChannelClassSpec()59 RequestableChannelClassSpec::~RequestableChannelClassSpec()
60 {
61 }
62 
textChat()63 RequestableChannelClassSpec RequestableChannelClassSpec::textChat()
64 {
65     static RequestableChannelClassSpec spec;
66 
67     if (!spec.isValid()) {
68         RequestableChannelClass rcc;
69         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
70                 TP_QT_IFACE_CHANNEL_TYPE_TEXT);
71         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
72                 (uint) HandleTypeContact);
73         spec = RequestableChannelClassSpec(rcc);
74     }
75 
76     return spec;
77 }
78 
textChatroom()79 RequestableChannelClassSpec RequestableChannelClassSpec::textChatroom()
80 {
81     static RequestableChannelClassSpec spec;
82 
83     if (!spec.isValid()) {
84         RequestableChannelClass rcc;
85         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
86                 TP_QT_IFACE_CHANNEL_TYPE_TEXT);
87         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
88                 (uint) HandleTypeRoom);
89         spec = RequestableChannelClassSpec(rcc);
90     }
91 
92     return spec;
93 }
94 
audioCall()95 RequestableChannelClassSpec RequestableChannelClassSpec::audioCall()
96 {
97     static RequestableChannelClassSpec spec;
98 
99     if (!spec.isValid()) {
100         RequestableChannelClass rcc;
101         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
102                 TP_QT_IFACE_CHANNEL_TYPE_CALL);
103         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
104                 (uint) HandleTypeContact);
105         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"),
106                 true);
107         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
108         spec = RequestableChannelClassSpec(rcc);
109     }
110 
111     return spec;
112 }
113 
audioCallWithVideoAllowed()114 RequestableChannelClassSpec RequestableChannelClassSpec::audioCallWithVideoAllowed()
115 {
116     static RequestableChannelClassSpec spec;
117 
118     if (!spec.isValid()) {
119         RequestableChannelClass rcc;
120         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
121                 TP_QT_IFACE_CHANNEL_TYPE_CALL);
122         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
123                 (uint) HandleTypeContact);
124         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"),
125                 true);
126         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
127         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"));
128         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
129         spec = RequestableChannelClassSpec(rcc);
130     }
131 
132     return spec;
133 }
134 
videoCall()135 RequestableChannelClassSpec RequestableChannelClassSpec::videoCall()
136 {
137     static RequestableChannelClassSpec spec;
138 
139     if (!spec.isValid()) {
140         RequestableChannelClass rcc;
141         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
142                 TP_QT_IFACE_CHANNEL_TYPE_CALL);
143         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
144                 (uint) HandleTypeContact);
145         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"),
146                 true);
147         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
148         spec = RequestableChannelClassSpec(rcc);
149     }
150 
151     return spec;
152 }
153 
videoCallWithAudioAllowed()154 RequestableChannelClassSpec RequestableChannelClassSpec::videoCallWithAudioAllowed()
155 {
156     static RequestableChannelClassSpec spec;
157 
158     if (!spec.isValid()) {
159         RequestableChannelClass rcc;
160         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
161                 TP_QT_IFACE_CHANNEL_TYPE_CALL);
162         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
163                 (uint) HandleTypeContact);
164         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"),
165                 true);
166         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
167         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"));
168         rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
169         spec = RequestableChannelClassSpec(rcc);
170     }
171 
172     return spec;
173 }
174 
streamedMediaCall()175 RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaCall()
176 {
177     static RequestableChannelClassSpec spec;
178 
179     if (!spec.isValid()) {
180         RequestableChannelClass rcc;
181         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
182                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
183         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
184                 (uint) HandleTypeContact);
185         spec = RequestableChannelClassSpec(rcc);
186     }
187 
188     return spec;
189 }
190 
streamedMediaAudioCall()191 RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaAudioCall()
192 {
193     static RequestableChannelClassSpec spec;
194 
195     if (!spec.isValid()) {
196         RequestableChannelClass rcc;
197         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
198                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
199         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
200                 (uint) HandleTypeContact);
201         rcc.allowedProperties.append(
202                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"));
203         spec = RequestableChannelClassSpec(rcc);
204     }
205 
206     return spec;
207 }
208 
streamedMediaVideoCall()209 RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaVideoCall()
210 {
211     static RequestableChannelClassSpec spec;
212 
213     if (!spec.isValid()) {
214         RequestableChannelClass rcc;
215         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
216                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
217         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
218                 (uint) HandleTypeContact);
219         rcc.allowedProperties.append(
220                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"));
221         spec = RequestableChannelClassSpec(rcc);
222     }
223 
224     return spec;
225 }
226 
streamedMediaVideoCallWithAudio()227 RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaVideoCallWithAudio()
228 {
229     static RequestableChannelClassSpec spec;
230 
231     if (!spec.isValid()) {
232         RequestableChannelClass rcc;
233         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
234                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
235         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
236                 (uint) HandleTypeContact);
237         rcc.allowedProperties.append(
238                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"));
239         rcc.allowedProperties.append(
240                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"));
241         spec = RequestableChannelClassSpec(rcc);
242     }
243 
244     return spec;
245 }
246 
fileTransfer()247 RequestableChannelClassSpec RequestableChannelClassSpec::fileTransfer()
248 {
249     static RequestableChannelClassSpec spec;
250 
251     if (!spec.isValid()) {
252         RequestableChannelClass rcc;
253         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
254                 TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER);
255         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
256                 (uint) HandleTypeContact);
257         spec = RequestableChannelClassSpec(rcc);
258     }
259 
260     return spec;
261 }
262 
conferenceTextChat()263 RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChat()
264 {
265     static RequestableChannelClassSpec spec;
266 
267     if (!spec.isValid()) {
268         RequestableChannelClass rcc;
269         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
270                 TP_QT_IFACE_CHANNEL_TYPE_TEXT);
271         rcc.allowedProperties.append(
272                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
273         spec = RequestableChannelClassSpec(rcc);
274     }
275 
276     return spec;
277 }
278 
conferenceTextChatWithInvitees()279 RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatWithInvitees()
280 {
281     static RequestableChannelClassSpec spec;
282 
283     if (!spec.isValid()) {
284         RequestableChannelClass rcc;
285         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
286                 TP_QT_IFACE_CHANNEL_TYPE_TEXT);
287         rcc.allowedProperties.append(
288                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
289         rcc.allowedProperties.append(
290                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"));
291         spec = RequestableChannelClassSpec(rcc);
292     }
293 
294     return spec;
295 }
296 
conferenceTextChatroom()297 RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatroom()
298 {
299     static RequestableChannelClassSpec spec;
300 
301     if (!spec.isValid()) {
302         RequestableChannelClass rcc;
303         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
304                 TP_QT_IFACE_CHANNEL_TYPE_TEXT);
305         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
306                 (uint) HandleTypeRoom);
307 
308         rcc.allowedProperties.append(
309                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
310         spec = RequestableChannelClassSpec(rcc);
311     }
312 
313     return spec;
314 }
315 
conferenceTextChatroomWithInvitees()316 RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatroomWithInvitees()
317 {
318     static RequestableChannelClassSpec spec;
319 
320     if (!spec.isValid()) {
321         RequestableChannelClass rcc;
322         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
323                 TP_QT_IFACE_CHANNEL_TYPE_TEXT);
324         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
325                 (uint) HandleTypeRoom);
326 
327         rcc.allowedProperties.append(
328                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
329         rcc.allowedProperties.append(
330                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"));
331         spec = RequestableChannelClassSpec(rcc);
332     }
333 
334     return spec;
335 }
336 
conferenceStreamedMediaCall()337 RequestableChannelClassSpec RequestableChannelClassSpec::conferenceStreamedMediaCall()
338 {
339     static RequestableChannelClassSpec spec;
340 
341     if (!spec.isValid()) {
342         RequestableChannelClass rcc;
343         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
344                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
345         rcc.allowedProperties.append(
346                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
347         spec = RequestableChannelClassSpec(rcc);
348     }
349 
350     return spec;
351 }
352 
conferenceStreamedMediaCallWithInvitees()353 RequestableChannelClassSpec RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees()
354 {
355     static RequestableChannelClassSpec spec;
356 
357     if (!spec.isValid()) {
358         RequestableChannelClass rcc;
359         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
360                 TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
361         rcc.allowedProperties.append(
362                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
363         rcc.allowedProperties.append(
364                 TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"));
365         spec = RequestableChannelClassSpec(rcc);
366     }
367 
368     return spec;
369 }
370 
contactSearch()371 RequestableChannelClassSpec RequestableChannelClassSpec::contactSearch()
372 {
373     static RequestableChannelClassSpec spec;
374 
375     if (!spec.isValid()) {
376         RequestableChannelClass rcc;
377         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
378                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
379         spec = RequestableChannelClassSpec(rcc);
380     }
381 
382     return spec;
383 }
384 
contactSearchWithSpecificServer()385 RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithSpecificServer()
386 {
387     static RequestableChannelClassSpec spec;
388 
389     if (!spec.isValid()) {
390         RequestableChannelClass rcc;
391         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
392                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
393         rcc.allowedProperties.append(
394                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server"));
395         spec = RequestableChannelClassSpec(rcc);
396     }
397 
398     return spec;
399 }
400 
contactSearchWithLimit()401 RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithLimit()
402 {
403     static RequestableChannelClassSpec spec;
404 
405     if (!spec.isValid()) {
406         RequestableChannelClass rcc;
407         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
408                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
409         rcc.allowedProperties.append(
410                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit"));
411         spec = RequestableChannelClassSpec(rcc);
412     }
413 
414     return spec;
415 }
416 
contactSearchWithSpecificServerAndLimit()417 RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithSpecificServerAndLimit()
418 {
419     static RequestableChannelClassSpec spec;
420 
421     if (!spec.isValid()) {
422         RequestableChannelClass rcc;
423         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
424                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
425         rcc.allowedProperties.append(
426                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server"));
427         rcc.allowedProperties.append(
428                 TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit"));
429         spec = RequestableChannelClassSpec(rcc);
430     }
431 
432     return spec;
433 }
434 
dbusTube(const QString & serviceName)435 RequestableChannelClassSpec RequestableChannelClassSpec::dbusTube(const QString &serviceName)
436 {
437     static RequestableChannelClassSpec spec;
438 
439     if (!spec.isValid()) {
440         RequestableChannelClass rcc;
441         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
442                 TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE);
443         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
444                 (uint) HandleTypeContact);
445         spec = RequestableChannelClassSpec(rcc);
446     }
447 
448     if (serviceName.isEmpty()) {
449         return spec;
450     }
451 
452     RequestableChannelClass rcc = spec.bareClass();
453     rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"),
454             serviceName);
455     return RequestableChannelClassSpec(rcc);
456 }
457 
streamTube(const QString & service)458 RequestableChannelClassSpec RequestableChannelClassSpec::streamTube(const QString &service)
459 {
460     static RequestableChannelClassSpec spec;
461 
462     if (!spec.isValid()) {
463         RequestableChannelClass rcc;
464         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
465                 TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE);
466         rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
467                 (uint) HandleTypeContact);
468         spec = RequestableChannelClassSpec(rcc);
469     }
470 
471     if (service.isEmpty()) {
472         return spec;
473     }
474 
475     RequestableChannelClass rcc = spec.bareClass();
476     rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"),
477             service);
478     return RequestableChannelClassSpec(rcc);
479 }
480 
operator =(const RequestableChannelClassSpec & other)481 RequestableChannelClassSpec &RequestableChannelClassSpec::operator=(const RequestableChannelClassSpec &other)
482 {
483     this->mPriv = other.mPriv;
484     return *this;
485 }
486 
operator ==(const RequestableChannelClassSpec & other) const487 bool RequestableChannelClassSpec::operator==(const RequestableChannelClassSpec &other) const
488 {
489     if (!isValid() || !other.isValid()) {
490         if (!isValid() && !other.isValid()) {
491             return true;
492         }
493         return false;
494     }
495 
496     return mPriv->rcc == other.mPriv->rcc;
497 }
498 
supports(const RequestableChannelClassSpec & other) const499 bool RequestableChannelClassSpec::supports(const RequestableChannelClassSpec &other) const
500 {
501     if (!isValid()) {
502         return false;
503     }
504 
505     if (mPriv->rcc.fixedProperties == other.fixedProperties()) {
506         foreach (const QString &prop, other.allowedProperties()) {
507             if (!mPriv->rcc.allowedProperties.contains(prop)) {
508                 return false;
509             }
510         }
511         return true;
512     }
513     return false;
514 }
515 
channelType() const516 QString RequestableChannelClassSpec::channelType() const
517 {
518     if (!isValid()) {
519         return QString();
520     }
521     return qdbus_cast<QString>(mPriv->rcc.fixedProperties.value(
522                 TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")));
523 }
524 
hasTargetHandleType() const525 bool RequestableChannelClassSpec::hasTargetHandleType() const
526 {
527     if (!isValid()) {
528         return false;
529     }
530     return mPriv->rcc.fixedProperties.contains(
531             TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"));
532 }
533 
targetHandleType() const534 HandleType RequestableChannelClassSpec::targetHandleType() const
535 {
536     if (!hasTargetHandleType()) {
537         return (HandleType) -1;
538     }
539     return (HandleType) qdbus_cast<uint>(mPriv->rcc.fixedProperties.value(
540                 TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")));
541 }
542 
hasFixedProperty(const QString & name) const543 bool RequestableChannelClassSpec::hasFixedProperty(const QString &name) const
544 {
545     if (!isValid()) {
546         return false;
547     }
548     return mPriv->rcc.fixedProperties.contains(name);
549 }
550 
fixedProperty(const QString & name) const551 QVariant RequestableChannelClassSpec::fixedProperty(const QString &name) const
552 {
553     if (!isValid()) {
554         return QVariant();
555     }
556     return mPriv->rcc.fixedProperties.value(name);
557 }
558 
fixedProperties() const559 QVariantMap RequestableChannelClassSpec::fixedProperties() const
560 {
561     if (!isValid()) {
562         return QVariantMap();
563     }
564     return mPriv->rcc.fixedProperties;
565 }
566 
allowsProperty(const QString & name) const567 bool RequestableChannelClassSpec::allowsProperty(const QString &name) const
568 {
569     if (!isValid()) {
570         return false;
571     }
572     return mPriv->rcc.allowedProperties.contains(name);
573 }
574 
allowedProperties() const575 QStringList RequestableChannelClassSpec::allowedProperties() const
576 {
577     if (!isValid()) {
578         return QStringList();
579     }
580     return mPriv->rcc.allowedProperties;
581 }
582 
bareClass() const583 RequestableChannelClass RequestableChannelClassSpec::bareClass() const
584 {
585     return isValid() ? mPriv->rcc : RequestableChannelClass();
586 }
587 
588 /**
589  * \class RequestableChannelClassSpecList
590  * \ingroup wrappers
591  * \headerfile TelepathyQt/requestable-channel-class-spec.h <TelepathyQt/RequestableChannelClassSpecList>
592  *
593  * \brief The RequestableChannelClassSpecList class represents a list of
594  * RequestableChannelClassSpec.
595  */
596 
597 } // Tp
598