Jelajahi Sumber

UI: Check for valid source name and duplicates

When creating a source, it was possible to create duplicates.  That has
now been fixed.  I think that perhaps libobs shouldn't even allow for
duplicates in its core code, just to be safe.  Will have to consider
doing that in the future.
jp9000 11 tahun lalu
induk
melakukan
e7ea34f417
1 mengubah file dengan 35 tambahan dan 11 penghapusan
  1. 35 11
      obs/window-basic-source-select.cpp

+ 35 - 11
obs/window-basic-source-select.cpp

@@ -15,6 +15,7 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
 
+#include <QMessageBox>
 #include "window-basic-main.hpp"
 #include "window-basic-source-select.hpp"
 #include "qt-wrappers.hpp"
@@ -98,21 +99,36 @@ static void AddExisting(const char *name)
 	obs_scene_release(scene);
 }
 
-void AddNew(const char *id, const char *name)
+bool AddNew(QWidget *parent, const char *id, const char *name)
 {
-	obs_source_t source = obs_get_output_source(0);
-	obs_scene_t  scene  = obs_scene_fromsource(source);
-	if (!scene)
-		return;
+	obs_source_t source  = obs_get_output_source(0);
+	obs_scene_t  scene   = obs_scene_fromsource(source);
+	bool         success = false;
+	if (!source)
+		return false;
 
-	source = obs_source_create(OBS_SOURCE_TYPE_INPUT,
-			id, name, NULL);
+	source = obs_get_source_by_name(name);
+	if (source) {
+		QMessageBox::information(parent,
+				QTStr("NameExists.Title"),
+				QTStr("NameExists.Text"));
 
-	obs_add_source(source);
-	obs_scene_add(scene, source);
-	obs_source_release(source);
+	} else {
+		source = obs_source_create(OBS_SOURCE_TYPE_INPUT,
+				id, name, NULL);
 
+		if (source) {
+			obs_add_source(source);
+			obs_scene_add(scene, source);
+
+			success = true;
+		}
+	}
+
+	obs_source_release(source);
 	obs_scene_release(scene);
+
+	return success;
 }
 
 void OBSBasicSourceSelect::on_buttonBox_accepted()
@@ -126,7 +142,15 @@ void OBSBasicSourceSelect::on_buttonBox_accepted()
 
 		AddExisting(QT_TO_UTF8(item->text()));
 	} else {
-		AddNew(type, QT_TO_UTF8(ui->sourceName->text()));
+		if (ui->sourceName->text().isEmpty()) {
+			QMessageBox::information(this,
+					QTStr("NoNameEntered"),
+					QTStr("NoNameEntered"));
+			return;
+		}
+
+		if (!AddNew(this, type, QT_TO_UTF8(ui->sourceName->text())))
+			return;
 	}
 
 	done(DialogCode::Accepted);