ui-validation.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "ui-validation.hpp"
  2. #include <obs.hpp>
  3. #include <QString>
  4. #include <QMessageBox>
  5. #include <QPushButton>
  6. #include <obs-app.hpp>
  7. #include <obs-service.h>
  8. static int CountVideoSources()
  9. {
  10. int count = 0;
  11. auto countSources = [](void *param, obs_source_t *source) {
  12. if (!source)
  13. return true;
  14. uint32_t flags = obs_source_get_output_flags(source);
  15. if ((flags & OBS_SOURCE_VIDEO) != 0)
  16. (*reinterpret_cast<int *>(param))++;
  17. return true;
  18. };
  19. obs_enum_sources(countSources, &count);
  20. return count;
  21. }
  22. bool UIValidation::NoSourcesConfirmation(QWidget *parent)
  23. {
  24. // There are sources, don't need confirmation
  25. if (CountVideoSources() != 0)
  26. return true;
  27. // Ignore no video if no parent is visible to alert on
  28. if (!parent->isVisible())
  29. return true;
  30. QString msg = QTStr("NoSources.Text");
  31. msg += "\n\n";
  32. msg += QTStr("NoSources.Text.AddSource");
  33. QMessageBox messageBox(parent);
  34. messageBox.setWindowTitle(QTStr("NoSources.Title"));
  35. messageBox.setText(msg);
  36. QAbstractButton *yesButton =
  37. messageBox.addButton(QTStr("Yes"), QMessageBox::YesRole);
  38. messageBox.addButton(QTStr("No"), QMessageBox::NoRole);
  39. messageBox.setIcon(QMessageBox::Question);
  40. messageBox.exec();
  41. if (messageBox.clickedButton() != yesButton)
  42. return false;
  43. else
  44. return true;
  45. }
  46. StreamSettingsAction
  47. UIValidation::StreamSettingsConfirmation(QWidget *parent, OBSService service)
  48. {
  49. if (obs_service_can_try_to_connect(service))
  50. return StreamSettingsAction::ContinueStream;
  51. char const *serviceType = obs_service_get_type(service);
  52. bool isCustomService = (strcmp(serviceType, "rtmp_custom") == 0);
  53. char const *streamUrl = obs_service_get_connect_info(
  54. service, OBS_SERVICE_CONNECT_INFO_SERVER_URL);
  55. char const *streamKey = obs_service_get_connect_info(
  56. service, OBS_SERVICE_CONNECT_INFO_STREAM_KEY);
  57. bool streamUrlMissing = !(streamUrl != NULL && streamUrl[0] != '\0');
  58. bool streamKeyMissing = !(streamKey != NULL && streamKey[0] != '\0');
  59. QString msg;
  60. if (!isCustomService && streamUrlMissing && streamKeyMissing) {
  61. msg = QTStr("Basic.Settings.Stream.MissingUrlAndApiKey");
  62. } else if (!isCustomService && streamKeyMissing) {
  63. msg = QTStr("Basic.Settings.Stream.MissingStreamKey");
  64. } else {
  65. msg = QTStr("Basic.Settings.Stream.MissingUrl");
  66. }
  67. QMessageBox messageBox(parent);
  68. messageBox.setWindowTitle(
  69. QTStr("Basic.Settings.Stream.MissingSettingAlert"));
  70. messageBox.setText(msg);
  71. QPushButton *cancel;
  72. QPushButton *settings;
  73. #ifdef __APPLE__
  74. #define ACCEPT_BUTTON QMessageBox::AcceptRole
  75. #define REJECT_BUTTON QMessageBox::ResetRole
  76. #else
  77. #define ACCEPT_BUTTON QMessageBox::NoRole
  78. #define REJECT_BUTTON QMessageBox::NoRole
  79. #endif
  80. settings = messageBox.addButton(
  81. QTStr("Basic.Settings.Stream.StreamSettingsWarning"),
  82. ACCEPT_BUTTON);
  83. cancel = messageBox.addButton(QTStr("Cancel"), REJECT_BUTTON);
  84. messageBox.setDefaultButton(settings);
  85. messageBox.setEscapeButton(cancel);
  86. messageBox.setIcon(QMessageBox::Warning);
  87. messageBox.exec();
  88. if (messageBox.clickedButton() == settings)
  89. return StreamSettingsAction::OpenSettings;
  90. if (messageBox.clickedButton() == cancel)
  91. return StreamSettingsAction::Cancel;
  92. return StreamSettingsAction::ContinueStream;
  93. }