@@ -590,7 +590,7 @@ void vendor_request_unpause_recording(obs_data_t *request_data, obs_data_t *resp
590
590
obs_data_set_bool (response_data, " success" , false );
591
591
}
592
592
593
- update_info_t *verison_update_info = nullptr ;
593
+ update_info_t *version_update_info = nullptr ;
594
594
595
595
bool version_info_downloaded (void *param, struct file_download_data *file)
596
596
{
@@ -600,6 +600,10 @@ bool version_info_downloaded(void *param, struct file_download_data *file)
600
600
for (const auto &it : canvas_docks) {
601
601
QMetaObject::invokeMethod (it, " ApiInfo" , Q_ARG (QString, QString::fromUtf8 ((const char *)file->buffer .array )));
602
602
}
603
+ if (version_update_info) {
604
+ update_info_destroy (version_update_info);
605
+ version_update_info = nullptr ;
606
+ }
603
607
return true ;
604
608
}
605
609
@@ -702,7 +706,7 @@ void obs_module_post_load(void)
702
706
obs_websocket_vendor_register_request (vendor, " pause_recording" , vendor_request_pause_recording, nullptr );
703
707
obs_websocket_vendor_register_request (vendor, " unpause_recording" , vendor_request_unpause_recording, nullptr );
704
708
705
- verison_update_info = update_info_create_single (" [Vertical Canvas]" , " OBS" , " https://api.aitum.tv/plugin/vertical" ,
709
+ version_update_info = update_info_create_single (" [Vertical Canvas]" , " OBS" , " https://api.aitum.tv/plugin/vertical" ,
706
710
version_info_downloaded, nullptr );
707
711
}
708
712
@@ -729,7 +733,10 @@ void obs_module_unload(void)
729
733
obs_websocket_vendor_unregister_request (vendor, " update_stream_server" );
730
734
}
731
735
obs_frontend_remove_event_callback (frontend_event, nullptr );
732
- update_info_destroy (verison_update_info);
736
+ if (version_update_info) {
737
+ update_info_destroy (version_update_info);
738
+ version_update_info = nullptr ;
739
+ }
733
740
}
734
741
735
742
MODULE_EXPORT const char *obs_module_description (void )
@@ -999,7 +1006,7 @@ CanvasDock::CanvasDock(obs_data_t *settings, QWidget *parent)
999
1006
obs_data_set_bool (settings, " backtrack" , true );
1000
1007
first_time = true ;
1001
1008
}
1002
-
1009
+ partnerBlockTime = ( time_t ) obs_data_get_int (settings, " partner_block " );
1003
1010
hideScenes = !obs_data_get_bool (settings, " show_scenes" );
1004
1011
canvas_width = (uint32_t )obs_data_get_int (settings, " width" );
1005
1012
canvas_height = (uint32_t )obs_data_get_int (settings, " height" );
@@ -6525,6 +6532,7 @@ obs_data_t *CanvasDock::SaveSettings()
6525
6532
6526
6533
obs_data_set_int (save_data, " width" , canvas_width);
6527
6534
obs_data_set_int (save_data, " height" , canvas_height);
6535
+ obs_data_set_int (save_data, " partner_block" , partnerBlockTime);
6528
6536
obs_data_set_bool (save_data, " show_scenes" , !hideScenes);
6529
6537
obs_data_set_bool (save_data, " preview_disabled" , preview_disabled);
6530
6538
obs_data_set_bool (save_data, " virtual_cam_warned" , virtual_cam_warned);
@@ -7744,6 +7752,35 @@ void CanvasDock::Nudge(int dist, MoveDir dir)
7744
7752
obs_scene_enum_items (scene, nudge_callback, &offset);
7745
7753
}
7746
7754
7755
+ void RemoveWidget (QWidget *widget);
7756
+
7757
+ void RemoveLayoutItem (QLayoutItem *item)
7758
+ {
7759
+ if (!item)
7760
+ return ;
7761
+ RemoveWidget (item->widget ());
7762
+ if (item->layout ()) {
7763
+ while (QLayoutItem *item2 = item->layout ()->takeAt (0 ))
7764
+ RemoveLayoutItem (item2);
7765
+ }
7766
+ delete item;
7767
+ }
7768
+
7769
+ void RemoveWidget (QWidget *widget)
7770
+ {
7771
+ if (!widget)
7772
+ return ;
7773
+ if (widget->layout ()) {
7774
+ auto l = widget->layout ();
7775
+ QLayoutItem *item;
7776
+ while (l->count () > 0 && (item = l->takeAt (0 ))) {
7777
+ RemoveLayoutItem (item);
7778
+ }
7779
+ delete l;
7780
+ }
7781
+ delete widget;
7782
+ }
7783
+
7747
7784
void CanvasDock::ApiInfo (QString info)
7748
7785
{
7749
7786
auto d = obs_data_create_from_json (info.toUtf8 ().constData ());
@@ -7764,40 +7801,62 @@ void CanvasDock::ApiInfo(QString info)
7764
7801
configButton->setStyleSheet (QString::fromUtf8 (" background: rgb(192,128,0);" ));
7765
7802
}
7766
7803
}
7767
- obs_data_array_t *blocks = obs_data_get_array (data_obj, " partnerBlocks" );
7768
- size_t count = obs_data_array_count (blocks);
7769
- for (size_t i = count; i > 0 ; i--) {
7770
- obs_data_t *block = obs_data_array_item (blocks, i - 1 );
7771
- auto block_type = obs_data_get_string (block, " type" );
7772
- if (strcmp (block_type, " LINK" ) == 0 ) {
7773
- auto button = new QPushButton (QString::fromUtf8 (obs_data_get_string (block, " label" )));
7774
- button->setStyleSheet (QString::fromUtf8 (obs_data_get_string (block, " qss" )));
7775
- auto url = QString::fromUtf8 (obs_data_get_string (block, " data" ));
7776
- connect (button, &QPushButton::clicked, [url] { QDesktopServices::openUrl (QUrl (url)); });
7777
- auto buttonRow = new QHBoxLayout;
7778
- buttonRow->addWidget (button);
7779
- mainLayout->insertLayout (2 , buttonRow, 0 );
7780
- } else if (strcmp (block_type, " IMAGE" ) == 0 ) {
7781
- auto image_data = QString::fromUtf8 (obs_data_get_string (block, " data" ));
7782
- if (image_data.startsWith (" data:image/" )) {
7783
- auto pos = image_data.indexOf (" ;" );
7784
- auto format = image_data.mid (11 , pos - 11 );
7785
- QImage image;
7786
- if (image.loadFromData (QByteArray::fromBase64 (image_data.mid (pos + 7 ).toUtf8 ().constData ()),
7787
- format.toUtf8 ().constData ())) {
7788
- auto label = new AspectRatioPixmapLabel;
7789
- label->setPixmap (QPixmap::fromImage (image));
7790
- label->setAlignment (Qt::AlignCenter);
7791
- label->setStyleSheet (QString::fromUtf8 (obs_data_get_string (block, " qss" )));
7792
- auto labelRow = new QHBoxLayout;
7793
- labelRow->addWidget (label, 1 , Qt::AlignCenter);
7794
- mainLayout->insertLayout (2 , labelRow, 0 );
7804
+ time_t current_time = time (nullptr );
7805
+ if (current_time < partnerBlockTime || current_time - partnerBlockTime > 1209600 ) {
7806
+ obs_data_array_t *blocks = obs_data_get_array (data_obj, " partnerBlocks" );
7807
+ size_t count = obs_data_array_count (blocks);
7808
+ size_t added_count = 0 ;
7809
+ for (size_t i = count; i > 0 ; i--) {
7810
+ obs_data_t *block = obs_data_array_item (blocks, i - 1 );
7811
+ auto block_type = obs_data_get_string (block, " type" );
7812
+ QBoxLayout *layout = nullptr ;
7813
+ if (strcmp (block_type, " LINK" ) == 0 ) {
7814
+ auto button = new QPushButton (QString::fromUtf8 (obs_data_get_string (block, " label" )));
7815
+ button->setStyleSheet (QString::fromUtf8 (obs_data_get_string (block, " qss" )));
7816
+ auto url = QString::fromUtf8 (obs_data_get_string (block, " data" ));
7817
+ connect (button, &QPushButton::clicked, [url] { QDesktopServices::openUrl (QUrl (url)); });
7818
+ auto buttonRow = new QHBoxLayout;
7819
+ buttonRow->addWidget (button);
7820
+ layout = buttonRow;
7821
+
7822
+ } else if (strcmp (block_type, " IMAGE" ) == 0 ) {
7823
+ auto image_data = QString::fromUtf8 (obs_data_get_string (block, " data" ));
7824
+ if (image_data.startsWith (" data:image/" )) {
7825
+ auto pos = image_data.indexOf (" ;" );
7826
+ auto format = image_data.mid (11 , pos - 11 );
7827
+ QImage image;
7828
+ if (image.loadFromData (QByteArray::fromBase64 (image_data.mid (pos + 7 ).toUtf8 ().constData ()),
7829
+ format.toUtf8 ().constData ())) {
7830
+ auto label = new AspectRatioPixmapLabel;
7831
+ label->setPixmap (QPixmap::fromImage (image));
7832
+ label->setAlignment (Qt::AlignCenter);
7833
+ label->setStyleSheet (QString::fromUtf8 (obs_data_get_string (block, " qss" )));
7834
+ auto labelRow = new QHBoxLayout;
7835
+ labelRow->addWidget (label, 1 , Qt::AlignCenter);
7836
+ layout = labelRow;
7837
+ }
7838
+ }
7839
+ }
7840
+ if (layout) {
7841
+ added_count++;
7842
+ if (i == 1 ) {
7843
+ auto closeButton = new QPushButton (" 🞫" );
7844
+ connect (closeButton, &QPushButton::clicked, [this , added_count] {
7845
+ for (size_t j = 0 ; j < added_count; j++) {
7846
+ auto item = mainLayout->takeAt (2 );
7847
+ RemoveLayoutItem (item);
7848
+ }
7849
+ partnerBlockTime = time (nullptr );
7850
+ SaveSettings ();
7851
+ });
7852
+ layout->addWidget (closeButton);
7795
7853
}
7854
+ mainLayout->insertLayout (2 , layout, 0 );
7796
7855
}
7856
+ obs_data_release (block);
7797
7857
}
7798
- obs_data_release (block );
7858
+ obs_data_array_release (blocks );
7799
7859
}
7800
- obs_data_array_release (blocks);
7801
7860
obs_data_release (data_obj);
7802
7861
}
7803
7862
0 commit comments