79 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.1 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 PreparedFile &file,
 | 
						|
	AttachControls::Type type)
 | 
						|
: AbstractSingleFilePreview(parent, 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(preview.size()
 | 
						|
			/ preview.devicePixelRatio());
 | 
						|
		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
 |