mirror of https://github.com/procxx/kepka.git
beta version 9015005
This commit is contained in:
parent
d876861431
commit
87becf552b
|
@ -1880,11 +1880,15 @@ void StickerPanInner::refreshInlineRows(UserData *bot, const InlineResults &resu
|
|||
int32 count = results.size(), until = 0, untilrow = 0, untilcol = 0;
|
||||
if (!count) {
|
||||
clearInlineRows(resultsDeleted);
|
||||
_showingSavedGifs = true;
|
||||
if (_showingInlineItems) {
|
||||
refreshSavedGifs();
|
||||
emit scrollToY(0);
|
||||
emit scrollUpdated();
|
||||
_showingSavedGifs = cShowingSavedGifs();
|
||||
if (_showingSavedGifs) {
|
||||
refreshSavedGifs();
|
||||
emit scrollToY(0);
|
||||
emit scrollUpdated();
|
||||
} else {
|
||||
showStickerSet(RecentStickerSetId);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -2353,6 +2357,7 @@ void StickerPanInner::showStickerSet(uint64 setId) {
|
|||
bool wasNotShowingGifs = !_showingInlineItems;
|
||||
if (wasNotShowingGifs) {
|
||||
_showingInlineItems = true;
|
||||
_showingSavedGifs = true;
|
||||
cSetShowingSavedGifs(true);
|
||||
emit saveConfigDelayed(SaveRecentEmojisTimeout);
|
||||
}
|
||||
|
@ -2394,6 +2399,17 @@ void StickerPanInner::showStickerSet(uint64 setId) {
|
|||
update();
|
||||
}
|
||||
|
||||
void StickerPanInner::updateShowingSavedGifs() {
|
||||
if (cShowingSavedGifs()) {
|
||||
if (!_showingInlineItems) {
|
||||
_showingSavedGifs = _showingInlineItems = true;
|
||||
if (_inlineRows.isEmpty()) refreshSavedGifs();
|
||||
}
|
||||
} else if (!_showingInlineItems) {
|
||||
_showingSavedGifs = _showingInlineItems = false;
|
||||
}
|
||||
}
|
||||
|
||||
void StickerPanInner::showFinish() {
|
||||
if (_showingInlineItems && _showingSavedGifs) {
|
||||
_setGifCommand = App::insertBotCommand((cTestMode() ? qstr("@contextbot") : qstr("@gif")), true);
|
||||
|
@ -3437,6 +3453,8 @@ void EmojiPan::onSwitch() {
|
|||
s_inner.showStickerSet(DefaultStickerSetId);
|
||||
} else if (!cShowingSavedGifs() && !cSavedGifs().isEmpty() && cStickerSets().isEmpty()) {
|
||||
s_inner.showStickerSet(NoneStickerSetId);
|
||||
} else {
|
||||
s_inner.updateShowingSavedGifs();
|
||||
}
|
||||
if (cShowingSavedGifs()) {
|
||||
s_inner.showFinish();
|
||||
|
|
|
@ -336,6 +336,7 @@ public:
|
|||
void hideFinish(bool completely);
|
||||
void showFinish();
|
||||
void showStickerSet(uint64 setId);
|
||||
void updateShowingSavedGifs();
|
||||
|
||||
bool showSectionIcons() const;
|
||||
void clearSelection(bool fast = false);
|
||||
|
|
|
@ -268,9 +268,9 @@ ClipReader::Frame *ClipReader::frameToWrite() const { // 0 means not ready
|
|||
return _frames + (((step + 3) / 2) % 3);
|
||||
}
|
||||
|
||||
ClipReader::Frame *ClipReader::frameToRequestOther() const {
|
||||
ClipReader::Frame *ClipReader::frameToRequestOther(bool check) const {
|
||||
int32 step = _step.loadAcquire();
|
||||
if (step == FirstFrameNotReadStep || step == WaitingForRequestStep) {
|
||||
if (step == FirstFrameNotReadStep || step == WaitingForRequestStep || (check && (step % 2))) {
|
||||
return 0;
|
||||
}
|
||||
return _frames + (((step + 5) / 2) % 3);
|
||||
|
@ -347,9 +347,8 @@ QPixmap ClipReader::current(int32 framew, int32 frameh, int32 outerw, int32 oute
|
|||
QImage cache;
|
||||
frame->pix = _prepareFrame(frame->request, frame->original, cache, true);
|
||||
|
||||
Frame *other = frameToRequestOther();
|
||||
t_assert(other != 0);
|
||||
other->request = frame->request;
|
||||
Frame *other = frameToRequestOther(true);
|
||||
if (other) other->request = frame->request;
|
||||
|
||||
moveToNextShow();
|
||||
|
||||
|
@ -1056,17 +1055,18 @@ bool ClipReadManager::handleProcessResult(ClipReaderPrivate *reader, ClipProcess
|
|||
_loadLevel.fetchAndAddRelaxed(reader->_width * reader->_height - AverageGifSize);
|
||||
}
|
||||
if (!reader->_paused && (result == ClipProcessRepaint || result == ClipProcessWait)) {
|
||||
ClipReader::Frame *frame = it.key()->frameToWrite(), *other = it.key()->frameToRequestOther();
|
||||
ClipReader::Frame *frame = it.key()->frameToWrite(), *other = it.key()->frameToRequestOther(false);
|
||||
t_assert(frame != 0 && other != 0);
|
||||
if (qMax(frame->when, other->when) + WaitBeforeGifPause < qMax(reader->_previousMs, ms)) {
|
||||
reader->_paused = true;
|
||||
it.key()->_paused.storeRelease(true);
|
||||
it.key()->_paused.storeRelease(1);
|
||||
result = ClipProcessReinit;
|
||||
}
|
||||
}
|
||||
if (result == ClipProcessReinit || result == ClipProcessRepaint || result == ClipProcessStarted) {
|
||||
ClipReader::Frame *frame = it.key()->frameToWrite();
|
||||
t_assert(frame != 0);
|
||||
frame->pix = QPixmap();
|
||||
frame->pix = reader->_current;
|
||||
frame->original = reader->_currentOriginal;
|
||||
frame->displayed = false;
|
||||
|
|
|
@ -491,30 +491,6 @@ struct ClipFrameRequest {
|
|||
bool rounded;
|
||||
};
|
||||
|
||||
template <typename Type>
|
||||
class Atomic {
|
||||
public:
|
||||
|
||||
Atomic(const Type &value = Type()) : _value(value) {
|
||||
}
|
||||
|
||||
Type get() const {
|
||||
QReadLocker lock(&_lock);
|
||||
Type result = _value;
|
||||
return result;
|
||||
}
|
||||
|
||||
void set(const Type &value) {
|
||||
QWriteLocker lock(&_lock);
|
||||
_value = value;
|
||||
}
|
||||
|
||||
private:
|
||||
Type _value;
|
||||
mutable QReadWriteLock _lock;
|
||||
|
||||
};
|
||||
|
||||
enum ClipReaderNotification {
|
||||
ClipReaderReinit,
|
||||
ClipReaderRepaint,
|
||||
|
@ -596,7 +572,7 @@ private:
|
|||
mutable Frame _frames[3];
|
||||
Frame *frameToShow() const; // 0 means not ready
|
||||
Frame *frameToWrite() const; // 0 means not ready
|
||||
Frame *frameToRequestOther() const;
|
||||
Frame *frameToRequestOther(bool check) const;
|
||||
void moveToNextShow() const;
|
||||
void moveToNextWrite() const;
|
||||
|
||||
|
|
|
@ -3500,6 +3500,10 @@ void HistoryWidget::showHistory(const PeerId &peerId, MsgId showAtMsgId, bool re
|
|||
} else {
|
||||
doneShow();
|
||||
}
|
||||
if (_inlineBot) {
|
||||
_inlineBot = 0;
|
||||
_emojiPan.clearInlineBot();
|
||||
}
|
||||
|
||||
if (App::wnd()) QTimer::singleShot(0, App::wnd(), SLOT(setInnerFocus()));
|
||||
|
||||
|
@ -4833,12 +4837,14 @@ bool HistoryWidget::insertBotCommand(const QString &cmd, bool specialGif) {
|
|||
if (!_history) return false;
|
||||
|
||||
QString toInsert = cmd;
|
||||
PeerData *bot = _peer->isUser() ? _peer : (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0);
|
||||
if (!bot->isUser() || !bot->asUser()->botInfo) bot = 0;
|
||||
QString username = bot ? bot->asUser()->username : QString();
|
||||
int32 botStatus = _peer->isChat() ? _peer->asChat()->botStatus : (_peer->isMegagroup() ? _peer->asChannel()->mgInfo->botStatus : -1);
|
||||
if (toInsert.indexOf('@') < 0 && !username.isEmpty() && (botStatus == 0 || botStatus == 2)) {
|
||||
toInsert += '@' + username;
|
||||
if (!toInsert.isEmpty() && toInsert.at(0) != '@') {
|
||||
PeerData *bot = _peer->isUser() ? _peer : (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0);
|
||||
if (!bot->isUser() || !bot->asUser()->botInfo) bot = 0;
|
||||
QString username = bot ? bot->asUser()->username : QString();
|
||||
int32 botStatus = _peer->isChat() ? _peer->asChat()->botStatus : (_peer->isMegagroup() ? _peer->asChannel()->mgInfo->botStatus : -1);
|
||||
if (toInsert.indexOf('@') < 0 && !username.isEmpty() && (botStatus == 0 || botStatus == 2)) {
|
||||
toInsert += '@' + username;
|
||||
}
|
||||
}
|
||||
toInsert += ' ';
|
||||
|
||||
|
|
|
@ -609,7 +609,7 @@ namespace {
|
|||
if (!_working()) return;
|
||||
|
||||
_manager->writingLocations();
|
||||
if (_fileLocations.isEmpty()) {
|
||||
if (_fileLocations.isEmpty() && _webFilesMap.isEmpty()) {
|
||||
if (_locationsKey) {
|
||||
clearKey(_locationsKey);
|
||||
_locationsKey = 0;
|
||||
|
|
Loading…
Reference in New Issue