Refactored edit_caption_box.

This commit is contained in:
23rd 2019-03-27 00:14:51 +03:00 committed by John Preston
parent 25177d9022
commit d5a2daa8c9
3 changed files with 61 additions and 85 deletions

View File

@ -1257,6 +1257,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_duration_played" = "{played} / {duration}"; "lng_duration_played" = "{played} / {duration}";
"lng_date_and_duration" = "{date}, {duration}"; "lng_date_and_duration" = "{date}, {duration}";
"lng_choose_image" = "Choose an image"; "lng_choose_image" = "Choose an image";
"lng_choose_file" = "Choose a file";
"lng_choose_files" = "Choose files"; "lng_choose_files" = "Choose files";
"lng_game_tag" = "Game"; "lng_game_tag" = "Game";

View File

@ -7,38 +7,34 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "boxes/edit_caption_box.h" #include "boxes/edit_caption_box.h"
#include "ui/widgets/input_fields.h" #include "apiwrap.h"
#include "ui/image/image.h" #include "auth_session.h"
#include "ui/text_options.h" #include "chat_helpers/emoji_suggestions_widget.h"
#include "ui/special_buttons.h"
#include "media/clip/media_clip_reader.h"
#include "history/history.h"
#include "history/history_item.h"
#include "data/data_media_types.h"
#include "data/data_photo.h"
#include "data/data_document.h"
#include "data/data_user.h"
#include "lang/lang_keys.h"
#include "core/event_filter.h"
#include "chat_helpers/message_field.h" #include "chat_helpers/message_field.h"
#include "chat_helpers/tabbed_panel.h" #include "chat_helpers/tabbed_panel.h"
#include "chat_helpers/tabbed_selector.h" #include "chat_helpers/tabbed_selector.h"
#include "chat_helpers/emoji_suggestions_widget.h" #include "core/event_filter.h"
#include "window/window_controller.h"
#include "layout.h"
#include "auth_session.h"
#include "apiwrap.h"
#include "styles/style_history.h"
#include "styles/style_boxes.h"
#include "styles/style_chat_helpers.h"
#include "storage/storage_media_prepare.h"
#include "core/application.h"
#include "mainwidget.h"
#include "core/file_utilities.h" #include "core/file_utilities.h"
#include "core/mime_type.h" #include "core/mime_type.h"
#include "data/data_document.h"
#include "data/data_media_types.h"
#include "data/data_photo.h"
#include "data/data_user.h"
#include "history/history.h"
#include "history/history_item.h"
#include "lang/lang_keys.h"
#include "layout.h"
#include "mainwidget.h"
#include "media/clip/media_clip_reader.h"
#include "storage/storage_media_prepare.h"
#include "styles/style_boxes.h"
#include "styles/style_chat_helpers.h"
#include "styles/style_history.h"
#include "ui/image/image.h"
#include "ui/special_buttons.h"
#include "ui/text_options.h"
#include "ui/widgets/input_fields.h"
#include "window/window_controller.h"
EditCaptionBox::EditCaptionBox( EditCaptionBox::EditCaptionBox(
QWidget*, QWidget*,
@ -112,14 +108,7 @@ EditCaptionBox::EditCaptionBox(
const auto nameString = doc->isVoiceMessage() const auto nameString = doc->isVoiceMessage()
? lang(lng_media_audio) ? lang(lng_media_audio)
: doc->composeNameString(); : doc->composeNameString();
_name.setText( setName(nameString, doc->size);
st::semiboldTextStyle,
nameString,
Ui::NameTextOptions());
_status = formatSizeText(doc->size);
_statusw = std::max(
_name.maxWidth(),
st::normalFont->width(_status));
_isImage = doc->isImage(); _isImage = doc->isImage();
_isAudio = (doc->isVoiceMessage() || doc->isAudioFile()); _isAudio = (doc->isVoiceMessage() || doc->isAudioFile());
} }
@ -326,57 +315,39 @@ void EditCaptionBox::prepare() {
const auto filePath = result.paths.front(); const auto filePath = result.paths.front();
LOG(("FILE PATH: %1").arg(filePath)); LOG(("FILE PATH: %1").arg(filePath));
_newMediaPath = filePath; _newMediaPath = filePath;
const auto preparedFile = Storage::PrepareMediaList( _preparedList = Storage::PrepareMediaList(
QStringList(_newMediaPath), QStringList(_newMediaPath),
st::sendMediaPreviewSize); st::sendMediaPreviewSize);
const auto file = &preparedFile.files.front(); const auto file = &_preparedList.files.front();
const auto fileMedia = &file->information->media; const auto fileMedia = &file->information->media;
const auto fileinfo = QFileInfo(_newMediaPath); const auto fileinfo = QFileInfo(_newMediaPath);
const auto filename = fileinfo.fileName(); const auto filename = fileinfo.fileName();
_isImage = fileIsImage(filename, Core::MimeTypeForFile(fileinfo).name()); _isImage = fileIsImage(filename, Core::MimeTypeForFile(fileinfo).name());
_isAudio = false; _isAudio = false;
_animated = false; _animated = false;
_photo = false; _photo = false;
_doc = false; _doc = false;
if (const auto image = base::get_if<FileMediaInformation::Image>( using Info = FileMediaInformation;
fileMedia) if (const auto image = base::get_if<Info::Image>(fileMedia)
&& _isImage) { && _isImage) {
_photo = true; _photo = true;
} else if (const auto video = base::get_if<FileMediaInformation::Video>( } else if (const auto video =
fileMedia)) { base::get_if<Info::Video>(fileMedia)) {
_animated = true; _animated = true;
} else if (const auto song = base::get_if<FileMediaInformation::Song>(
fileMedia)) {
const auto nameString = DocumentData::ComposeNameString(
filename,
song->title,
song->performer);
_name.setText(
st::semiboldTextStyle,
nameString,
Ui::NameTextOptions());
_status = formatSizeText(fileinfo.size());
_statusw = std::max(
_name.maxWidth(),
st::normalFont->width(_status));
_doc = true;
_isAudio = true;
} else { } else {
_name.setText( auto nameString = filename;
st::semiboldTextStyle, if (const auto song =
filename, base::get_if<Info::Song>(fileMedia)) {
Ui::NameTextOptions()); nameString = DocumentData::ComposeNameString(
_status = formatSizeText(fileinfo.size()); filename,
_statusw = std::max( song->title,
_name.maxWidth(), song->performer);
st::normalFont->width(_status)); _isAudio = true;
}
setName(nameString, fileinfo.size());
_doc = true; _doc = true;
} }
@ -393,18 +364,14 @@ void EditCaptionBox::prepare() {
_thumbh = _thumb.height(); _thumbh = _thumb.height();
_thumbx = (st::boxWideWidth - _thumbw) / 2; _thumbx = (st::boxWideWidth - _thumbw) / 2;
} }
captionResized(); captionResized();
} }
}; };
auto filters = QStringList(qsl("Any File (*.*)")); const auto filters = QStringList(FileDialog::AllFilesFilter());
filters.push_back(FileDialog::AllFilesFilter());
FileDialog::GetOpenPath( FileDialog::GetOpenPath(
this, this,
lang(lng_choose_image), lang(lng_choose_file),
filters.join(qsl(";;")), filters.join(qsl(";;")),
crl::guard(this, callback)); crl::guard(this, callback));
}); });
@ -632,17 +599,9 @@ void EditCaptionBox::save() {
}; };
item->setText(sending); item->setText(sending);
static const auto extensions = {
qstr(".jpg"),
qstr(".png"),
};
const auto isPhoto = std::find_if(std::begin(extensions), std::end(extensions), [=](auto &extension) {
return _newMediaPath.endsWith(extension, Qt::CaseInsensitive);
}) != std::end(extensions);
Auth().api().editMedia( Auth().api().editMedia(
Storage::PrepareMediaList(QStringList(_newMediaPath), st::sendMediaPreviewSize), std::move(_preparedList),
isPhoto ? SendMediaType::Photo : SendMediaType::File, _isImage ? SendMediaType::Photo : SendMediaType::File,
_field->getTextWithAppliedMarkdown(), _field->getTextWithAppliedMarkdown(),
ApiWrap::SendOptions(item->history())); ApiWrap::SendOptions(item->history()));
closeBox(); closeBox();
@ -687,3 +646,14 @@ bool EditCaptionBox::saveFail(const RPCError &error) {
update(); update();
return true; return true;
} }
void EditCaptionBox::setName(QString nameString, qint64 size) {
_name.setText(
st::semiboldTextStyle,
nameString,
Ui::NameTextOptions());
_status = formatSizeText(size);
_statusw = std::max(
_name.maxWidth(),
st::normalFont->width(_status));
}

View File

@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#pragma once #pragma once
#include "boxes/abstract_box.h" #include "boxes/abstract_box.h"
#include "storage/storage_media_prepare.h"
namespace ChatHelpers { namespace ChatHelpers {
class TabbedPanel; class TabbedPanel;
@ -59,6 +60,8 @@ private:
void saveDone(const MTPUpdates &updates); void saveDone(const MTPUpdates &updates);
bool saveFail(const RPCError &error); bool saveFail(const RPCError &error);
void setName(QString nameString, qint64 size);
int errorTopSkip() const; int errorTopSkip() const;
not_null<Window::Controller*> _controller; not_null<Window::Controller*> _controller;
@ -91,6 +94,8 @@ private:
int _gifh = 0; int _gifh = 0;
int _gifx = 0; int _gifx = 0;
Storage::PreparedList _preparedList;
bool _previewCancelled = false; bool _previewCancelled = false;
mtpRequestId _saveRequestId = 0; mtpRequestId _saveRequestId = 0;