4#include <qndefnfcsmartposterrecord.h>
6#include <qndefmessage.h>
8#include <QtCore/QString>
9#include <QtCore/QStringList>
15
16
17
18
19
20
21
22
23
24
25
26
29
30
31
32
35
36
37
38
41
42
43
44
45
46
47
48
49
52
53
54
55
56
57
58
59
60
62QNdefNfcSmartPosterRecordPrivate::~QNdefNfcSmartPosterRecordPrivate()
66void QNdefNfcSmartPosterRecordPrivate::cleanup()
78
79
80QNdefNfcSmartPosterRecord::QNdefNfcSmartPosterRecord()
81 : QNdefRecord(QNdefRecord::NfcRtd,
"Sp"),
82 d(
new QNdefNfcSmartPosterRecordPrivate)
87
88
89QNdefNfcSmartPosterRecord::QNdefNfcSmartPosterRecord(
const QNdefRecord &other)
90 : QNdefRecord(other, QNdefRecord::NfcRtd,
"Sp"),
91 d(
new QNdefNfcSmartPosterRecordPrivate)
94 setPayload(other.payload());
98
99
100QNdefNfcSmartPosterRecord::QNdefNfcSmartPosterRecord(
const QNdefNfcSmartPosterRecord &other)
101 : QNdefRecord(other, QNdefRecord::NfcRtd,
"Sp"), d(other.d)
106
107
108
109QNdefNfcSmartPosterRecord &QNdefNfcSmartPosterRecord::operator=(
const QNdefNfcSmartPosterRecord &other)
111 QNdefRecord::operator=(other);
120
121
122QNdefNfcSmartPosterRecord::~QNdefNfcSmartPosterRecord()
126void QNdefNfcSmartPosterRecord::cleanup()
133
134
135
136void QNdefNfcSmartPosterRecord::setPayload(
const QByteArray &payload)
138 QNdefRecord::setPayload(payload);
142 if (!payload.isEmpty()) {
144 const QNdefMessage message = QNdefMessage::fromByteArray(payload);
147 for (
const QNdefRecord& record : message) {
149 if (record.isRecordType<QNdefNfcTextRecord>()) {
150 addTitleInternal(record);
154 else if (record.isRecordType<QNdefNfcUriRecord>()) {
155 d->m_uri = QNdefNfcUriRecord(record);
159 else if (record.isRecordType<QNdefNfcActRecord>()) {
160 d->m_action = QNdefNfcActRecord(record);
164 else if (record.isRecordType<QNdefNfcIconRecord>()) {
165 addIconInternal(record);
169 else if (record.isRecordType<QNdefNfcSizeRecord>()) {
170 d->m_size = QNdefNfcSizeRecord(record);
174 else if (record.isRecordType<QNdefNfcTypeRecord>()) {
175 d->m_type = QNdefNfcTypeRecord(record);
181void QNdefNfcSmartPosterRecord::convertToPayload()
183 QNdefMessage message;
186 for (qsizetype t = 0; t < titleCount(); t++)
187 message.append(titleRecord(t));
191 message.append(*(d->m_uri));
195 message.append(*(d->m_action));
198 for (qsizetype i = 0; i < iconCount(); i++)
199 message.append(iconRecord(i));
203 message.append(*(d->m_size));
207 message.append(*(d->m_type));
209 QNdefRecord::setPayload(message.toByteArray());
213
214
215
216
217
218bool QNdefNfcSmartPosterRecord::hasTitle(
const QString &locale)
const
220 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
221 const QNdefNfcTextRecord &text = d->m_titleList[i];
223 if (locale.isEmpty() || text.locale() == locale)
231
232
233
234bool QNdefNfcSmartPosterRecord::hasAction()
const
236 return d->m_action.has_value();
240
241
242
243
244
245bool QNdefNfcSmartPosterRecord::hasIcon(
const QByteArray &mimetype)
const
247 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
248 const QNdefNfcIconRecord &icon = d->m_iconList[i];
250 if (mimetype.isEmpty() || icon.type() == mimetype)
258
259
260
261bool QNdefNfcSmartPosterRecord::hasSize()
const
263 return d->m_size.has_value();
267
268
269
270bool QNdefNfcSmartPosterRecord::hasTypeInfo()
const
272 return d->m_type.has_value();
276
277
278qsizetype QNdefNfcSmartPosterRecord::titleCount()
const
280 return d->m_titleList.size();
284
285
286
287
288QNdefNfcTextRecord QNdefNfcSmartPosterRecord::titleRecord(qsizetype index)
const
290 if (index >= 0 && index < d->m_titleList.size())
291 return d->m_titleList[index];
293 return QNdefNfcTextRecord();
297
298
299
300
301QString QNdefNfcSmartPosterRecord::title(
const QString &locale)
const
303 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
304 const QNdefNfcTextRecord &text = d->m_titleList[i];
306 if (locale.isEmpty() || text.locale() == locale)
314
315
316QList<QNdefNfcTextRecord> QNdefNfcSmartPosterRecord::titleRecords()
const
318 return d->m_titleList;
322
323
324
325
326bool QNdefNfcSmartPosterRecord::addTitle(
const QNdefNfcTextRecord &text)
328 const bool status = addTitleInternal(text);
337bool QNdefNfcSmartPosterRecord::addTitleInternal(
const QNdefNfcTextRecord &text)
339 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
340 const QNdefNfcTextRecord &rec = d->m_titleList[i];
342 if (rec.locale() == text.locale())
346 d->m_titleList.append(text);
351
352
353
354
355bool QNdefNfcSmartPosterRecord::addTitle(
const QString &text,
const QString &locale, QNdefNfcTextRecord::Encoding encoding)
357 QNdefNfcTextRecord rec;
359 rec.setLocale(locale);
360 rec.setEncoding(encoding);
362 return addTitle(rec);
366
367
368
369
370bool QNdefNfcSmartPosterRecord::removeTitle(
const QNdefNfcTextRecord &text)
374 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
375 const QNdefNfcTextRecord &rec = d->m_titleList[i];
377 if (rec.text() == text.text() && rec.locale() == text.locale() && rec.encoding() == text.encoding()) {
378 d->m_titleList.removeAt(i);
392
393
394
395
396bool QNdefNfcSmartPosterRecord::removeTitle(
const QString &locale)
400 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
401 const QNdefNfcTextRecord &rec = d->m_titleList[i];
403 if (rec.locale() == locale) {
404 d->m_titleList.removeAt(i);
418
419
420void QNdefNfcSmartPosterRecord::setTitles(
const QList<QNdefNfcTextRecord> &titles)
422 d->m_titleList = titles;
429
430
431
432
433
434QUrl QNdefNfcSmartPosterRecord::uri()
const
437 return d->m_uri->uri();
443
444
445QNdefNfcUriRecord QNdefNfcSmartPosterRecord::uriRecord()
const
450 return QNdefNfcUriRecord();
454
455
456void QNdefNfcSmartPosterRecord::setUri(
const QNdefNfcUriRecord &url)
458 d->m_uri = QNdefNfcUriRecord(url);
465
466
467void QNdefNfcSmartPosterRecord::setUri(
const QUrl &url)
469 QNdefNfcUriRecord rec;
476
477
478QNdefNfcSmartPosterRecord::Action QNdefNfcSmartPosterRecord::action()
const
481 return d->m_action->action();
483 return UnspecifiedAction;
487
488
489void QNdefNfcSmartPosterRecord::setAction(Action act)
492 d->m_action = QNdefNfcActRecord();
494 d->m_action->setAction(act);
501
502
503qsizetype QNdefNfcSmartPosterRecord::iconCount()
const
505 return d->m_iconList.size();
509
510
511
512
513QNdefNfcIconRecord QNdefNfcSmartPosterRecord::iconRecord(qsizetype index)
const
515 if (index >= 0 && index < d->m_iconList.size())
516 return d->m_iconList[index];
518 return QNdefNfcIconRecord();
522
523
524
525
526
527
528QByteArray QNdefNfcSmartPosterRecord::icon(
const QByteArray& mimetype)
const
530 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
531 const QNdefNfcIconRecord &icon = d->m_iconList[i];
533 if (mimetype.isEmpty() || icon.type() == mimetype)
541
542
543QList<QNdefNfcIconRecord> QNdefNfcSmartPosterRecord::iconRecords()
const
545 return d->m_iconList;
549
550
551
552void QNdefNfcSmartPosterRecord::addIcon(
const QNdefNfcIconRecord &icon)
554 addIconInternal(icon);
560void QNdefNfcSmartPosterRecord::addIconInternal(
const QNdefNfcIconRecord &icon)
562 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
563 const QNdefNfcIconRecord &rec = d->m_iconList[i];
565 if (rec.type() == icon.type())
566 d->m_iconList.removeAt(i);
569 d->m_iconList.append(icon);
573
574
575
576void QNdefNfcSmartPosterRecord::addIcon(
const QByteArray &type,
const QByteArray &data)
578 QNdefNfcIconRecord rec;
586
587
588
589
590bool QNdefNfcSmartPosterRecord::removeIcon(
const QNdefNfcIconRecord &icon)
594 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
595 const QNdefNfcIconRecord &rec = d->m_iconList[i];
597 if (rec.type() == icon.type() && rec.data() == icon.data()) {
598 d->m_iconList.removeAt(i);
612
613
614
615
616bool QNdefNfcSmartPosterRecord::removeIcon(
const QByteArray &type)
620 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
621 const QNdefNfcIconRecord &rec = d->m_iconList[i];
623 if (rec.type() == type) {
624 d->m_iconList.removeAt(i);
638
639
640
641
642
643void QNdefNfcSmartPosterRecord::setIcons(
const QList<QNdefNfcIconRecord> &icons)
645 d->m_iconList = icons;
652
653
654
655
656
657
658
659
660quint32 QNdefNfcSmartPosterRecord::size()
const
663 return d->m_size->size();
669
670
671
672
673
674void QNdefNfcSmartPosterRecord::setSize(quint32 size)
677 d->m_size = QNdefNfcSizeRecord();
679 d->m_size->setSize(size);
686
687
688
689
690
691
692
693QString QNdefNfcSmartPosterRecord::typeInfo()
const
696 return d->m_type->typeInfo();
702
703
704
705
706
707void QNdefNfcSmartPosterRecord::setTypeInfo(
const QString &type)
709 d->m_type = QNdefNfcTypeRecord();
710 d->m_type->setTypeInfo(type);
716void QNdefNfcActRecord::setAction(QNdefNfcSmartPosterRecord::Action action)
718 QByteArray data(1, action);
723QNdefNfcSmartPosterRecord::Action QNdefNfcActRecord::action()
const
725 const QByteArray p = payload();
726 QNdefNfcSmartPosterRecord::Action value =
727 QNdefNfcSmartPosterRecord::UnspecifiedAction;
730 value = QNdefNfcSmartPosterRecord::Action(
static_cast<
signed char>(p[0]));
736
737
738void QNdefNfcIconRecord::setData(
const QByteArray &data)
744
745
746
747
748
749QByteArray QNdefNfcIconRecord::data()
const
754void QNdefNfcSizeRecord::setSize(quint32 size)
756 QByteArray data(4, 0);
758 data[0] = (
int) ((size & 0xFF000000) >> 24);
759 data[1] = (
int) ((size & 0x00FF0000) >> 16);
760 data[2] = (
int) ((size & 0x0000FF00) >> 8);
761 data[3] = (
int) ((size & 0x000000FF));
766quint32 QNdefNfcSizeRecord::size()
const
768 const QByteArray p = payload();
773 return ((p[0] << 24) & 0xFF000000) + ((p[1] << 16) & 0x00FF0000)
774 + ((p[2] << 8) & 0x0000FF00) + (p[3] & 0x000000FF);
777void QNdefNfcTypeRecord::setTypeInfo(
const QString &type)
779 setPayload(type.toUtf8());
782QString QNdefNfcTypeRecord::typeInfo()
const
784 return QString::fromUtf8(payload());