mirror of https://github.com/procxx/kepka.git
autoload settings box added, working for voice messages and gifs (photos TODO)
This commit is contained in:
parent
b94533fcb2
commit
7c7d517b34
|
@ -576,6 +576,13 @@ Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org
|
||||||
"lng_media_video" = "Video file";
|
"lng_media_video" = "Video file";
|
||||||
"lng_media_audio" = "Voice message";
|
"lng_media_audio" = "Voice message";
|
||||||
|
|
||||||
|
"lng_media_auto_settings" = "Automatic media download settings";
|
||||||
|
"lng_media_auto_photo" = "Automatic photo download";
|
||||||
|
"lng_media_auto_audio" = "Automatic audio download";
|
||||||
|
"lng_media_auto_gif" = "Automatic GIF download";
|
||||||
|
"lng_media_auto_private_chats" = "Private chats";
|
||||||
|
"lng_media_auto_groups" = "Groups and channels";
|
||||||
|
|
||||||
"lng_emoji_category0" = "Frequently used";
|
"lng_emoji_category0" = "Frequently used";
|
||||||
"lng_emoji_category1" = "People";
|
"lng_emoji_category1" = "People";
|
||||||
"lng_emoji_category2" = "Nature";
|
"lng_emoji_category2" = "Nature";
|
||||||
|
|
|
@ -27,17 +27,17 @@ Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org
|
||||||
#include "mainwidget.h"
|
#include "mainwidget.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
|
||||||
ConnectionBox::ConnectionBox() : AbstractBox(st::boxWidth),
|
ConnectionBox::ConnectionBox() : AbstractBox(st::boxWidth)
|
||||||
_hostInput(this, st::connectionHostInputField, lang(lng_connection_host_ph), cConnectionProxy().host),
|
, _hostInput(this, st::connectionHostInputField, lang(lng_connection_host_ph), cConnectionProxy().host)
|
||||||
_portInput(this, st::connectionPortInputField, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port)),
|
, _portInput(this, st::connectionPortInputField, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port))
|
||||||
_userInput(this, st::connectionUserInputField, lang(lng_connection_user_ph), cConnectionProxy().user),
|
, _userInput(this, st::connectionUserInputField, lang(lng_connection_user_ph), cConnectionProxy().user)
|
||||||
_passwordInput(this, st::connectionPasswordInputField, lang(lng_connection_password_ph), cConnectionProxy().password),
|
, _passwordInput(this, st::connectionPasswordInputField, lang(lng_connection_password_ph), cConnectionProxy().password)
|
||||||
_autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)),
|
, _autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto))
|
||||||
_httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)),
|
, _httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy))
|
||||||
_tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)),
|
, _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy))
|
||||||
_tryIPv6(this, lang(lng_connection_try_ipv6), cTryIPv6()),
|
, _tryIPv6(this, lang(lng_connection_try_ipv6), cTryIPv6())
|
||||||
_save(this, lang(lng_connection_save), st::defaultBoxButton),
|
, _save(this, lang(lng_connection_save), st::defaultBoxButton)
|
||||||
_cancel(this, lang(lng_cancel), st::cancelBoxButton) {
|
, _cancel(this, lang(lng_cancel), st::cancelBoxButton) {
|
||||||
|
|
||||||
connect(&_save, SIGNAL(clicked()), this, SLOT(onSave()));
|
connect(&_save, SIGNAL(clicked()), this, SLOT(onSave()));
|
||||||
connect(&_cancel, SIGNAL(clicked()), this, SLOT(onClose()));
|
connect(&_cancel, SIGNAL(clicked()), this, SLOT(onClose()));
|
||||||
|
@ -218,3 +218,79 @@ void ConnectionBox::onSave() {
|
||||||
emit closed();
|
emit closed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AutoDownloadBox::AutoDownloadBox() : AbstractBox(st::boxWidth)
|
||||||
|
, _photoPrivate(this, lang(lng_media_auto_private_chats), !(cAutoDownloadPhoto() & dbiadNoPrivate))
|
||||||
|
, _photoGroups(this, lang(lng_media_auto_groups), !(cAutoDownloadPhoto() & dbiadNoGroups))
|
||||||
|
, _audioPrivate(this, lang(lng_media_auto_private_chats), !(cAutoDownloadAudio() & dbiadNoPrivate))
|
||||||
|
, _audioGroups(this, lang(lng_media_auto_groups), !(cAutoDownloadAudio() & dbiadNoGroups))
|
||||||
|
, _gifPrivate(this, lang(lng_media_auto_private_chats), !(cAutoDownloadGif() & dbiadNoPrivate))
|
||||||
|
, _gifGroups(this, lang(lng_media_auto_groups), !(cAutoDownloadGif() & dbiadNoGroups))
|
||||||
|
, _sectionHeight(st::boxTitleHeight + 2 * (st::defaultCheckbox.height + st::setLittleSkip))
|
||||||
|
, _save(this, lang(lng_connection_save), st::defaultBoxButton)
|
||||||
|
, _cancel(this, lang(lng_cancel), st::cancelBoxButton) {
|
||||||
|
|
||||||
|
setMaxHeight(3 * _sectionHeight + st::boxButtonPadding.top() + _save.height() + st::boxButtonPadding.bottom());
|
||||||
|
|
||||||
|
connect(&_save, SIGNAL(clicked()), this, SLOT(onSave()));
|
||||||
|
connect(&_cancel, SIGNAL(clicked()), this, SLOT(onClose()));
|
||||||
|
|
||||||
|
prepare();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoDownloadBox::hideAll() {
|
||||||
|
_photoPrivate.hide();
|
||||||
|
_photoGroups.hide();
|
||||||
|
_audioPrivate.hide();
|
||||||
|
_audioGroups.hide();
|
||||||
|
_gifPrivate.hide();
|
||||||
|
_gifGroups.hide();
|
||||||
|
|
||||||
|
_save.hide();
|
||||||
|
_cancel.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoDownloadBox::showAll() {
|
||||||
|
_photoPrivate.show();
|
||||||
|
_photoGroups.show();
|
||||||
|
_audioPrivate.show();
|
||||||
|
_audioGroups.show();
|
||||||
|
_gifPrivate.show();
|
||||||
|
_gifGroups.show();
|
||||||
|
|
||||||
|
_save.show();
|
||||||
|
_cancel.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoDownloadBox::paintEvent(QPaintEvent *e) {
|
||||||
|
Painter p(this);
|
||||||
|
if (paint(p)) return;
|
||||||
|
|
||||||
|
p.setPen(st::black);
|
||||||
|
p.setFont(st::semiboldFont);
|
||||||
|
p.drawTextLeft(st::boxTitlePosition.x(), st::boxTitlePosition.y(), width(), lang(lng_media_auto_photo));
|
||||||
|
p.drawTextLeft(st::boxTitlePosition.x(), _sectionHeight + st::boxTitlePosition.y(), width(), lang(lng_media_auto_audio));
|
||||||
|
p.drawTextLeft(st::boxTitlePosition.x(), 2 * _sectionHeight + st::boxTitlePosition.y(), width(), lang(lng_media_auto_gif));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoDownloadBox::resizeEvent(QResizeEvent *e) {
|
||||||
|
_photoPrivate.moveToLeft(st::boxTitlePosition.x(), st::boxTitleHeight + st::setLittleSkip);
|
||||||
|
_photoGroups.moveToLeft(st::boxTitlePosition.x(), _photoPrivate.y() + _photoPrivate.height() + st::setLittleSkip);
|
||||||
|
|
||||||
|
_audioPrivate.moveToLeft(st::boxTitlePosition.x(), _sectionHeight + st::boxTitleHeight + st::setLittleSkip);
|
||||||
|
_audioGroups.moveToLeft(st::boxTitlePosition.x(), _audioPrivate.y() + _audioPrivate.height() + st::setLittleSkip);
|
||||||
|
|
||||||
|
_gifPrivate.moveToLeft(st::boxTitlePosition.x(), 2 * _sectionHeight + st::boxTitleHeight + st::setLittleSkip);
|
||||||
|
_gifGroups.moveToLeft(st::boxTitlePosition.x(), _gifPrivate.y() + _gifPrivate.height() + st::setLittleSkip);
|
||||||
|
|
||||||
|
_save.moveToRight(st::boxButtonPadding.right(), height() - st::boxButtonPadding.bottom() - _save.height());
|
||||||
|
_cancel.moveToRight(st::boxButtonPadding.right() + _save.width() + st::boxButtonPadding.left(), _save.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoDownloadBox::onSave() {
|
||||||
|
cSetAutoDownloadPhoto((_photoPrivate.checked() ? 0 : dbiadNoPrivate) | (_photoGroups.checked() ? 0 : dbiadNoGroups));
|
||||||
|
cSetAutoDownloadAudio((_audioPrivate.checked() ? 0 : dbiadNoPrivate) | (_audioGroups.checked() ? 0 : dbiadNoGroups));
|
||||||
|
cSetAutoDownloadGif((_gifPrivate.checked() ? 0 : dbiadNoPrivate) | (_gifGroups.checked() ? 0 : dbiadNoGroups));
|
||||||
|
Local::writeUserSettings();
|
||||||
|
onClose();
|
||||||
|
}
|
||||||
|
|
|
@ -54,3 +54,32 @@ private:
|
||||||
|
|
||||||
BoxButton _save, _cancel;
|
BoxButton _save, _cancel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AutoDownloadBox : public AbstractBox {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
AutoDownloadBox();
|
||||||
|
void paintEvent(QPaintEvent *e);
|
||||||
|
void resizeEvent(QResizeEvent *e);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
void onSave();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
void hideAll();
|
||||||
|
void showAll();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Checkbox _photoPrivate, _photoGroups;
|
||||||
|
Checkbox _audioPrivate, _audioGroups;
|
||||||
|
Checkbox _gifPrivate, _gifGroups;
|
||||||
|
|
||||||
|
int32 _sectionHeight;
|
||||||
|
|
||||||
|
BoxButton _save, _cancel;
|
||||||
|
};
|
||||||
|
|
|
@ -154,9 +154,8 @@ namespace Notify {
|
||||||
if (HistoryMedia *media = item->getMedia()) {
|
if (HistoryMedia *media = item->getMedia()) {
|
||||||
media->stopInline(item);
|
media->stopInline(item);
|
||||||
if (DocumentData *document = media->getDocument()) { // forget data from memory
|
if (DocumentData *document = media->getDocument()) { // forget data from memory
|
||||||
if (!document->data.isEmpty()) {
|
if (!document->data.isEmpty() && document->prepareAutoLoader(item)) {
|
||||||
document->data.clear();
|
document->data.clear();
|
||||||
document->prepareAutoLoader();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stopped = true;
|
stopped = true;
|
||||||
|
|
|
@ -3741,19 +3741,21 @@ ImagePtr HistoryVideo::replyPreview() {
|
||||||
|
|
||||||
HistoryAudio::HistoryAudio(const MTPDaudio &audio) : HistoryFileMedia()
|
HistoryAudio::HistoryAudio(const MTPDaudio &audio) : HistoryFileMedia()
|
||||||
, _data(App::feedAudio(audio)) {
|
, _data(App::feedAudio(audio)) {
|
||||||
setLinks(new AudioOpenLink(_data), new AudioSaveLink(_data), new AudioCancelLink(_data));
|
setLinks(new AudioOpenLink(_data), new AudioOpenLink(_data), new AudioCancelLink(_data));
|
||||||
|
|
||||||
setStatusSize(FileStatusSizeReady);
|
setStatusSize(FileStatusSizeReady);
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoryAudio::HistoryAudio(const HistoryAudio &other) : HistoryFileMedia()
|
HistoryAudio::HistoryAudio(const HistoryAudio &other) : HistoryFileMedia()
|
||||||
, _data(other._data) {
|
, _data(other._data) {
|
||||||
setLinks(new AudioOpenLink(_data), new AudioSaveLink(_data), new AudioCancelLink(_data));
|
setLinks(new AudioOpenLink(_data), new AudioOpenLink(_data), new AudioCancelLink(_data));
|
||||||
|
|
||||||
setStatusSize(other._statusSize);
|
setStatusSize(other._statusSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryAudio::initDimensions(const HistoryItem *parent) {
|
void HistoryAudio::initDimensions(const HistoryItem *parent) {
|
||||||
|
_data->prepareAutoLoader(parent);
|
||||||
|
|
||||||
_maxw = st::msgFileMinWidth;
|
_maxw = st::msgFileMinWidth;
|
||||||
|
|
||||||
int32 tleft = 0, tright = 0;
|
int32 tleft = 0, tright = 0;
|
||||||
|
@ -3974,6 +3976,8 @@ HistoryDocument::HistoryDocument(const HistoryDocument &other) : HistoryFileMedi
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryDocument::initDimensions(const HistoryItem *parent) {
|
void HistoryDocument::initDimensions(const HistoryItem *parent) {
|
||||||
|
_data->prepareAutoLoader(parent);
|
||||||
|
|
||||||
_maxw = st::msgFileMinWidth;
|
_maxw = st::msgFileMinWidth;
|
||||||
|
|
||||||
int32 tleft = 0, tright = 0;
|
int32 tleft = 0, tright = 0;
|
||||||
|
@ -4291,6 +4295,8 @@ HistoryGif::HistoryGif(const HistoryGif &other) : HistoryFileMedia()
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryGif::initDimensions(const HistoryItem *parent) {
|
void HistoryGif::initDimensions(const HistoryItem *parent) {
|
||||||
|
_data->prepareAutoLoader(parent);
|
||||||
|
|
||||||
bool bubble = parent->hasBubble();
|
bool bubble = parent->hasBubble();
|
||||||
int32 tw = 0, th = 0;
|
int32 tw = 0, th = 0;
|
||||||
if (_gif && _gif->state() == ClipError) {
|
if (_gif && _gif->state() == ClipError) {
|
||||||
|
@ -4614,6 +4620,8 @@ HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia()
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistorySticker::initDimensions(const HistoryItem *parent) {
|
void HistorySticker::initDimensions(const HistoryItem *parent) {
|
||||||
|
_data->prepareAutoLoader(parent);
|
||||||
|
|
||||||
_pixw = _data->dimensions.width();
|
_pixw = _data->dimensions.width();
|
||||||
_pixh = _data->dimensions.height();
|
_pixh = _data->dimensions.height();
|
||||||
if (_pixw > st::maxStickerSize) {
|
if (_pixw > st::maxStickerSize) {
|
||||||
|
|
|
@ -536,7 +536,9 @@ void LayoutOverviewVideo::updateStatusText() const {
|
||||||
|
|
||||||
LayoutOverviewAudio::LayoutOverviewAudio(AudioData *audio, HistoryItem *parent) : LayoutAbstractFileItem(parent)
|
LayoutOverviewAudio::LayoutOverviewAudio(AudioData *audio, HistoryItem *parent) : LayoutAbstractFileItem(parent)
|
||||||
, _data(audio) {
|
, _data(audio) {
|
||||||
setLinks(new AudioOpenLink(_data), new AudioSaveLink(_data), new AudioCancelLink(_data));
|
_data->prepareAutoLoader(_parent);
|
||||||
|
|
||||||
|
setLinks(new AudioOpenLink(_data), new AudioOpenLink(_data), new AudioCancelLink(_data));
|
||||||
updateName();
|
updateName();
|
||||||
QString d = textcmdLink(1, textRichPrepare(langDateTime(date(_data->date))));
|
QString d = textcmdLink(1, textRichPrepare(langDateTime(date(_data->date))));
|
||||||
TextParseOptions opts = { TextParseRichText, 0, 0, Qt::LayoutDirectionAuto };
|
TextParseOptions opts = { TextParseRichText, 0, 0, Qt::LayoutDirectionAuto };
|
||||||
|
@ -705,7 +707,7 @@ bool LayoutOverviewAudio::updateStatusText() const {
|
||||||
}
|
}
|
||||||
return showPause;
|
return showPause;
|
||||||
}
|
}
|
||||||
|
|
||||||
LayoutOverviewDocument::LayoutOverviewDocument(DocumentData *document, HistoryItem *parent) : LayoutAbstractFileItem(parent)
|
LayoutOverviewDocument::LayoutOverviewDocument(DocumentData *document, HistoryItem *parent) : LayoutAbstractFileItem(parent)
|
||||||
, _data(document)
|
, _data(document)
|
||||||
, _msgl(new MessageLink(parent))
|
, _msgl(new MessageLink(parent))
|
||||||
|
@ -715,6 +717,8 @@ LayoutOverviewDocument::LayoutOverviewDocument(DocumentData *document, HistoryIt
|
||||||
, _namew(st::semiboldFont->width(_name))
|
, _namew(st::semiboldFont->width(_name))
|
||||||
, _datew(st::normalFont->width(_date))
|
, _datew(st::normalFont->width(_date))
|
||||||
, _colorIndex(documentColorIndex(_data, _ext)) {
|
, _colorIndex(documentColorIndex(_data, _ext)) {
|
||||||
|
_data->prepareAutoLoader(_parent);
|
||||||
|
|
||||||
setLinks(new DocumentOpenLink(_data), new DocumentSaveLink(_data), new DocumentCancelLink(_data));
|
setLinks(new DocumentOpenLink(_data), new DocumentSaveLink(_data), new DocumentCancelLink(_data));
|
||||||
|
|
||||||
setStatusSize(FileStatusSizeReady, _data->size, _data->song() ? _data->song()->duration : -1, 0);
|
setStatusSize(FileStatusSizeReady, _data->size, _data->song() ? _data->song()->duration : -1, 0);
|
||||||
|
|
|
@ -329,6 +329,45 @@ namespace {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool fileExists(const QString &name, int options = UserPath | SafePath) {
|
||||||
|
if (options & UserPath) {
|
||||||
|
if (!_userWorking()) return false;
|
||||||
|
} else {
|
||||||
|
if (!_working()) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect order of read attempts
|
||||||
|
QString toTry[2];
|
||||||
|
toTry[0] = ((options & UserPath) ? _userBasePath : _basePath) + name + '0';
|
||||||
|
if (options & SafePath) {
|
||||||
|
QFileInfo toTry0(toTry[0]);
|
||||||
|
if (toTry0.exists()) {
|
||||||
|
toTry[1] = ((options & UserPath) ? _userBasePath : _basePath) + name + '1';
|
||||||
|
QFileInfo toTry1(toTry[1]);
|
||||||
|
if (toTry1.exists()) {
|
||||||
|
QDateTime mod0 = toTry0.lastModified(), mod1 = toTry1.lastModified();
|
||||||
|
if (mod0 < mod1) {
|
||||||
|
qSwap(toTry[0], toTry[1]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toTry[1] = QString();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toTry[0][toTry[0].size() - 1] = '1';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int32 i = 0; i < 2; ++i) {
|
||||||
|
QString fname(toTry[i]);
|
||||||
|
if (fname.isEmpty()) break;
|
||||||
|
if (QFileInfo(fname).exists()) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool fileExists(const FileKey &fkey, int options = UserPath | SafePath) {
|
||||||
|
return fileExists(toFilePart(fkey), options);
|
||||||
|
}
|
||||||
|
|
||||||
bool readFile(FileReadDescriptor &result, const QString &name, int options = UserPath | SafePath) {
|
bool readFile(FileReadDescriptor &result, const QString &name, int options = UserPath | SafePath) {
|
||||||
if (options & UserPath) {
|
if (options & UserPath) {
|
||||||
if (!_userWorking()) return false;
|
if (!_userWorking()) return false;
|
||||||
|
@ -824,6 +863,16 @@ namespace {
|
||||||
cSetSoundNotify(v == 1);
|
cSetSoundNotify(v == 1);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case dbiAutoDownload: {
|
||||||
|
qint32 photo, audio, gif;
|
||||||
|
stream >> photo >> audio >> gif;
|
||||||
|
if (!_checkStreamStatus(stream)) return false;
|
||||||
|
|
||||||
|
cSetAutoDownloadPhoto(photo);
|
||||||
|
cSetAutoDownloadAudio(audio);
|
||||||
|
cSetAutoDownloadGif(gif);
|
||||||
|
} break;
|
||||||
|
|
||||||
case dbiIncludeMuted: {
|
case dbiIncludeMuted: {
|
||||||
qint32 v;
|
qint32 v;
|
||||||
stream >> v;
|
stream >> v;
|
||||||
|
@ -1395,6 +1444,7 @@ namespace {
|
||||||
size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64));
|
size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64));
|
||||||
size += sizeof(quint32) + sizeof(qint32) + (cRecentStickersPreload().isEmpty() ? cGetRecentStickers().size() : cRecentStickersPreload().size()) * (sizeof(uint64) + sizeof(ushort));
|
size += sizeof(quint32) + sizeof(qint32) + (cRecentStickersPreload().isEmpty() ? cGetRecentStickers().size() : cRecentStickersPreload().size()) * (sizeof(uint64) + sizeof(ushort));
|
||||||
size += sizeof(quint32) + _stringSize(cDialogLastPath());
|
size += sizeof(quint32) + _stringSize(cDialogLastPath());
|
||||||
|
size += sizeof(quint32) + 3 * sizeof(qint32);
|
||||||
|
|
||||||
EncryptedDescriptor data(size);
|
EncryptedDescriptor data(size);
|
||||||
data.stream << quint32(dbiSendKey) << qint32(cCtrlEnter() ? dbiskCtrlEnter : dbiskEnter);
|
data.stream << quint32(dbiSendKey) << qint32(cCtrlEnter() ? dbiskCtrlEnter : dbiskEnter);
|
||||||
|
@ -1412,6 +1462,7 @@ namespace {
|
||||||
data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage());
|
data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage());
|
||||||
data.stream << quint32(dbiDialogLastPath) << cDialogLastPath();
|
data.stream << quint32(dbiDialogLastPath) << cDialogLastPath();
|
||||||
data.stream << quint32(dbiSongVolume) << qint32(qRound(cSongVolume() * 1e6));
|
data.stream << quint32(dbiSongVolume) << qint32(qRound(cSongVolume() * 1e6));
|
||||||
|
data.stream << quint32(dbiAutoDownload) << qint32(cAutoDownloadPhoto()) << qint32(cAutoDownloadAudio()) << qint32(cAutoDownloadGif());
|
||||||
|
|
||||||
{
|
{
|
||||||
RecentEmojisPreload v(cRecentEmojisPreload());
|
RecentEmojisPreload v(cRecentEmojisPreload());
|
||||||
|
@ -2418,8 +2469,11 @@ namespace Local {
|
||||||
return _localLoader->addTask(new ImageLoadTask(j->first, location, loader));
|
return _localLoader->addTask(new ImageLoadTask(j->first, location, loader));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool willImageLoad(const StorageKey &location) {
|
bool willImageLoad(const StorageKey &location, bool check) {
|
||||||
return (_imagesMap.constFind(location) != _imagesMap.cend());
|
StorageMap::const_iterator j = _imagesMap.constFind(location);
|
||||||
|
if (j == _imagesMap.cend()) return false;
|
||||||
|
if (check && !fileExists(j->first, UserPath)) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 hasImages() {
|
int32 hasImages() {
|
||||||
|
@ -2481,8 +2535,11 @@ namespace Local {
|
||||||
return _localLoader->addTask(new StickerImageLoadTask(j->first, location, loader));
|
return _localLoader->addTask(new StickerImageLoadTask(j->first, location, loader));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool willStickerImageLoad(const StorageKey &location) {
|
bool willStickerImageLoad(const StorageKey &location, bool check) {
|
||||||
return (_stickerImagesMap.constFind(location) != _stickerImagesMap.cend());
|
StorageMap::const_iterator j = _stickerImagesMap.constFind(location);
|
||||||
|
if (j == _stickerImagesMap.cend()) return false;
|
||||||
|
if (check && !fileExists(j->first, UserPath)) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 hasStickers() {
|
int32 hasStickers() {
|
||||||
|
@ -2544,8 +2601,11 @@ namespace Local {
|
||||||
return _localLoader->addTask(new AudioLoadTask(j->first, location, loader));
|
return _localLoader->addTask(new AudioLoadTask(j->first, location, loader));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool willAudioLoad(const StorageKey &location) {
|
bool willAudioLoad(const StorageKey &location, bool check) {
|
||||||
return (_audiosMap.constFind(location) != _audiosMap.cend());
|
StorageMap::const_iterator j = _audiosMap.constFind(location);
|
||||||
|
if (j == _audiosMap.cend()) return false;
|
||||||
|
if (check && !fileExists(j->first, UserPath)) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 hasAudios() {
|
int32 hasAudios() {
|
||||||
|
|
|
@ -124,19 +124,19 @@ namespace Local {
|
||||||
void writeImage(const StorageKey &location, const ImagePtr &img);
|
void writeImage(const StorageKey &location, const ImagePtr &img);
|
||||||
void writeImage(const StorageKey &location, const StorageImageSaved &jpeg, bool overwrite = true);
|
void writeImage(const StorageKey &location, const StorageImageSaved &jpeg, bool overwrite = true);
|
||||||
TaskId startImageLoad(const StorageKey &location, mtpFileLoader *loader);
|
TaskId startImageLoad(const StorageKey &location, mtpFileLoader *loader);
|
||||||
bool willImageLoad(const StorageKey &location);
|
bool willImageLoad(const StorageKey &location, bool check = false);
|
||||||
int32 hasImages();
|
int32 hasImages();
|
||||||
qint64 storageImagesSize();
|
qint64 storageImagesSize();
|
||||||
|
|
||||||
void writeStickerImage(const StorageKey &location, const QByteArray &data, bool overwrite = true);
|
void writeStickerImage(const StorageKey &location, const QByteArray &data, bool overwrite = true);
|
||||||
TaskId startStickerImageLoad(const StorageKey &location, mtpFileLoader *loader);
|
TaskId startStickerImageLoad(const StorageKey &location, mtpFileLoader *loader);
|
||||||
bool willStickerImageLoad(const StorageKey &location);
|
bool willStickerImageLoad(const StorageKey &location, bool check = false);
|
||||||
int32 hasStickers();
|
int32 hasStickers();
|
||||||
qint64 storageStickersSize();
|
qint64 storageStickersSize();
|
||||||
|
|
||||||
void writeAudio(const StorageKey &location, const QByteArray &data, bool overwrite = true);
|
void writeAudio(const StorageKey &location, const QByteArray &data, bool overwrite = true);
|
||||||
TaskId startAudioLoad(const StorageKey &location, mtpFileLoader *loader);
|
TaskId startAudioLoad(const StorageKey &location, mtpFileLoader *loader);
|
||||||
bool willAudioLoad(const StorageKey &location);
|
bool willAudioLoad(const StorageKey &location, bool check = false);
|
||||||
int32 hasAudios();
|
int32 hasAudios();
|
||||||
qint64 storageAudiosSize();
|
qint64 storageAudiosSize();
|
||||||
|
|
||||||
|
|
|
@ -615,15 +615,10 @@ void MediaView::onSaveAs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MediaView::onDocClick() {
|
void MediaView::onDocClick() {
|
||||||
QString fname = _doc->already(true);
|
if (_doc->loader && _doc->loader->started()) {
|
||||||
if (fname.isEmpty()) {
|
onSaveCancel();
|
||||||
if (_doc->loader) {
|
|
||||||
onSaveCancel();
|
|
||||||
} else {
|
|
||||||
onDownload();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
psOpenFile(fname);
|
DocumentOpenLink::doOpen(_doc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1585,9 +1580,8 @@ void MediaView::preloadData(int32 delta) {
|
||||||
case MediaTypeSticker:
|
case MediaTypeSticker:
|
||||||
DocumentData *doc = media->getDocument();
|
DocumentData *doc = media->getDocument();
|
||||||
doc->forget();
|
doc->forget();
|
||||||
if (!doc->data.isEmpty()) {
|
if (!doc->data.isEmpty() && doc->prepareAutoLoader(item)) {
|
||||||
doc->data.clear();
|
doc->data.clear();
|
||||||
doc->prepareAutoLoader();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,6 +171,10 @@ SavedPeersByTime gSavedPeersByTime;
|
||||||
|
|
||||||
ReportSpamStatuses gReportSpamStatuses;
|
ReportSpamStatuses gReportSpamStatuses;
|
||||||
|
|
||||||
|
int32 gAutoDownloadPhoto = 0; // all auto download
|
||||||
|
int32 gAutoDownloadAudio = 0;
|
||||||
|
int32 gAutoDownloadGif = 0;
|
||||||
|
|
||||||
void settingsParseArgs(int argc, char *argv[]) {
|
void settingsParseArgs(int argc, char *argv[]) {
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
gIsElCapitan = (QSysInfo::macVersion() >= QSysInfo::MV_10_11);
|
gIsElCapitan = (QSysInfo::macVersion() >= QSysInfo::MV_10_11);
|
||||||
|
|
|
@ -327,4 +327,13 @@ DeclareRefSetting(SavedPeersByTime, SavedPeersByTime);
|
||||||
typedef QMap<uint64, DBIPeerReportSpamStatus> ReportSpamStatuses;
|
typedef QMap<uint64, DBIPeerReportSpamStatus> ReportSpamStatuses;
|
||||||
DeclareRefSetting(ReportSpamStatuses, ReportSpamStatuses);
|
DeclareRefSetting(ReportSpamStatuses, ReportSpamStatuses);
|
||||||
|
|
||||||
|
enum DBIAutoDownloadFlags {
|
||||||
|
dbiadNoPrivate = 0x01,
|
||||||
|
dbiadNoGroups = 0x02,
|
||||||
|
};
|
||||||
|
|
||||||
|
DeclareSetting(int32, AutoDownloadPhoto);
|
||||||
|
DeclareSetting(int32, AutoDownloadAudio);
|
||||||
|
DeclareSetting(int32, AutoDownloadGif);
|
||||||
|
|
||||||
void settingsParseArgs(int argc, char *argv[]);
|
void settingsParseArgs(int argc, char *argv[]);
|
||||||
|
|
|
@ -168,12 +168,14 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : TWidget(parent)
|
||||||
|
|
||||||
, _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath())
|
, _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath())
|
||||||
, _downloadPathWidth(st::linkFont->width(lang(lng_download_path_label)) + st::linkFont->spacew)
|
, _downloadPathWidth(st::linkFont->width(lang(lng_download_path_label)) + st::linkFont->spacew)
|
||||||
, _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_default) : ((cDownloadPath() == qsl("tmp")) ? lang(lng_download_path_temp) : st::linkFont->elided(QDir::toNativeSeparators(cDownloadPath()), st::setWidth - st::setVersionLeft - _downloadPathWidth)))
|
, _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_default) : ((cDownloadPath() == qsl("tmp")) ? lang(lng_download_path_temp) : st::linkFont->elided(QDir::toNativeSeparators(cDownloadPath()), st::setWidth - st::cbDefFlat.textLeft - _downloadPathWidth)))
|
||||||
, _downloadPathClear(this, lang(lng_download_path_clear))
|
, _downloadPathClear(this, lang(lng_download_path_clear))
|
||||||
, _tempDirClearingWidth(st::linkFont->width(lang(lng_download_path_clearing)))
|
, _tempDirClearingWidth(st::linkFont->width(lang(lng_download_path_clearing)))
|
||||||
, _tempDirClearedWidth(st::linkFont->width(lang(lng_download_path_cleared)))
|
, _tempDirClearedWidth(st::linkFont->width(lang(lng_download_path_cleared)))
|
||||||
, _tempDirClearFailedWidth(st::linkFont->width(lang(lng_download_path_clear_failed)))
|
, _tempDirClearFailedWidth(st::linkFont->width(lang(lng_download_path_clear_failed)))
|
||||||
|
|
||||||
|
, _autoDownload(this, lang(lng_media_auto_settings))
|
||||||
|
|
||||||
// chat background
|
// chat background
|
||||||
, _backFromGallery(this, lang(lng_settings_bg_from_gallery))
|
, _backFromGallery(this, lang(lng_settings_bg_from_gallery))
|
||||||
, _backFromFile(this, lang(lng_settings_bg_from_file))
|
, _backFromFile(this, lang(lng_settings_bg_from_file))
|
||||||
|
@ -290,6 +292,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : TWidget(parent)
|
||||||
}
|
}
|
||||||
connect(App::wnd(), SIGNAL(tempDirCleared(int)), this, SLOT(onTempDirCleared(int)));
|
connect(App::wnd(), SIGNAL(tempDirCleared(int)), this, SLOT(onTempDirCleared(int)));
|
||||||
connect(App::wnd(), SIGNAL(tempDirClearFailed(int)), this, SLOT(onTempDirClearFailed(int)));
|
connect(App::wnd(), SIGNAL(tempDirClearFailed(int)), this, SLOT(onTempDirClearFailed(int)));
|
||||||
|
connect(&_autoDownload, SIGNAL(clicked()), this, SLOT(onAutoDownload()));
|
||||||
|
|
||||||
// chat background
|
// chat background
|
||||||
if (!cChatBackground()) App::initBackground();
|
if (!cChatBackground()) App::initBackground();
|
||||||
|
@ -471,8 +474,8 @@ void SettingsInner::paintEvent(QPaintEvent *e) {
|
||||||
} else {
|
} else {
|
||||||
textToDraw = _curVersionText;
|
textToDraw = _curVersionText;
|
||||||
}
|
}
|
||||||
p.setFont(st::linkFont->f);
|
p.setFont(st::linkFont);
|
||||||
p.setPen(st::setVersionColor->p);
|
p.setPen(st::setVersionColor);
|
||||||
p.drawText(_left + st::setVersionLeft, top + st::setVersionTop + st::linkFont->ascent, textToDraw);
|
p.drawText(_left + st::setVersionLeft, top + st::setVersionTop + st::linkFont->ascent, textToDraw);
|
||||||
top += st::setVersionHeight;
|
top += st::setVersionHeight;
|
||||||
#endif
|
#endif
|
||||||
|
@ -532,7 +535,7 @@ void SettingsInner::paintEvent(QPaintEvent *e) {
|
||||||
top += st::setLittleSkip;
|
top += st::setLittleSkip;
|
||||||
p.setFont(st::linkFont->f);
|
p.setFont(st::linkFont->f);
|
||||||
p.setPen(st::black->p);
|
p.setPen(st::black->p);
|
||||||
p.drawText(_left + st::setVersionLeft, top + st::linkFont->ascent, lang(lng_download_path_label));
|
p.drawText(_left + st::cbDefFlat.textLeft, top + st::linkFont->ascent, lang(lng_download_path_label));
|
||||||
if (cDownloadPath() == qsl("tmp")) {
|
if (cDownloadPath() == qsl("tmp")) {
|
||||||
QString clearText;
|
QString clearText;
|
||||||
int32 clearWidth = 0;
|
int32 clearWidth = 0;
|
||||||
|
@ -547,7 +550,8 @@ void SettingsInner::paintEvent(QPaintEvent *e) {
|
||||||
}
|
}
|
||||||
top += _downloadPathEdit.height();
|
top += _downloadPathEdit.height();
|
||||||
}
|
}
|
||||||
top += st::setSectionSkip;
|
top += st::setLittleSkip;
|
||||||
|
top += _autoDownload.height();
|
||||||
|
|
||||||
// chat background
|
// chat background
|
||||||
p.setFont(st::setHeaderFont->f);
|
p.setFont(st::setHeaderFont->f);
|
||||||
|
@ -721,13 +725,14 @@ void SettingsInner::resizeEvent(QResizeEvent *e) {
|
||||||
_dontAskDownloadPath.move(_left, top); top += _dontAskDownloadPath.height();
|
_dontAskDownloadPath.move(_left, top); top += _dontAskDownloadPath.height();
|
||||||
if (!cAskDownloadPath()) {
|
if (!cAskDownloadPath()) {
|
||||||
top += st::setLittleSkip;
|
top += st::setLittleSkip;
|
||||||
_downloadPathEdit.move(_left + st::setVersionLeft + _downloadPathWidth, top);
|
_downloadPathEdit.move(_left + st::cbDefFlat.textLeft + _downloadPathWidth, top);
|
||||||
if (cDownloadPath() == qsl("tmp")) {
|
if (cDownloadPath() == qsl("tmp")) {
|
||||||
_downloadPathClear.move(_left + st::setWidth - _downloadPathClear.width(), top);
|
_downloadPathClear.move(_left + st::setWidth - _downloadPathClear.width(), top);
|
||||||
}
|
}
|
||||||
top += _downloadPathEdit.height();
|
top += _downloadPathEdit.height();
|
||||||
}
|
}
|
||||||
top += st::setSectionSkip;
|
top += st::setLittleSkip;
|
||||||
|
_autoDownload.move(_left + st::cbDefFlat.textLeft, top); top += _autoDownload.height();
|
||||||
|
|
||||||
// chat background
|
// chat background
|
||||||
top += st::setHeaderSkip;
|
top += st::setHeaderSkip;
|
||||||
|
@ -1061,7 +1066,7 @@ void SettingsInner::showAll() {
|
||||||
_downloadPathClear.hide();
|
_downloadPathClear.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_autoDownload.show();
|
||||||
} else {
|
} else {
|
||||||
_replaceEmojis.hide();
|
_replaceEmojis.hide();
|
||||||
_viewEmojis.hide();
|
_viewEmojis.hide();
|
||||||
|
@ -1071,6 +1076,7 @@ void SettingsInner::showAll() {
|
||||||
_dontAskDownloadPath.hide();
|
_dontAskDownloadPath.hide();
|
||||||
_downloadPathEdit.hide();
|
_downloadPathEdit.hide();
|
||||||
_downloadPathClear.hide();
|
_downloadPathClear.hide();
|
||||||
|
_autoDownload.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
// chat background
|
// chat background
|
||||||
|
@ -1689,6 +1695,10 @@ void SettingsInner::onTempDirClearFailed(int task) {
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsInner::onAutoDownload() {
|
||||||
|
Ui::showLayer(new AutoDownloadBox());
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
||||||
void SettingsInner::setUpdatingState(UpdatingState state, bool force) {
|
void SettingsInner::setUpdatingState(UpdatingState state, bool force) {
|
||||||
if (_updatingState != state || force) {
|
if (_updatingState != state || force) {
|
||||||
|
|
|
@ -151,6 +151,8 @@ public slots:
|
||||||
void onTempDirCleared(int task);
|
void onTempDirCleared(int task);
|
||||||
void onTempDirClearFailed(int task);
|
void onTempDirClearFailed(int task);
|
||||||
|
|
||||||
|
void onAutoDownload();
|
||||||
|
|
||||||
void onBackFromGallery();
|
void onBackFromGallery();
|
||||||
void onBackFromFile();
|
void onBackFromFile();
|
||||||
void onTileBackground();
|
void onTileBackground();
|
||||||
|
@ -258,6 +260,7 @@ private:
|
||||||
TempDirCleared = 4,
|
TempDirCleared = 4,
|
||||||
};
|
};
|
||||||
TempDirClearState _tempDirClearState;
|
TempDirClearState _tempDirClearState;
|
||||||
|
LinkButton _autoDownload;
|
||||||
|
|
||||||
// chat background
|
// chat background
|
||||||
QPixmap _background;
|
QPixmap _background;
|
||||||
|
|
|
@ -775,10 +775,14 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const {
|
||||||
|
|
||||||
if (data->status != FileReady) return;
|
if (data->status != FileReady) return;
|
||||||
|
|
||||||
if (data->loader && !data->loader->started()) {
|
if (data->prepareAutoLoader(App::hoveredLinkItem(), true)) {
|
||||||
data->openOnSave = 1;
|
data->openOnSave = 1;
|
||||||
data->openOnSaveMsgId = App::hoveredLinkItem() ? App::hoveredLinkItem()->fullId() : (App::contextItem() ? App::contextItem()->fullId() : FullMsgId());
|
data->openOnSaveMsgId = App::hoveredLinkItem() ? App::hoveredLinkItem()->fullId() : (App::contextItem() ? App::contextItem()->fullId() : FullMsgId());
|
||||||
data->save(QString());
|
if (!data->loader->started()) {
|
||||||
|
data->save(QString());
|
||||||
|
} else {
|
||||||
|
data->loader->start();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -851,9 +855,23 @@ bool StickerData::setInstalled() const {
|
||||||
AudioData::AudioData(const AudioId &id, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) :
|
AudioData::AudioData(const AudioId &id, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) :
|
||||||
id(id), access(access), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), loader(0) {
|
id(id), access(access), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), loader(0) {
|
||||||
_location = Local::readFileLocation(mediaKey(AudioFileLocation, dc, id));
|
_location = Local::readFileLocation(mediaKey(AudioFileLocation, dc, id));
|
||||||
if (!loaded() && size < AudioVoiceMsgInMemory) {
|
}
|
||||||
loader = new mtpFileLoader(dc, id, access, AudioFileLocation, QString(), size, true);
|
|
||||||
|
bool AudioData::prepareAutoLoader(const HistoryItem *item, bool force) {
|
||||||
|
if (!loader && !loaded(true) && size < AudioVoiceMsgInMemory) {
|
||||||
|
bool load = force;
|
||||||
|
if (!force) {
|
||||||
|
if (item->history()->peer->isUser()) {
|
||||||
|
load = !(cAutoDownloadAudio() & dbiadNoPrivate);
|
||||||
|
} else {
|
||||||
|
load = !(cAutoDownloadAudio() & dbiadNoGroups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (load || Local::willAudioLoad(mediaKey(AudioFileLocation, dc, id), true)) {
|
||||||
|
loader = new mtpFileLoader(dc, id, access, AudioFileLocation, QString(), size, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioData::save(const QString &toFile) {
|
void AudioData::save(const QString &toFile) {
|
||||||
|
@ -932,10 +950,14 @@ void DocumentOpenLink::doOpen(DocumentData *data, int32 openOnSave) {
|
||||||
|
|
||||||
if (data->status != FileReady) return;
|
if (data->status != FileReady) return;
|
||||||
|
|
||||||
if (data->loader && !data->loader->started()) {
|
if (data->prepareAutoLoader(App::hoveredLinkItem(), true)) {
|
||||||
data->openOnSave = openOnSave;
|
data->openOnSave = openOnSave;
|
||||||
data->openOnSaveMsgId = App::hoveredLinkItem() ? App::hoveredLinkItem()->fullId() : (App::contextItem() ? App::contextItem()->fullId() : FullMsgId());
|
data->openOnSaveMsgId = App::hoveredLinkItem() ? App::hoveredLinkItem()->fullId() : (App::contextItem() ? App::contextItem()->fullId() : FullMsgId());
|
||||||
data->save(QString());
|
if (!data->loader->started()) {
|
||||||
|
data->save(QString());
|
||||||
|
} else {
|
||||||
|
data->loader->start();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1103,29 +1125,40 @@ void DocumentData::setattributes(const QVector<MTPDocumentAttribute> &attributes
|
||||||
case mtpc_documentAttributeFilename: name = qs(attributes[i].c_documentAttributeFilename().vfile_name); break;
|
case mtpc_documentAttributeFilename: name = qs(attributes[i].c_documentAttributeFilename().vfile_name); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
prepareAutoLoader();
|
|
||||||
}
|
|
||||||
|
|
||||||
void DocumentData::prepareAutoLoader() {
|
|
||||||
if (type == StickerDocument) {
|
if (type == StickerDocument) {
|
||||||
if (dimensions.width() <= 0 || dimensions.height() <= 0 || dimensions.width() > StickerMaxSize || dimensions.height() > StickerMaxSize || size > StickerInMemory) {
|
if (dimensions.width() <= 0 || dimensions.height() <= 0 || dimensions.width() > StickerMaxSize || dimensions.height() > StickerMaxSize || size > StickerInMemory) {
|
||||||
type = FileDocument;
|
type = FileDocument;
|
||||||
delete _additional;
|
delete _additional;
|
||||||
_additional = 0;
|
_additional = 0;
|
||||||
} else if (!loader && !loaded(true)) {
|
|
||||||
loader = new mtpFileLoader(dc, id, access, DocumentFileLocation, QString(), size, true);
|
|
||||||
}
|
|
||||||
} else if (isAnimation()) {
|
|
||||||
if (size <= AnimationInMemory && !loader && !loaded(true)) {
|
|
||||||
loader = new mtpFileLoader(dc, id, access, DocumentFileLocation, QString(), size, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DocumentData::prepareAutoLoader(const HistoryItem *item, bool force) {
|
||||||
|
if (!loader && !loaded(true)) {
|
||||||
|
if (type == StickerDocument) {
|
||||||
|
loader = new mtpFileLoader(dc, id, access, DocumentFileLocation, QString(), size, true);
|
||||||
|
} else if (isAnimation() && item && size <= AnimationInMemory) {
|
||||||
|
bool load = force;
|
||||||
|
if (!load) {
|
||||||
|
if (item->history()->peer->isUser()) {
|
||||||
|
load = !(cAutoDownloadGif() & dbiadNoPrivate);
|
||||||
|
} else {
|
||||||
|
load = !(cAutoDownloadGif() & dbiadNoGroups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (load || Local::willStickerImageLoad(mediaKey(DocumentFileLocation, dc, id), true)) {
|
||||||
|
loader = new mtpFileLoader(dc, id, access, DocumentFileLocation, QString(), size, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return loader;
|
||||||
|
}
|
||||||
|
|
||||||
void DocumentData::save(const QString &toFile) {
|
void DocumentData::save(const QString &toFile) {
|
||||||
if (loader && loader->fileName().isEmpty()) {
|
if (loader && loader->fileName().isEmpty()) {
|
||||||
loader->setFileName(toFile);
|
loader->setFileName(toFile);
|
||||||
} else {
|
} else if (!loader || !toFile.isEmpty()) {
|
||||||
cancel(true);
|
cancel(true);
|
||||||
loader = new mtpFileLoader(dc, id, access, DocumentFileLocation, toFile, size, (type == StickerDocument));
|
loader = new mtpFileLoader(dc, id, access, DocumentFileLocation, toFile, size, (type == StickerDocument));
|
||||||
}
|
}
|
||||||
|
|
|
@ -903,6 +903,7 @@ struct AudioData {
|
||||||
void forget() {
|
void forget() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool prepareAutoLoader(const HistoryItem *item, bool force = false);
|
||||||
void save(const QString &toFile);
|
void save(const QString &toFile);
|
||||||
|
|
||||||
void cancel(bool beforeDownload = false) {
|
void cancel(bool beforeDownload = false) {
|
||||||
|
@ -1147,7 +1148,7 @@ struct DocumentData {
|
||||||
bool loadingStarted() {
|
bool loadingStarted() {
|
||||||
return loader && loader->started();
|
return loader && loader->started();
|
||||||
}
|
}
|
||||||
void prepareAutoLoader();
|
bool prepareAutoLoader(const HistoryItem *item, bool force = false);
|
||||||
StickerData *sticker() {
|
StickerData *sticker() {
|
||||||
return (type == StickerDocument) ? static_cast<StickerData*>(_additional) : 0;
|
return (type == StickerDocument) ? static_cast<StickerData*>(_additional) : 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,6 +288,7 @@ enum DataBlockId {
|
||||||
dbiIncludeMuted = 0x31,
|
dbiIncludeMuted = 0x31,
|
||||||
dbiMaxMegaGroupCount = 0x32,
|
dbiMaxMegaGroupCount = 0x32,
|
||||||
dbiDownloadPath = 0x33,
|
dbiDownloadPath = 0x33,
|
||||||
|
dbiAutoDownload = 0x34,
|
||||||
|
|
||||||
dbiEncryptedWithSalt = 333,
|
dbiEncryptedWithSalt = 333,
|
||||||
dbiEncrypted = 444,
|
dbiEncrypted = 444,
|
||||||
|
|
Loading…
Reference in New Issue