1
0
Эх сурвалжийг харах

UI: resolve .url, .lnk shortcuts during drag-and-drop

On applies to Windows.

Suggested here: https://ideas.obsproject.com/posts/1636
Tim Cooper 3 жил өмнө
parent
commit
bf09a70a09

+ 29 - 0
UI/window-basic-main-dropfiles.cpp

@@ -5,6 +5,9 @@
 #include <QFileInfo>
 #include <QMimeData>
 #include <QUrlQuery>
+#ifdef _WIN32
+#include <QSettings>
+#endif
 #include <string>
 
 #include "window-basic-main.hpp"
@@ -58,6 +61,15 @@ static string GenerateSourceName(const char *base)
 	}
 }
 
+#ifdef _WIN32
+static QString ReadWindowsURLFile(const QString &file)
+{
+	QSettings iniFile(file, QSettings::IniFormat);
+	QVariant url = iniFile.value("InternetShortcut/URL");
+	return url.toString();
+}
+#endif
+
 void OBSBasic::AddDropURL(const char *url, QString &name, obs_data_t *settings,
 			  const obs_video_info &ovi)
 {
@@ -247,6 +259,23 @@ void OBSBasic::dropEvent(QDropEvent *event)
 				continue;
 			}
 
+#ifdef _WIN32
+			if (fileInfo.suffix().compare(
+				    "url", Qt::CaseInsensitive) == 0) {
+				QString urlTarget = ReadWindowsURLFile(file);
+				if (!urlTarget.isEmpty()) {
+					ConfirmDropUrl(urlTarget);
+				}
+				continue;
+			} else if (fileInfo.isShortcut()) {
+				file = fileInfo.symLinkTarget();
+				fileInfo = QFileInfo(file);
+				if (!fileInfo.exists()) {
+					continue;
+				}
+			}
+#endif
+
 			QString suffixQStr = fileInfo.suffix();
 			QByteArray suffixArray = suffixQStr.toUtf8();
 			const char *suffix = suffixArray.constData();