From 3f8d7944c1ffaee8816b40b3ee3c800792aa051f Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Mon, 2 Nov 2015 17:36:26 -0500
Subject: [PATCH] folders not allowed to be dropped / pasted

---
 Telegram/SourceFiles/config.h             |  2 +-
 Telegram/SourceFiles/historywidget.cpp    | 11 +++++++----
 Telegram/SourceFiles/localimageloader.cpp |  9 +++++++++
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h
index 58b7905d0..2a49ed1a9 100644
--- a/Telegram/SourceFiles/config.h
+++ b/Telegram/SourceFiles/config.h
@@ -351,7 +351,7 @@ enum {
 };
 
 inline const QRegularExpression &cWordSplit() {
-	static QRegularExpression regexp(qsl("[\\@\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]"));
+	static QRegularExpression regexp(qsl("[\\@\\s\\-\\+\\(\\)\\[\\]\\{\\}\\<\\>\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]"));
 	return regexp;
 }
 
diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp
index 21d7028e7..4398f133a 100644
--- a/Telegram/SourceFiles/historywidget.cpp
+++ b/Telegram/SourceFiles/historywidget.cpp
@@ -4378,7 +4378,10 @@ DragState HistoryWidget::getDragState(const QMimeData *d) {
 		QString file(i->toLocalFile());
 		if (file.startsWith(qsl("/.file/id="))) file = psConvertFileUrl(file);
 
-		quint64 s = QFileInfo(file).size();
+		QFileInfo info(file);
+		if (info.isDir()) return DragStateNone;
+
+		quint64 s = info.size();
 		if (s >= MaxUploadDocumentSize) {
 			return DragStateNone;
 		}
@@ -4527,10 +4530,10 @@ void HistoryWidget::onFilesDrop(const QMimeData *data) {
 		return;
 	}
 
-	if (files.size() == 1) {
+	if (files.size() == 1 && !QFileInfo(files.at(0)).isDir()) {
 		uploadFile(files.at(0), PrepareAuto);
 	}
-//	uploadFiles(files, PrepareAuto); // multiple confirm with "compressed" checkbox
+//  uploadFiles(files, PrepareAuto); // multiple confirm with "compressed" checkbox
 }
 
 void HistoryWidget::onKbToggle(bool manual) {
@@ -4816,7 +4819,7 @@ void HistoryWidget::uploadFile(const QString &file, PrepareMediaType type, FileL
 void HistoryWidget::uploadFiles(const QStringList &files, PrepareMediaType type) {
 	if (!_history || files.isEmpty()) return;
 
-	if (files.size() == 1) return uploadFile(files.at(0), type);
+	if (files.size() == 1 && !QFileInfo(files.at(0)).isDir()) return uploadFile(files.at(0), type);
 
 	App::wnd()->activateWindow();
 
diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp
index ba9e7a0d0..1b71de0de 100644
--- a/Telegram/SourceFiles/localimageloader.cpp
+++ b/Telegram/SourceFiles/localimageloader.cpp
@@ -216,6 +216,10 @@ void FileLoadTask::process() {
 
 	if (!_filepath.isEmpty()) {
 		QFileInfo info(_filepath);
+		if (info.isDir()) {
+			_result->filesize = -1;
+			return;
+		}
 		filesize = info.size();
 		filemime = mimeTypeForFile(info).name();
 		filename = info.fileName();
@@ -399,6 +403,11 @@ void FileLoadTask::finish() {
 		App::wnd()->replaceLayer(new InformBox(lang(lng_send_image_empty)));
 		return;
 	}
+	if (_result->filesize == -1) { // dir
+		App::main()->onSendFileCancel(_result);
+		App::wnd()->replaceLayer(new InformBox(lng_send_folder(lt_name, QFileInfo(_filepath).fileName())));
+		return;
+	}
 	if (_result->filesize > MaxUploadDocumentSize) {
 		App::main()->onSendFileCancel(_result);
 		App::wnd()->replaceLayer(new InformBox(lang(lng_send_image_too_large)));