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()
67void QNdefNfcSmartPosterRecordPrivate::cleanup()
79
80
81QNdefNfcSmartPosterRecord::QNdefNfcSmartPosterRecord()
82 : QNdefRecord(QNdefRecord::NfcRtd,
"Sp"),
83 d(
new QNdefNfcSmartPosterRecordPrivate)
88
89
90QNdefNfcSmartPosterRecord::QNdefNfcSmartPosterRecord(
const QNdefRecord &other)
91 : QNdefRecord(other, QNdefRecord::NfcRtd,
"Sp"),
92 d(
new QNdefNfcSmartPosterRecordPrivate)
95 setPayload(other.payload());
99
100
101QNdefNfcSmartPosterRecord::QNdefNfcSmartPosterRecord(
const QNdefNfcSmartPosterRecord &other)
102 : QNdefRecord(other, QNdefRecord::NfcRtd,
"Sp"), d(other.d)
107
108
109
110QNdefNfcSmartPosterRecord &QNdefNfcSmartPosterRecord::operator=(
const QNdefNfcSmartPosterRecord &other)
119
120
121QNdefNfcSmartPosterRecord::~QNdefNfcSmartPosterRecord()
125void QNdefNfcSmartPosterRecord::cleanup()
132
133
134
135void QNdefNfcSmartPosterRecord::setPayload(
const QByteArray &payload)
137 QNdefRecord::setPayload(payload);
141 if (!payload.isEmpty()) {
143 const QNdefMessage message = QNdefMessage::fromByteArray(payload);
146 for (
const QNdefRecord& record : message) {
148 if (record.isRecordType<QNdefNfcTextRecord>()) {
149 addTitleInternal(record);
153 else if (record.isRecordType<QNdefNfcUriRecord>()) {
154 d->m_uri =
new QNdefNfcUriRecord(record);
158 else if (record.isRecordType<QNdefNfcActRecord>()) {
159 d->m_action =
new QNdefNfcActRecord(record);
163 else if (record.isRecordType<QNdefNfcIconRecord>()) {
164 addIconInternal(record);
168 else if (record.isRecordType<QNdefNfcSizeRecord>()) {
169 d->m_size =
new QNdefNfcSizeRecord(record);
173 else if (record.isRecordType<QNdefNfcTypeRecord>()) {
174 d->m_type =
new QNdefNfcTypeRecord(record);
180void QNdefNfcSmartPosterRecord::convertToPayload()
182 QNdefMessage message;
185 for (qsizetype t = 0; t < titleCount(); t++)
186 message.append(titleRecord(t));
190 message.append(*(d->m_uri));
194 message.append(*(d->m_action));
197 for (qsizetype i = 0; i < iconCount(); i++)
198 message.append(iconRecord(i));
202 message.append(*(d->m_size));
206 message.append(*(d->m_type));
208 QNdefRecord::setPayload(message.toByteArray());
212
213
214
215
216
217bool QNdefNfcSmartPosterRecord::hasTitle(
const QString &locale)
const
219 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
220 const QNdefNfcTextRecord &text = d->m_titleList[i];
222 if (locale.isEmpty() || text.locale() == locale)
230
231
232
233bool QNdefNfcSmartPosterRecord::hasAction()
const
235 return d->m_action !=
nullptr;
239
240
241
242
243
244bool QNdefNfcSmartPosterRecord::hasIcon(
const QByteArray &mimetype)
const
246 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
247 const QNdefNfcIconRecord &icon = d->m_iconList[i];
249 if (mimetype.isEmpty() || icon.type() == mimetype)
257
258
259
260bool QNdefNfcSmartPosterRecord::hasSize()
const
262 return d->m_size !=
nullptr;
266
267
268
269bool QNdefNfcSmartPosterRecord::hasTypeInfo()
const
271 return d->m_type !=
nullptr;
275
276
277qsizetype QNdefNfcSmartPosterRecord::titleCount()
const
279 return d->m_titleList.size();
283
284
285
286
287QNdefNfcTextRecord QNdefNfcSmartPosterRecord::titleRecord(qsizetype index)
const
289 if (index >= 0 && index < d->m_titleList.size())
290 return d->m_titleList[index];
292 return QNdefNfcTextRecord();
296
297
298
299
300QString QNdefNfcSmartPosterRecord::title(
const QString &locale)
const
302 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
303 const QNdefNfcTextRecord &text = d->m_titleList[i];
305 if (locale.isEmpty() || text.locale() == locale)
313
314
315QList<QNdefNfcTextRecord> QNdefNfcSmartPosterRecord::titleRecords()
const
317 return d->m_titleList;
321
322
323
324
325bool QNdefNfcSmartPosterRecord::addTitle(
const QNdefNfcTextRecord &text)
327 const bool status = addTitleInternal(text);
336bool QNdefNfcSmartPosterRecord::addTitleInternal(
const QNdefNfcTextRecord &text)
338 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
339 const QNdefNfcTextRecord &rec = d->m_titleList[i];
341 if (rec.locale() == text.locale())
345 d->m_titleList.append(text);
350
351
352
353
354bool QNdefNfcSmartPosterRecord::addTitle(
const QString &text,
const QString &locale, QNdefNfcTextRecord::Encoding encoding)
356 QNdefNfcTextRecord rec;
358 rec.setLocale(locale);
359 rec.setEncoding(encoding);
361 return addTitle(rec);
365
366
367
368
369bool QNdefNfcSmartPosterRecord::removeTitle(
const QNdefNfcTextRecord &text)
373 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
374 const QNdefNfcTextRecord &rec = d->m_titleList[i];
376 if (rec.text() == text.text() && rec.locale() == text.locale() && rec.encoding() == text.encoding()) {
377 d->m_titleList.removeAt(i);
391
392
393
394
395bool QNdefNfcSmartPosterRecord::removeTitle(
const QString &locale)
399 for (qsizetype i = 0; i < d->m_titleList.size(); ++i) {
400 const QNdefNfcTextRecord &rec = d->m_titleList[i];
402 if (rec.locale() == locale) {
403 d->m_titleList.removeAt(i);
417
418
419void QNdefNfcSmartPosterRecord::setTitles(
const QList<QNdefNfcTextRecord> &titles)
421 d->m_titleList = titles;
428
429
430QUrl QNdefNfcSmartPosterRecord::uri()
const
433 return d->m_uri->uri();
439
440
441QNdefNfcUriRecord QNdefNfcSmartPosterRecord::uriRecord()
const
446 return QNdefNfcUriRecord();
450
451
452void QNdefNfcSmartPosterRecord::setUri(
const QNdefNfcUriRecord &url)
457 d->m_uri =
new QNdefNfcUriRecord(url);
464
465
466void QNdefNfcSmartPosterRecord::setUri(
const QUrl &url)
468 QNdefNfcUriRecord rec;
475
476
477QNdefNfcSmartPosterRecord::Action QNdefNfcSmartPosterRecord::action()
const
480 return d->m_action->action();
482 return UnspecifiedAction;
486
487
488void QNdefNfcSmartPosterRecord::setAction(Action act)
491 d->m_action =
new QNdefNfcActRecord();
493 d->m_action->setAction(act);
500
501
502qsizetype QNdefNfcSmartPosterRecord::iconCount()
const
504 return d->m_iconList.size();
508
509
510
511
512QNdefNfcIconRecord QNdefNfcSmartPosterRecord::iconRecord(qsizetype index)
const
514 if (index >= 0 && index < d->m_iconList.size())
515 return d->m_iconList[index];
517 return QNdefNfcIconRecord();
521
522
523
524QByteArray QNdefNfcSmartPosterRecord::icon(
const QByteArray& mimetype)
const
526 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
527 const QNdefNfcIconRecord &icon = d->m_iconList[i];
529 if (mimetype.isEmpty() || icon.type() == mimetype)
537
538
539QList<QNdefNfcIconRecord> QNdefNfcSmartPosterRecord::iconRecords()
const
541 return d->m_iconList;
545
546
547
548void QNdefNfcSmartPosterRecord::addIcon(
const QNdefNfcIconRecord &icon)
550 addIconInternal(icon);
556void QNdefNfcSmartPosterRecord::addIconInternal(
const QNdefNfcIconRecord &icon)
558 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
559 const QNdefNfcIconRecord &rec = d->m_iconList[i];
561 if (rec.type() == icon.type())
562 d->m_iconList.removeAt(i);
565 d->m_iconList.append(icon);
569
570
571
572void QNdefNfcSmartPosterRecord::addIcon(
const QByteArray &type,
const QByteArray &data)
574 QNdefNfcIconRecord rec;
582
583
584
585
586bool QNdefNfcSmartPosterRecord::removeIcon(
const QNdefNfcIconRecord &icon)
590 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
591 const QNdefNfcIconRecord &rec = d->m_iconList[i];
593 if (rec.type() == icon.type() && rec.data() == icon.data()) {
594 d->m_iconList.removeAt(i);
608
609
610
611
612bool QNdefNfcSmartPosterRecord::removeIcon(
const QByteArray &type)
616 for (qsizetype i = 0; i < d->m_iconList.size(); ++i) {
617 const QNdefNfcIconRecord &rec = d->m_iconList[i];
619 if (rec.type() == type) {
620 d->m_iconList.removeAt(i);
634
635
636
637
638
639void QNdefNfcSmartPosterRecord::setIcons(
const QList<QNdefNfcIconRecord> &icons)
641 d->m_iconList = icons;
648
649
650
651
652
653
654
655
656quint32 QNdefNfcSmartPosterRecord::size()
const
659 return d->m_size->size();
665
666
667
668
669
670void QNdefNfcSmartPosterRecord::setSize(quint32 size)
673 d->m_size =
new QNdefNfcSizeRecord();
675 d->m_size->setSize(size);
682
683
684
685
686
687
688
689QString QNdefNfcSmartPosterRecord::typeInfo()
const
692 return d->m_type->typeInfo();
698
699
700
701
702
703void QNdefNfcSmartPosterRecord::setTypeInfo(
const QString &type)
708 d->m_type =
new QNdefNfcTypeRecord();
709 d->m_type->setTypeInfo(type);
715void QNdefNfcActRecord::setAction(QNdefNfcSmartPosterRecord::Action action)
717 QByteArray data(1, action);
722QNdefNfcSmartPosterRecord::Action QNdefNfcActRecord::action()
const
724 const QByteArray p = payload();
725 QNdefNfcSmartPosterRecord::Action value =
726 QNdefNfcSmartPosterRecord::UnspecifiedAction;
729 value = QNdefNfcSmartPosterRecord::Action(
static_cast<
signed char>(p[0]));
735
736
737void QNdefNfcIconRecord::setData(
const QByteArray &data)
743
744
745QByteArray QNdefNfcIconRecord::data()
const
750void QNdefNfcSizeRecord::setSize(quint32 size)
752 QByteArray data(4, 0);
754 data[0] = (
int) ((size & 0xFF000000) >> 24);
755 data[1] = (
int) ((size & 0x00FF0000) >> 16);
756 data[2] = (
int) ((size & 0x0000FF00) >> 8);
757 data[3] = (
int) ((size & 0x000000FF));
762quint32 QNdefNfcSizeRecord::size()
const
764 const QByteArray p = payload();
769 return ((p[0] << 24) & 0xFF000000) + ((p[1] << 16) & 0x00FF0000)
770 + ((p[2] << 8) & 0x0000FF00) + (p[3] & 0x000000FF);
773void QNdefNfcTypeRecord::setTypeInfo(
const QString &type)
775 setPayload(type.toUtf8());
778QString QNdefNfcTypeRecord::typeInfo()
const
780 return QString::fromUtf8(payload());