UIValidation.cpp 3.1 KB

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