summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/qml/delegates/ImageMessage.qml4
-rw-r--r--resources/qml/delegates/PlayableMediaMessage.qml27
-rw-r--r--src/AvatarProvider.cpp4
-rw-r--r--src/MxcImageProvider.cpp3
-rw-r--r--src/timeline2/TimelineModel.cpp19
-rw-r--r--src/timeline2/TimelineModel.h1
6 files changed, 46 insertions, 12 deletions
diff --git a/resources/qml/delegates/ImageMessage.qml b/resources/qml/delegates/ImageMessage.qml
index 70d2debe..f1e95e3d 100644
--- a/resources/qml/delegates/ImageMessage.qml
+++ b/resources/qml/delegates/ImageMessage.qml
@@ -3,8 +3,8 @@ import QtQuick 2.6
 import com.github.nheko 1.0
 
 Item {
-	width: 300
-	height: 300 * model.proportionalHeight
+	width: Math.min(parent.width, model.width)
+	height: width * model.proportionalHeight
 
 	Image {
 		id: img
diff --git a/resources/qml/delegates/PlayableMediaMessage.qml b/resources/qml/delegates/PlayableMediaMessage.qml
index c716d21d..3a518617 100644
--- a/resources/qml/delegates/PlayableMediaMessage.qml
+++ b/resources/qml/delegates/PlayableMediaMessage.qml
@@ -6,26 +6,38 @@ import QtMultimedia 5.6
 import com.github.nheko 1.0
 
 Rectangle {
+	id: bg
 	radius: 10
 	color: colors.dark
 	height: content.height + 24
 	width: parent.width
 
-	ColumnLayout { 
+	Column { 
 		id: content
 		width: parent.width - 24
 		anchors.centerIn: parent
 
-		VideoOutput {
+		Rectangle {
+			id: videoContainer
 			visible: model.type == MtxEvent.VideoMessage
-			Layout.maximumHeight: 300
-			Layout.minimumHeight: 300
-			Layout.maximumWidth: 500
-			fillMode: VideoOutput.PreserveAspectFit
-			source: media
+			width: Math.min(parent.width, model.width)
+			height: width*model.proportionalHeight
+			Image {
+				anchors.fill: parent
+				source: model.thumbnailUrl.replace("mxc://", "image://MxcImage/")
+				asynchronous: true
+				fillMode: Image.PreserveAspectFit
+
+				VideoOutput {
+					anchors.fill: parent
+					fillMode: VideoOutput.PreserveAspectFit
+					source: media
+				}
+			}
 		}
 
 		RowLayout {
+			width: parent.width
 			Text {
 				id: positionText
 				text: "--:--:--"
@@ -102,6 +114,7 @@ Rectangle {
 					id: media
 					onError: console.log(errorString)
 					onStatusChanged: if(status == MediaPlayer.Loaded) progress.updatePositionTexts()
+					onStopped: button.state = "stopped"
 				}
 
 				Connections {
diff --git a/src/AvatarProvider.cpp b/src/AvatarProvider.cpp
index c83ffe0f..68b6901e 100644
--- a/src/AvatarProvider.cpp
+++ b/src/AvatarProvider.cpp
@@ -67,8 +67,8 @@ resolve(const QString &avatarUrl, int size, QObject *receiver, AvatarCallback ca
                          });
 
         mtx::http::ThumbOpts opts;
-        opts.width   = 256;
-        opts.height  = 256;
+        opts.width   = size;
+        opts.height  = size;
         opts.mxc_url = avatarUrl.toStdString();
 
         http::client()->get_thumbnail(
diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp
index 305439fc..86dbcabc 100644
--- a/src/MxcImageProvider.cpp
+++ b/src/MxcImageProvider.cpp
@@ -38,7 +38,8 @@ MxcImageResponse::run()
                           auto data = QByteArray(res.data(), res.size());
                           cache::client()->saveImage(fileName, data);
                           m_image.loadFromData(data);
-                          m_image = m_image.scaled(m_requestedSize, Qt::KeepAspectRatio);
+                          m_image = m_image.scaled(
+                            m_requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
                           m_image.setText("mxc url", "mxc://" + m_id);
 
                           emit finished();
diff --git a/src/timeline2/TimelineModel.cpp b/src/timeline2/TimelineModel.cpp
index b3ddf899..27bd09b6 100644
--- a/src/timeline2/TimelineModel.cpp
+++ b/src/timeline2/TimelineModel.cpp
@@ -108,6 +108,21 @@ eventUrl(const mtx::events::RoomEvent<T> &e)
 
 template<class T>
 QString
+eventThumbnailUrl(const mtx::events::Event<T> &)
+{
+        return "";
+}
+template<class T>
+auto
+eventThumbnailUrl(const mtx::events::RoomEvent<T> &e)
+  -> std::enable_if_t<std::is_same<decltype(e.content.info.thumbnail_url), std::string>::value,
+                      QString>
+{
+        return QString::fromStdString(e.content.info.thumbnail_url);
+}
+
+template<class T>
+QString
 eventFilename(const mtx::events::Event<T> &)
 {
         return "";
@@ -355,6 +370,7 @@ TimelineModel::roleNames() const
           {UserName, "userName"},
           {Timestamp, "timestamp"},
           {Url, "url"},
+          {ThumbnailUrl, "thumbnailUrl"},
           {Filename, "filename"},
           {Filesize, "filesize"},
           {MimeType, "mimetype"},
@@ -436,6 +452,9 @@ TimelineModel::data(const QModelIndex &index, int role) const
         case Url:
                 return QVariant(boost::apply_visitor(
                   [](const auto &e) -> QString { return eventUrl(e); }, event));
+        case ThumbnailUrl:
+                return QVariant(boost::apply_visitor(
+                  [](const auto &e) -> QString { return eventThumbnailUrl(e); }, event));
         case Filename:
                 return QVariant(boost::apply_visitor(
                   [](const auto &e) -> QString { return eventFilename(e); }, event));
diff --git a/src/timeline2/TimelineModel.h b/src/timeline2/TimelineModel.h
index 35ec325d..b7ff546b 100644
--- a/src/timeline2/TimelineModel.h
+++ b/src/timeline2/TimelineModel.h
@@ -129,6 +129,7 @@ public:
                 UserName,
                 Timestamp,
                 Url,
+                ThumbnailUrl,
                 Filename,
                 Filesize,
                 MimeType,