forked from mirror/nheko
parent
5573548fb1
commit
f4f78b1d8a
@ -0,0 +1,58 @@ |
|||||||
|
/*
|
||||||
|
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||||
|
* |
||||||
|
* This program is free software: you can redistribute it and/or modify |
||||||
|
* it under the terms of the GNU General Public License as published by |
||||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <QEvent> |
||||||
|
#include <QLabel> |
||||||
|
#include <QSharedPointer> |
||||||
|
#include <QWidget> |
||||||
|
|
||||||
|
#include "MatrixClient.h" |
||||||
|
#include "MessageEvent.h" |
||||||
|
#include "Video.h" |
||||||
|
|
||||||
|
namespace events = matrix::events; |
||||||
|
namespace msgs = matrix::events::messages; |
||||||
|
|
||||||
|
class VideoItem : public QWidget |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
VideoItem(QSharedPointer<MatrixClient> client, |
||||||
|
const events::MessageEvent<msgs::Video> &event, |
||||||
|
QWidget *parent = nullptr); |
||||||
|
|
||||||
|
VideoItem(QSharedPointer<MatrixClient> client, |
||||||
|
const QString &url, |
||||||
|
const QString &filename, |
||||||
|
QWidget *parent = nullptr); |
||||||
|
|
||||||
|
private: |
||||||
|
void init(); |
||||||
|
QString calculateFileSize(int nbytes) const; |
||||||
|
|
||||||
|
QUrl url_; |
||||||
|
QString text_; |
||||||
|
QString readableFileSize_; |
||||||
|
|
||||||
|
QLabel *label_; |
||||||
|
|
||||||
|
events::MessageEvent<msgs::Video> event_; |
||||||
|
QSharedPointer<MatrixClient> client_; |
||||||
|
}; |
@ -0,0 +1,95 @@ |
|||||||
|
/*
|
||||||
|
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||||
|
* |
||||||
|
* This program is free software: you can redistribute it and/or modify |
||||||
|
* it under the terms of the GNU General Public License as published by |
||||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#include <QDebug> |
||||||
|
#include <QLabel> |
||||||
|
#include <QVBoxLayout> |
||||||
|
|
||||||
|
#include "timeline/widgets/VideoItem.h" |
||||||
|
|
||||||
|
namespace events = matrix::events; |
||||||
|
namespace msgs = matrix::events::messages; |
||||||
|
|
||||||
|
void |
||||||
|
VideoItem::init() |
||||||
|
{ |
||||||
|
QList<QString> url_parts = url_.toString().split("mxc://"); |
||||||
|
if (url_parts.size() != 2) { |
||||||
|
qDebug() << "Invalid format for image" << url_.toString(); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
QString media_params = url_parts[1]; |
||||||
|
url_ = QString("%1/_matrix/media/r0/download/%2") |
||||||
|
.arg(client_.data()->getHomeServer().toString(), media_params); |
||||||
|
} |
||||||
|
|
||||||
|
VideoItem::VideoItem(QSharedPointer<MatrixClient> client, |
||||||
|
const events::MessageEvent<msgs::Video> &event, |
||||||
|
QWidget *parent) |
||||||
|
: QWidget(parent) |
||||||
|
, url_{event.msgContent().url()} |
||||||
|
, text_{event.content().body()} |
||||||
|
, event_{event} |
||||||
|
, client_{client} |
||||||
|
{ |
||||||
|
readableFileSize_ = calculateFileSize(event.msgContent().info().size); |
||||||
|
|
||||||
|
init(); |
||||||
|
|
||||||
|
auto layout = new QVBoxLayout(this); |
||||||
|
layout->setMargin(0); |
||||||
|
layout->setSpacing(0); |
||||||
|
|
||||||
|
QString link = QString("Video - <a href=%1>%2</a>").arg(url_.toString()).arg(text_); |
||||||
|
|
||||||
|
label_ = new QLabel(link, this); |
||||||
|
label_->setMargin(0); |
||||||
|
label_->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextBrowserInteraction); |
||||||
|
label_->setOpenExternalLinks(true); |
||||||
|
|
||||||
|
layout->addWidget(label_); |
||||||
|
} |
||||||
|
|
||||||
|
VideoItem::VideoItem(QSharedPointer<MatrixClient> client, |
||||||
|
const QString &url, |
||||||
|
const QString &filename, |
||||||
|
QWidget *parent) |
||||||
|
: QWidget(parent) |
||||||
|
, url_{url} |
||||||
|
, text_{QFileInfo(filename).fileName()} |
||||||
|
, client_{client} |
||||||
|
{ |
||||||
|
readableFileSize_ = calculateFileSize(QFileInfo(filename).size()); |
||||||
|
|
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
QString |
||||||
|
VideoItem::calculateFileSize(int nbytes) const |
||||||
|
{ |
||||||
|
if (nbytes == 0) |
||||||
|
return QString(""); |
||||||
|
|
||||||
|
if (nbytes < 1024) |
||||||
|
return QString("%1 B").arg(nbytes); |
||||||
|
|
||||||
|
if (nbytes < 1024 * 1024) |
||||||
|
return QString("%1 KB").arg(nbytes / 1024); |
||||||
|
|
||||||
|
return QString("%1 MB").arg(nbytes / 1024 / 1024); |
||||||
|
} |
Loading…
Reference in new issue