mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Remove corner download if noforwards.
This commit is contained in:
parent
96c910190b
commit
c849d17667
13 changed files with 59 additions and 50 deletions
|
@ -1158,12 +1158,14 @@ bool DocumentData::useStreamingLoader() const {
|
|||
|| isVoiceMessage();
|
||||
}
|
||||
|
||||
bool DocumentData::canBeStreamed() const {
|
||||
bool DocumentData::canBeStreamed(HistoryItem *item) const {
|
||||
// Streaming couldn't be used with external player
|
||||
// Maybe someone brave will implement this once upon a time...
|
||||
return hasRemoteLocation()
|
||||
&& supportsStreaming()
|
||||
&& (!cUseExternalVideoPlayer() || !isVideoFile());
|
||||
&& (!isVideoFile()
|
||||
|| !cUseExternalVideoPlayer()
|
||||
|| (item && !item->history()->peer->allowsForwarding()));
|
||||
}
|
||||
|
||||
void DocumentData::setInappPlaybackFailed() {
|
||||
|
|
|
@ -233,7 +233,7 @@ public:
|
|||
[[nodiscard]] Storage::Cache::Key cacheKey() const;
|
||||
[[nodiscard]] uint8 cacheTag() const;
|
||||
|
||||
[[nodiscard]] bool canBeStreamed() const;
|
||||
[[nodiscard]] bool canBeStreamed(HistoryItem *item) const;
|
||||
[[nodiscard]] auto createStreamingLoader(
|
||||
Data::FileOrigin origin,
|
||||
bool forceRemoteLoader) const
|
||||
|
|
|
@ -348,10 +348,10 @@ float64 DocumentMedia::progress() const {
|
|||
: (loaded() ? 1. : 0.);
|
||||
}
|
||||
|
||||
bool DocumentMedia::canBePlayed() const {
|
||||
bool DocumentMedia::canBePlayed(HistoryItem *item) const {
|
||||
return !_owner->inappPlaybackFailed()
|
||||
&& _owner->useStreamingLoader()
|
||||
&& (loaded() || _owner->canBeStreamed());
|
||||
&& (loaded() || _owner->canBeStreamed(item));
|
||||
}
|
||||
|
||||
bool DocumentMedia::thumbnailEnoughForSticker() const {
|
||||
|
|
|
@ -74,7 +74,7 @@ public:
|
|||
[[nodiscard]] QByteArray bytes() const;
|
||||
[[nodiscard]] bool loaded(bool check = false) const;
|
||||
[[nodiscard]] float64 progress() const;
|
||||
[[nodiscard]] bool canBePlayed() const;
|
||||
[[nodiscard]] bool canBePlayed(HistoryItem *item) const;
|
||||
|
||||
void automaticLoad(Data::FileOrigin origin, const HistoryItem *item);
|
||||
|
||||
|
|
|
@ -252,7 +252,7 @@ void ResolveDocument(
|
|||
if (document->isTheme() && media->loaded(true)) {
|
||||
showDocument();
|
||||
location.accessDisable();
|
||||
} else if (media->canBePlayed()) {
|
||||
} else if (media->canBePlayed(item)) {
|
||||
if (document->isAudioFile()
|
||||
|| document->isVoiceMessage()
|
||||
|| document->isVideoMessage()) {
|
||||
|
|
|
@ -74,7 +74,7 @@ bool IsItemGoodForType(const not_null<HistoryItem*> item, Type type) {
|
|||
|| ((videoType || photoVideoType) && videoDoc)
|
||||
|| (fileType && (document->isTheme()
|
||||
|| document->isImage()
|
||||
|| !document->canBeStreamed()));
|
||||
|| !document->canBeStreamed(item)));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -1302,7 +1302,7 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
|
|||
|
||||
const auto pressedHandler = ClickHandler::getPressed();
|
||||
if (dynamic_cast<VoiceSeekClickHandler*>(pressedHandler.get())
|
||||
|| !_peer->allowsForwarding()) {
|
||||
|| hasCopyRestriction()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -1546,7 +1546,7 @@ void HistoryInner::mouseActionFinish(
|
|||
if (QGuiApplication::clipboard()->supportsSelection()
|
||||
&& !_selected.empty()
|
||||
&& _selected.cbegin()->second != FullSelection
|
||||
&& _peer->allowsForwarding()) {
|
||||
&& !hasCopyRestriction()) {
|
||||
const auto [item, selection] = *_selected.cbegin();
|
||||
if (const auto view = item->mainView()) {
|
||||
TextUtilities::SetClipboardText(
|
||||
|
@ -1725,7 +1725,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
};
|
||||
const auto addPhotoActions = [&](not_null<PhotoData*> photo) {
|
||||
const auto media = photo->activeMediaView();
|
||||
if (!photo->isNull() && media && media->loaded() && _peer->allowsForwarding()) {
|
||||
if (!photo->isNull() && media && media->loaded() && !hasCopyRestriction()) {
|
||||
_menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] {
|
||||
savePhotoToFile(photo);
|
||||
}));
|
||||
|
@ -1767,16 +1767,18 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
openContextGif(itemId);
|
||||
});
|
||||
}
|
||||
_menu->addAction(tr::lng_context_save_gif(tr::now), [=] {
|
||||
saveContextGif(itemId);
|
||||
});
|
||||
if (!hasCopyRestriction()) {
|
||||
_menu->addAction(tr::lng_context_save_gif(tr::now), [=] {
|
||||
saveContextGif(itemId);
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!document->filepath(true).isEmpty()) {
|
||||
_menu->addAction(Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now), [=] {
|
||||
showContextInFolder(document);
|
||||
});
|
||||
}
|
||||
if (_peer->allowsForwarding()) {
|
||||
if (!hasCopyRestriction()) {
|
||||
_menu->addAction(lnkIsVideo ? tr::lng_context_save_video(tr::now) : (lnkIsVoice ? tr::lng_context_save_audio(tr::now) : (lnkIsAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now))), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] {
|
||||
saveDocumentToFile(itemId, document);
|
||||
}));
|
||||
|
@ -1830,7 +1832,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
if (lnkPhoto || lnkDocument) {
|
||||
const auto item = _dragStateItem;
|
||||
const auto itemId = item ? item->fullId() : FullMsgId();
|
||||
if (isUponSelected > 0 && _peer->allowsForwarding()) {
|
||||
if (isUponSelected > 0 && !hasCopyRestriction()) {
|
||||
_menu->addAction(
|
||||
(isUponSelected > 1
|
||||
? tr::lng_context_copy_selected_items(tr::now)
|
||||
|
@ -1911,7 +1913,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
const auto view = item ? item->mainView() : nullptr;
|
||||
|
||||
if (isUponSelected > 0) {
|
||||
if (_peer->allowsForwarding()) {
|
||||
if (!hasCopyRestriction()) {
|
||||
_menu->addAction(
|
||||
((isUponSelected > 1)
|
||||
? tr::lng_context_copy_selected_items(tr::now)
|
||||
|
@ -1934,7 +1936,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
Api::ToggleFavedSticker(document, itemId);
|
||||
});
|
||||
}
|
||||
if (_peer->allowsForwarding()) {
|
||||
if (!hasCopyRestriction()) {
|
||||
_menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] {
|
||||
saveDocumentToFile(itemId, document);
|
||||
}));
|
||||
|
@ -1963,7 +1965,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
if (!item->isService()
|
||||
&& view
|
||||
&& !link
|
||||
&& _peer->allowsForwarding()
|
||||
&& !hasCopyRestriction()
|
||||
&& (view->hasVisibleText() || mediaHasTextForCopy)) {
|
||||
_menu->addAction(tr::lng_context_copy_text(tr::now), [=] {
|
||||
copyContextText(itemId);
|
||||
|
@ -2135,7 +2137,9 @@ void HistoryInner::openContextGif(FullMsgId itemId) {
|
|||
}
|
||||
|
||||
void HistoryInner::saveContextGif(FullMsgId itemId) {
|
||||
if (const auto item = session().data().message(itemId)) {
|
||||
if (hasCopyRestriction()) {
|
||||
return;
|
||||
} else if (const auto item = session().data().message(itemId)) {
|
||||
if (const auto media = item->media()) {
|
||||
if (const auto document = media->document()) {
|
||||
Api::ToggleSavedGif(document, item->fullId(), true);
|
||||
|
|
|
@ -241,7 +241,7 @@ void AddDocumentActions(
|
|||
OpenGif(list->controller(), contextId);
|
||||
});
|
||||
}
|
||||
if (document->isGifv()) {
|
||||
if (document->isGifv() && !list->hasCopyRestriction()) {
|
||||
menu->addAction(tr::lng_context_save_gif(tr::now), [=] {
|
||||
SaveGif(list->controller(), contextId);
|
||||
});
|
||||
|
|
|
@ -329,7 +329,7 @@ void Document::draw(
|
|||
|
||||
const auto cornerDownload = downloadInCorner();
|
||||
|
||||
if (!_dataMedia->canBePlayed()) {
|
||||
if (!_dataMedia->canBePlayed(_realParent)) {
|
||||
_dataMedia->automaticLoad(_realParent->fullId(), _realParent);
|
||||
}
|
||||
bool loaded = dataLoaded(), displayLoading = _data->displayLoading();
|
||||
|
@ -452,8 +452,8 @@ void Document::draw(
|
|||
return _data->isSongWithCover()
|
||||
? sti->historyFileThumbPause
|
||||
: stm->historyFilePause;
|
||||
} else if (loaded || _dataMedia->canBePlayed()) {
|
||||
return _dataMedia->canBePlayed()
|
||||
} else if (loaded || _dataMedia->canBePlayed(_realParent)) {
|
||||
return _dataMedia->canBePlayed(_realParent)
|
||||
? (_data->isSongWithCover()
|
||||
? sti->historyFileThumbPlay
|
||||
: stm->historyFilePlay)
|
||||
|
@ -593,7 +593,8 @@ void Document::ensureDataMediaCreated() const {
|
|||
|
||||
bool Document::downloadInCorner() const {
|
||||
return _data->isAudioFile()
|
||||
&& _data->canBeStreamed()
|
||||
&& _realParent->history()->peer->allowsForwarding()
|
||||
&& _data->canBeStreamed(_realParent)
|
||||
&& !_data->inappPlaybackFailed()
|
||||
&& _realParent->isRegular();
|
||||
}
|
||||
|
@ -782,7 +783,7 @@ TextState Document::textState(
|
|||
&& (!_data->loading() || downloadInCorner())
|
||||
&& !_data->uploading()
|
||||
&& !_data->isNull()) {
|
||||
if (loaded || _dataMedia->canBePlayed()) {
|
||||
if (loaded || _dataMedia->canBePlayed(_realParent)) {
|
||||
result.link = _openl;
|
||||
} else {
|
||||
result.link = _savel;
|
||||
|
|
|
@ -264,7 +264,8 @@ QSize Gif::videoSize() const {
|
|||
bool Gif::downloadInCorner() const {
|
||||
return _data->isVideoFile()
|
||||
&& (_data->loading() || !autoplayEnabled())
|
||||
&& _data->canBeStreamed()
|
||||
&& _realParent->history()->peer->allowsForwarding()
|
||||
&& _data->canBeStreamed(_realParent)
|
||||
&& !_data->inappPlaybackFailed()
|
||||
&& !_parent->data()->isSending();
|
||||
}
|
||||
|
@ -288,7 +289,7 @@ void Gif::draw(Painter &p, const PaintContext &context) const {
|
|||
const auto stm = context.messageStyle();
|
||||
const auto autoPaused = _parent->delegate()->elementIsGifPaused();
|
||||
const auto cornerDownload = downloadInCorner();
|
||||
const auto canBePlayed = _dataMedia->canBePlayed();
|
||||
const auto canBePlayed = _dataMedia->canBePlayed(_realParent);
|
||||
const auto autoplay = autoplayEnabled()
|
||||
&& canBePlayed
|
||||
&& CanPlayInline(_data);
|
||||
|
@ -836,7 +837,7 @@ TextState Gif::textState(QPoint point, StateRequest request) const {
|
|||
? _cancell
|
||||
: _realParent->isSending()
|
||||
? nullptr
|
||||
: (dataLoaded() || _dataMedia->canBePlayed())
|
||||
: (dataLoaded() || _dataMedia->canBePlayed(_realParent))
|
||||
? _openl
|
||||
: _data->loading()
|
||||
? _cancell
|
||||
|
@ -917,7 +918,7 @@ void Gif::drawGrouped(
|
|||
const auto autoPaused = _parent->delegate()->elementIsGifPaused();
|
||||
const auto fullFeatured = fullFeaturedGrouped(sides);
|
||||
const auto cornerDownload = fullFeatured && downloadInCorner();
|
||||
const auto canBePlayed = _dataMedia->canBePlayed();
|
||||
const auto canBePlayed = _dataMedia->canBePlayed(_realParent);
|
||||
const auto autoplay = fullFeatured
|
||||
&& autoplayEnabled()
|
||||
&& canBePlayed
|
||||
|
@ -1109,7 +1110,7 @@ TextState Gif::getStateGrouped(
|
|||
? _cancell
|
||||
: _realParent->isSending()
|
||||
? nullptr
|
||||
: (dataLoaded() || _dataMedia->canBePlayed())
|
||||
: (dataLoaded() || _dataMedia->canBePlayed(_realParent))
|
||||
? _openl
|
||||
: _data->loading()
|
||||
? _cancell
|
||||
|
@ -1258,7 +1259,7 @@ void Gif::updateStatusText() const {
|
|||
statusSize = _data->uploadingData->offset;
|
||||
} else if (!downloadInCorner() && _data->loading()) {
|
||||
statusSize = _data->loadOffset();
|
||||
} else if (dataLoaded() || _dataMedia->canBePlayed()) {
|
||||
} else if (dataLoaded() || _dataMedia->canBePlayed(_realParent)) {
|
||||
statusSize = Ui::FileStatusSizeLoaded;
|
||||
} else {
|
||||
statusSize = Ui::FileStatusSizeReady;
|
||||
|
@ -1386,7 +1387,7 @@ void Gif::playAnimation(bool autoplay) {
|
|||
}
|
||||
if (_streamed) {
|
||||
stopAnimation();
|
||||
} else if (_dataMedia->canBePlayed()) {
|
||||
} else if (_dataMedia->canBePlayed(_realParent)) {
|
||||
if (!autoplayEnabled()) {
|
||||
history()->owner().checkPlayingAnimations();
|
||||
}
|
||||
|
|
|
@ -190,7 +190,7 @@ ClickHandlerPtr ItemBase::getResultPreviewHandler() const {
|
|||
_result->_content_url,
|
||||
false);
|
||||
} else if (const auto document = _result->_document
|
||||
; document && document->createMediaView()->canBePlayed()) {
|
||||
; document && document->createMediaView()->canBePlayed(nullptr)) {
|
||||
return std::make_shared<OpenFileClickHandler>();
|
||||
} else if (_result->_photo) {
|
||||
return std::make_shared<OpenFileClickHandler>();
|
||||
|
|
|
@ -1212,7 +1212,7 @@ bool OverlayWidget::radialAnimationCallback(crl::time now) {
|
|||
update(radialRect());
|
||||
}
|
||||
const auto ready = _document && _documentMedia->loaded();
|
||||
const auto streamVideo = ready && _documentMedia->canBePlayed();
|
||||
const auto streamVideo = ready && _documentMedia->canBePlayed(_message);
|
||||
const auto tryOpenImage = ready
|
||||
&& (_document->size < Images::kReadBytesLimit);
|
||||
if (ready && ((tryOpenImage && !_radial.animating()) || streamVideo)) {
|
||||
|
@ -1693,7 +1693,7 @@ void OverlayWidget::downloadMedia() {
|
|||
void OverlayWidget::saveCancel() {
|
||||
if (_document && _document->loading()) {
|
||||
_document->cancel();
|
||||
if (_documentMedia->canBePlayed()) {
|
||||
if (_documentMedia->canBePlayed(_message)) {
|
||||
redisplayContent();
|
||||
}
|
||||
}
|
||||
|
@ -2429,7 +2429,7 @@ void OverlayWidget::displayDocument(
|
|||
).toImage());
|
||||
}
|
||||
} else {
|
||||
if (_documentMedia->canBePlayed()
|
||||
if (_documentMedia->canBePlayed(_message)
|
||||
&& initStreaming(continueStreaming)) {
|
||||
} else if (_document->isVideoFile()) {
|
||||
_documentMedia->automaticLoad(fileOrigin(), _message);
|
||||
|
@ -2577,7 +2577,7 @@ void OverlayWidget::displayFinished() {
|
|||
}
|
||||
|
||||
bool OverlayWidget::canInitStreaming() const {
|
||||
return (_document && _documentMedia->canBePlayed())
|
||||
return (_document && _documentMedia->canBePlayed(_message))
|
||||
|| (_photo && _photo->videoCanBePlayed());
|
||||
}
|
||||
|
||||
|
@ -4106,7 +4106,7 @@ void OverlayWidget::preloadData(int delta) {
|
|||
const auto [i, ok] = documents.emplace(
|
||||
(*document)->createMediaView());
|
||||
(*i)->thumbnailWanted(fileOrigin(entity));
|
||||
if (!(*i)->canBePlayed()) {
|
||||
if (!(*i)->canBePlayed(entity.item)) {
|
||||
(*i)->automaticLoad(fileOrigin(entity), entity.item);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -484,7 +484,7 @@ void Video::paint(Painter &p, const QRect &clip, TextSelection selection, const
|
|||
|
||||
if (!selected && !context->selecting && radialOpacity < 1.) {
|
||||
if (clip.intersects(QRect(0, _height - st::normalFont->height, _width, st::normalFont->height))) {
|
||||
const auto download = !loaded && !_dataMedia->canBePlayed();
|
||||
const auto download = !loaded && !_dataMedia->canBePlayed(parent());
|
||||
const auto &icon = download
|
||||
? (selected ? st::overviewVideoDownloadSelected : st::overviewVideoDownload)
|
||||
: (selected ? st::overviewVideoPlaySelected : st::overviewVideoPlay);
|
||||
|
@ -510,7 +510,7 @@ void Video::paint(Painter &p, const QRect &clip, TextSelection selection, const
|
|||
if (selected) {
|
||||
p.setBrush(st::msgDateImgBgSelected);
|
||||
} else {
|
||||
auto over = ClickHandler::showAsActive((_data->loading() || _data->uploading()) ? _cancell : (loaded || _dataMedia->canBePlayed()) ? _openl : _savel);
|
||||
auto over = ClickHandler::showAsActive((_data->loading() || _data->uploading()) ? _cancell : (loaded || _dataMedia->canBePlayed(parent())) ? _openl : _savel);
|
||||
p.setBrush(anim::brush(st::msgDateImgBg, st::msgDateImgBgOver, _a_iconOver.value(over ? 1. : 0.)));
|
||||
}
|
||||
|
||||
|
@ -576,7 +576,7 @@ TextState Video::getState(
|
|||
ensureDataMediaCreated();
|
||||
const auto link = (_data->loading() || _data->uploading())
|
||||
? _cancell
|
||||
: (dataLoaded() || _dataMedia->canBePlayed())
|
||||
: (dataLoaded() || _dataMedia->canBePlayed(parent()))
|
||||
? _openl
|
||||
: _savel;
|
||||
return { parent(), link };
|
||||
|
@ -704,7 +704,7 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const
|
|||
}
|
||||
const auto &checkLink = (_data->loading() || _data->uploading())
|
||||
? _cancell
|
||||
: (_dataMedia->canBePlayed() || loaded)
|
||||
: (_dataMedia->canBePlayed(parent()) || loaded)
|
||||
? _openl
|
||||
: _savel;
|
||||
if (selected) {
|
||||
|
@ -732,7 +732,7 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const
|
|||
return &(selected ? _st.voiceCancelSelected : _st.voiceCancel);
|
||||
} else if (showPause) {
|
||||
return &(selected ? _st.voicePauseSelected : _st.voicePause);
|
||||
} else if (_dataMedia->canBePlayed()) {
|
||||
} else if (_dataMedia->canBePlayed(parent())) {
|
||||
return &(selected ? _st.voicePlaySelected : _st.voicePlay);
|
||||
}
|
||||
return &(selected
|
||||
|
@ -802,7 +802,7 @@ TextState Voice::getState(
|
|||
if (inner.contains(point)) {
|
||||
const auto link = (_data->loading() || _data->uploading())
|
||||
? _cancell
|
||||
: (_dataMedia->canBePlayed() || loaded)
|
||||
: (_dataMedia->canBePlayed(parent()) || loaded)
|
||||
? _openl
|
||||
: _savel;
|
||||
return { parent(), link };
|
||||
|
@ -969,7 +969,8 @@ Document::Document(
|
|||
|
||||
bool Document::downloadInCorner() const {
|
||||
return _data->isAudioFile()
|
||||
&& _data->canBeStreamed()
|
||||
&& parent()->history()->peer->allowsForwarding()
|
||||
&& _data->canBeStreamed(parent())
|
||||
&& !_data->inappPlaybackFailed()
|
||||
&& parent()->isRegular();
|
||||
}
|
||||
|
@ -1033,7 +1034,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
|
|||
} else {
|
||||
const auto over = ClickHandler::showAsActive(isLoading
|
||||
? _cancell
|
||||
: (loaded || _dataMedia->canBePlayed())
|
||||
: (loaded || _dataMedia->canBePlayed(parent()))
|
||||
? _openl
|
||||
: _savel);
|
||||
p.setBrush(anim::brush(
|
||||
|
@ -1055,7 +1056,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
|
|||
return &(selected
|
||||
? _st.voicePauseSelected
|
||||
: _st.voicePause);
|
||||
} else if (loaded || _dataMedia->canBePlayed()) {
|
||||
} else if (loaded || _dataMedia->canBePlayed(parent())) {
|
||||
return &(selected
|
||||
? _st.voicePlaySelected
|
||||
: _st.voicePlay);
|
||||
|
@ -1068,7 +1069,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
|
|||
return &(selected ? _st.songCancelSelected : _st.songCancel);
|
||||
} else if (showPause) {
|
||||
return &(selected ? _st.songPauseSelected : _st.songPause);
|
||||
} else if (loaded || _dataMedia->canBePlayed()) {
|
||||
} else if (loaded || _dataMedia->canBePlayed(parent())) {
|
||||
return &(selected ? _st.songPlaySelected : _st.songPlay);
|
||||
}
|
||||
return &(selected ? _st.songDownloadSelected : _st.songDownload);
|
||||
|
@ -1280,7 +1281,7 @@ TextState Document::getState(
|
|||
const auto link = (!downloadInCorner()
|
||||
&& (_data->loading() || _data->uploading()))
|
||||
? _cancell
|
||||
: (loaded || _dataMedia->canBePlayed())
|
||||
: (loaded || _dataMedia->canBePlayed(parent()))
|
||||
? _openl
|
||||
: _savel;
|
||||
return { parent(), link };
|
||||
|
|
Loading…
Add table
Reference in a new issue