attach_single_file_preview.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #include "ui/chat/attach/attach_single_file_preview.h"
  8. #include "ui/chat/attach/attach_prepare.h"
  9. #include "ui/text/format_song_name.h"
  10. #include "ui/text/format_values.h"
  11. #include "ui/ui_utility.h"
  12. #include "core/mime_type.h"
  13. #include "styles/style_chat.h"
  14. #include <QtCore/QFileInfo>
  15. namespace Ui {
  16. SingleFilePreview::SingleFilePreview(
  17. QWidget *parent,
  18. const style::ComposeControls &st,
  19. const PreparedFile &file,
  20. AttachControls::Type type)
  21. : AbstractSingleFilePreview(parent, st, type) {
  22. preparePreview(file);
  23. }
  24. void SingleFilePreview::preparePreview(const PreparedFile &file) {
  25. AbstractSingleFilePreview::Data data;
  26. auto preview = QImage();
  27. if (const auto image = std::get_if<PreparedFileInformation::Image>(
  28. &file.information->media)) {
  29. preview = image->data;
  30. } else if (const auto video = std::get_if<PreparedFileInformation::Video>(
  31. &file.information->media)) {
  32. preview = video->thumbnail;
  33. }
  34. prepareThumbFor(data, preview);
  35. const auto filepath = file.path;
  36. if (filepath.isEmpty()) {
  37. auto filename = "image.png";
  38. data.name = filename;
  39. data.statusText = FormatImageSizeText(file.originalDimensions);
  40. data.fileIsImage = true;
  41. } else {
  42. auto fileinfo = QFileInfo(filepath);
  43. auto filename = fileinfo.fileName();
  44. data.fileIsImage = Core::FileIsImage(
  45. filename,
  46. Core::MimeTypeForFile(fileinfo).name());
  47. auto songTitle = QString();
  48. auto songPerformer = QString();
  49. if (file.information) {
  50. if (const auto song = std::get_if<PreparedFileInformation::Song>(
  51. &file.information->media)) {
  52. songTitle = song->title;
  53. songPerformer = song->performer;
  54. data.fileIsAudio = true;
  55. if (auto cover = song->cover; !cover.isNull()) {
  56. data.fileThumb = Ui::PrepareSongCoverForThumbnail(
  57. cover,
  58. st::attachPreviewLayout.thumbSize);
  59. }
  60. }
  61. }
  62. data.name = Text::FormatSongName(filename, songTitle, songPerformer)
  63. .string();
  64. data.statusText = FormatSizeText(fileinfo.size());
  65. }
  66. setData(data);
  67. }
  68. } // namespace Ui