AyuGramDesktop/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.cpp
2023-07-20 07:20:08 +04:00

79 lines
2.2 KiB
C++

/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "ui/chat/attach/attach_single_file_preview.h"
#include "ui/chat/attach/attach_prepare.h"
#include "ui/text/format_song_name.h"
#include "ui/text/format_values.h"
#include "core/mime_type.h"
#include "styles/style_chat.h"
#include <QtCore/QFileInfo>
namespace Ui {
SingleFilePreview::SingleFilePreview(
QWidget *parent,
const style::ComposeControls &st,
const PreparedFile &file,
AttachControls::Type type)
: AbstractSingleFilePreview(parent, st, type) {
preparePreview(file);
}
void SingleFilePreview::preparePreview(const PreparedFile &file) {
AbstractSingleFilePreview::Data data;
auto preview = QImage();
if (const auto image = std::get_if<PreparedFileInformation::Image>(
&file.information->media)) {
preview = image->data;
} else if (const auto video = std::get_if<PreparedFileInformation::Video>(
&file.information->media)) {
preview = video->thumbnail;
}
prepareThumbFor(data, preview);
const auto filepath = file.path;
if (filepath.isEmpty()) {
auto filename = "image.png";
data.name = filename;
data.statusText = FormatImageSizeText(file.originalDimensions);
data.fileIsImage = true;
} else {
auto fileinfo = QFileInfo(filepath);
auto filename = fileinfo.fileName();
data.fileIsImage = Core::FileIsImage(
filename,
Core::MimeTypeForFile(fileinfo).name());
auto songTitle = QString();
auto songPerformer = QString();
if (file.information) {
if (const auto song = std::get_if<PreparedFileInformation::Song>(
&file.information->media)) {
songTitle = song->title;
songPerformer = song->performer;
data.fileIsAudio = true;
if (auto cover = song->cover; !cover.isNull()) {
data.fileThumb = Ui::PrepareSongCoverForThumbnail(
cover,
st::attachPreviewLayout.thumbSize);
}
}
}
data.name = Text::FormatSongName(filename, songTitle, songPerformer)
.string();
data.statusText = FormatSizeText(fileinfo.size());
}
setData(data);
}
} // namespace Ui