@@ -195,6 +195,30 @@ const QString& aliasSubscribesProp()
195
195
return Str;
196
196
}
197
197
198
+ const QString& subscribesRemoveProp ()
199
+ {
200
+ static const QString Str (" mqtt5.subscribes_remove" );
201
+ return Str;
202
+ }
203
+
204
+ const QString& aliasSubscribesRemoveProp ()
205
+ {
206
+ static const QString Str (" mqtt.subscribes_remove" );
207
+ return Str;
208
+ }
209
+
210
+ const QString& subscribesClearProp ()
211
+ {
212
+ static const QString Str (" mqtt5.subscribes_clear" );
213
+ return Str;
214
+ }
215
+
216
+ const QString& aliasSubscribesClearProp ()
217
+ {
218
+ static const QString Str (" mqtt.subscribes_clear" );
219
+ return Str;
220
+ }
221
+
198
222
const QString& keySubProp ()
199
223
{
200
224
static const QString Str (" key" );
@@ -695,7 +719,73 @@ void Mqtt5ClientFilter::applyInterPluginConfigImpl(const QVariantMap& props)
695
719
updated = true ;
696
720
}
697
721
}
698
- }
722
+ }
723
+
724
+ {
725
+ static const QString* SubscribesRemoveProps[] = {
726
+ &aliasSubscribesRemoveProp (),
727
+ &subscribesRemoveProp (),
728
+ };
729
+
730
+ for (auto * p : SubscribesRemoveProps) {
731
+ auto var = props.value (*p);
732
+ if ((!var.isValid ()) || (!var.canConvert <QVariantList>())) {
733
+ continue ;
734
+ }
735
+
736
+ auto subList = var.value <QVariantList>();
737
+
738
+ for (auto idx = 0 ; idx < subList.size (); ++idx) {
739
+ auto & subVar = subList[idx];
740
+ if ((!subVar.isValid ()) || (!subVar.canConvert <QVariantMap>())) {
741
+ continue ;
742
+ }
743
+
744
+ auto subMap = subVar.value <QVariantMap>();
745
+ auto topicVar = subMap.value (topicSubProp ());
746
+ if ((!topicVar.isValid ()) || (!topicVar.canConvert <QString>())) {
747
+ continue ;
748
+ }
749
+
750
+ auto topic = topicVar.value <QString>();
751
+
752
+ auto iter =
753
+ std::find_if (
754
+ m_config.m_subscribes .begin (), m_config.m_subscribes .end (),
755
+ [&topic](const auto & info)
756
+ {
757
+ return topic == info.m_topic ;
758
+ });
759
+
760
+ if (iter != m_config.m_subscribes .end ()) {
761
+ m_config.m_subscribes .erase (iter);
762
+ updated = true ;
763
+ forceCleanStart ();
764
+ }
765
+ }
766
+ }
767
+ }
768
+
769
+ {
770
+ static const QString* SubscribesClearProps[] = {
771
+ &aliasSubscribesClearProp (),
772
+ &subscribesClearProp (),
773
+ };
774
+
775
+ for (auto * p : SubscribesClearProps) {
776
+ auto var = props.value (*p);
777
+ if ((!var.isValid ()) || (!var.canConvert <bool >())) {
778
+ continue ;
779
+ }
780
+
781
+ if ((!var.value <bool >()) || (m_config.m_subscribes .empty ())) {
782
+ continue ;
783
+ }
784
+
785
+ m_config.m_subscribes .clear ();
786
+ updated = true ;
787
+ }
788
+ }
699
789
700
790
{
701
791
static const QString* SubscribesProps[] = {
@@ -705,61 +795,63 @@ void Mqtt5ClientFilter::applyInterPluginConfigImpl(const QVariantMap& props)
705
795
706
796
for (auto * p : SubscribesProps) {
707
797
auto var = props.value (*p);
708
- if ((var.isValid ()) && (var.canConvert <QVariantList>())) {
709
- auto subList = var.value <QVariantList>();
710
-
711
- for (auto idx = 0 ; idx < subList.size (); ++idx) {
712
- auto & subVar = subList[idx];
713
- if ((!subVar.isValid ()) || (!subVar.canConvert <QVariantMap>())) {
714
- continue ;
715
- }
716
-
717
- auto subMap = subVar.value <QVariantMap>();
718
- auto topicVar = subMap.value (topicSubProp ());
719
- if ((!topicVar.isValid ()) || (!topicVar.canConvert <QString>())) {
720
- continue ;
721
- }
722
-
723
- auto topic = topicVar.value <QString>();
724
-
725
- auto iter =
726
- std::find_if (
727
- m_config.m_subscribes .begin (), m_config.m_subscribes .end (),
728
- [&topic](const auto & info)
729
- {
730
- return topic == info.m_topic ;
731
- });
732
-
733
- if (iter == m_config.m_subscribes .end ()) {
734
- iter = m_config.m_subscribes .insert (m_config.m_subscribes .end (), SubConfig ());
735
- iter->m_topic = topic;
736
- }
737
-
738
- auto & subConfig = *iter;
739
- auto qosVar = subMap.value (qosSubProp ());
740
- if (qosVar.isValid () && qosVar.canConvert <int >()) {
741
- subConfig.m_maxQos = qosVar.value <int >();
742
- }
743
-
744
- auto retainHandlingVar = subMap.value (retainHandlingSubProp ());
745
- if (retainHandlingVar.isValid () && retainHandlingVar.canConvert <int >()) {
746
- subConfig.m_retainHandling = retainHandlingVar.value <int >();
747
- }
748
-
749
- auto noLocalVar = subMap.value (noLocalSubProp ());
750
- if (noLocalVar.isValid () && noLocalVar.canConvert <bool >()) {
751
- subConfig.m_noLocal = noLocalVar.value <bool >();
752
- }
753
-
754
- auto retainAsPublishedVar = subMap.value (retainAsPublishedSubProp ());
755
- if (retainAsPublishedVar.isValid () && retainAsPublishedVar.canConvert <bool >()) {
756
- subConfig.m_retainAsPublished = retainAsPublishedVar.value <bool >();
757
- }
798
+ if ((!var.isValid ()) || (!var.canConvert <QVariantList>())) {
799
+ continue ;
800
+ }
801
+
802
+ auto subList = var.value <QVariantList>();
803
+
804
+ for (auto idx = 0 ; idx < subList.size (); ++idx) {
805
+ auto & subVar = subList[idx];
806
+ if ((!subVar.isValid ()) || (!subVar.canConvert <QVariantMap>())) {
807
+ continue ;
758
808
}
809
+
810
+ auto subMap = subVar.value <QVariantMap>();
811
+ auto topicVar = subMap.value (topicSubProp ());
812
+ if ((!topicVar.isValid ()) || (!topicVar.canConvert <QString>())) {
813
+ continue ;
814
+ }
815
+
816
+ auto topic = topicVar.value <QString>();
817
+
818
+ auto iter =
819
+ std::find_if (
820
+ m_config.m_subscribes .begin (), m_config.m_subscribes .end (),
821
+ [&topic](const auto & info)
822
+ {
823
+ return topic == info.m_topic ;
824
+ });
759
825
760
- updated = true ;
761
- forceCleanStart ();
826
+ if (iter == m_config.m_subscribes .end ()) {
827
+ iter = m_config.m_subscribes .insert (m_config.m_subscribes .end (), SubConfig ());
828
+ iter->m_topic = topic;
829
+ }
830
+
831
+ auto & subConfig = *iter;
832
+ auto qosVar = subMap.value (qosSubProp ());
833
+ if (qosVar.isValid () && qosVar.canConvert <int >()) {
834
+ subConfig.m_maxQos = qosVar.value <int >();
835
+ }
836
+
837
+ auto retainHandlingVar = subMap.value (retainHandlingSubProp ());
838
+ if (retainHandlingVar.isValid () && retainHandlingVar.canConvert <int >()) {
839
+ subConfig.m_retainHandling = retainHandlingVar.value <int >();
840
+ }
841
+
842
+ auto noLocalVar = subMap.value (noLocalSubProp ());
843
+ if (noLocalVar.isValid () && noLocalVar.canConvert <bool >()) {
844
+ subConfig.m_noLocal = noLocalVar.value <bool >();
845
+ }
846
+
847
+ auto retainAsPublishedVar = subMap.value (retainAsPublishedSubProp ());
848
+ if (retainAsPublishedVar.isValid () && retainAsPublishedVar.canConvert <bool >()) {
849
+ subConfig.m_retainAsPublished = retainAsPublishedVar.value <bool >();
850
+ }
762
851
}
852
+
853
+ updated = true ;
854
+ forceCleanStart ();
763
855
}
764
856
}
765
857
0 commit comments