From 12687745172f78b8dff98c39753ffdb86b79d849 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2015 11:47:16 +0300 Subject: [PATCH] audio player done --- Telegram/Resources/lang.strings | 3 +- Telegram/Resources/style.txt | 26 ++ Telegram/SourceFiles/art/sprite.png | Bin 171747 -> 172592 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 226322 -> 227714 bytes Telegram/SourceFiles/audio.cpp | 315 ++++++++++--- Telegram/SourceFiles/audio.h | 56 ++- Telegram/SourceFiles/config.h | 2 +- Telegram/SourceFiles/dialogswidget.cpp | 9 +- Telegram/SourceFiles/dropdown.cpp | 18 +- Telegram/SourceFiles/dropdown.h | 3 + Telegram/SourceFiles/gui/style_core.h | 11 +- Telegram/SourceFiles/gui/text.cpp | 18 +- Telegram/SourceFiles/gui/twidget.h | 49 +- Telegram/SourceFiles/history.cpp | 147 ++++-- Telegram/SourceFiles/history.h | 4 + Telegram/SourceFiles/historywidget.cpp | 46 +- Telegram/SourceFiles/historywidget.h | 2 + Telegram/SourceFiles/localstorage.cpp | 11 +- Telegram/SourceFiles/mainwidget.cpp | 173 +++++-- Telegram/SourceFiles/mainwidget.h | 12 +- Telegram/SourceFiles/mediaview.cpp | 40 +- Telegram/SourceFiles/mediaview.h | 2 +- Telegram/SourceFiles/overviewwidget.cpp | 69 +-- Telegram/SourceFiles/overviewwidget.h | 6 +- Telegram/SourceFiles/playerwidget.cpp | 548 +++++++++++++++++++++++ Telegram/SourceFiles/playerwidget.h | 100 +++++ Telegram/SourceFiles/profilewidget.cpp | 24 +- Telegram/SourceFiles/profilewidget.h | 5 +- Telegram/SourceFiles/settings.cpp | 2 + Telegram/SourceFiles/settings.h | 2 + Telegram/SourceFiles/structs.cpp | 18 +- Telegram/SourceFiles/structs.h | 1 + Telegram/SourceFiles/types.h | 1 + Telegram/SourceFiles/window.cpp | 6 +- Telegram/SourceFiles/window.h | 2 +- Telegram/Telegram.vcxproj | 27 ++ Telegram/Telegram.vcxproj.filters | 15 + 37 files changed, 1484 insertions(+), 289 deletions(-) create mode 100644 Telegram/SourceFiles/playerwidget.cpp create mode 100644 Telegram/SourceFiles/playerwidget.h diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 06ae05cea..9ac49a605 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Files overview"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Show all types"; "lng_profile_copy_phone" = "Copy phone number"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "— Forward photos, media and stickers with drag-n-drop\n— Drag-n-drop text messages by timestamp to forward them\n— Larger stickers panel\n— IPv6 checkbox added to Connection Type in Settings"; +"lng_new_version_text" = "— Improved in-app media playback\n— Bug fixes and other minor improvements"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 197816c12..1afa28f89 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1971,3 +1971,29 @@ botDescSkip: 8px; suppressAll: 0.2; suppressSong: 0.05; + +playerHeight: 44px; +playerBg: #e4e9ef; +playerFg: #54748f; +playerTimeFg: #a4afba; +playerLineHeight: 3px; +playerMoverSize: size(2px, 7px); +playerLineActive: #6389a8; +playerLineInactive: #bac7d4; +playerSkip: 8px; +playerNameStyle: textStyle(defaultTextStyle) { + lnkColor: #6389a8; + lnkDownColor: #6389a8; + lnkFlags: font(fsize semibold); + lnkOverFlags: font(fsize semibold); +} +playerPlay: sprite(377px, 109px, 19px, 22px); +playerPause: sprite(379px, 131px, 17px, 20px); +playerNext: sprite(374px, 151px, 22px, 14px); +playerPrev: sprite(374px, 165px, 22px, 14px); +playerClose: sprite(361px, 97px, 12px, 12px); +playerFull: sprite(365px, 109px, 12px, 12px); +playerVolume: sprite(352px, 179px, 44px, 12px); +playerInactiveOpacity: 0.8; +playerUnavailableOpacity: 0.3; +playerDuration: 200; diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 3e973cd2a70328cdf7c79c04a7413a59dab7bdca..d52ac2e853b5c6e355fac7833731351345d46c03 100644 GIT binary patch delta 52052 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 delta 51345 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 z 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 diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 97e9e24032a0eb97fd9f91c6921666719c6fc609..84138ee01f0a537b18390f9a97163426c37c72b3 100644 GIT binary patch delta 105823 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 z z$IUz4Dwm$@FW|X3Fa`5Gl{bc1&Pii#$Ot$W=ZEQx9)3lUK8M7@4=BfQ4V(DcI%xq) zHaShz=>ai|el4o`E9GBzJI)W5qG9lg;$lB=G+&kB%=4_+CEIbf+Gx|mGGQeSyO+

}O^@IEL1 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%0DuOiF7Spc~sm(poqtG$adrLT5aEi*{DSMFr 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 SA_o-w(NNV^DO9q$`@aB++)MWW delta 104512 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 = AudioPlayerStopped; - switch (type) { - case OverviewAudios: onError(_audioData[_audioCurrent].audio); break; - case OverviewDocuments: onError(_songData[_songCurrent].song); break; + if (!_checkALError()) { + setStoppedState(data, AudioPlayerStoppedAtError); + switch (type) { + case OverviewAudios: onError(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: onError(_songData[_songCurrent].song); break; + } + return false; } - return false; } data->started = data->position = pos + data->skipStart; return true; } -bool AudioPlayer::startedOther(MediaOverviewType type, bool &fadedStart) { +bool AudioPlayer::fadedStop(MediaOverviewType type, bool *fadedStart) { Msg *current = 0; switch (type) { case OverviewAudios: current = &_audioData[_audioCurrent]; break; @@ -393,20 +396,21 @@ bool AudioPlayer::startedOther(MediaOverviewType type, bool &fadedStart) { case AudioPlayerPlaying: current->state = AudioPlayerFinishing; updateCurrentStarted(type); - fadedStart = true; + if (fadedStart) *fadedStart = true; break; case AudioPlayerPausing: current->state = AudioPlayerFinishing; - fadedStart = true; + if (fadedStart) *fadedStart = true; break; case AudioPlayerPaused: - current->state = AudioPlayerStopped; + case AudioPlayerPausedAtEnd: + setStoppedState(current); return true; } return false; } -void AudioPlayer::play(const AudioMsgId &audio) { +void AudioPlayer::play(const AudioMsgId &audio, int64 position) { AudioMsgId stopped; { QMutexLocker lock(&playerMutex); @@ -414,7 +418,7 @@ void AudioPlayer::play(const AudioMsgId &audio) { bool fadedStart = false; AudioMsg *current = &_audioData[_audioCurrent]; if (current->audio != audio) { - if (startedOther(OverviewAudios, fadedStart)) { + if (fadedStop(OverviewAudios, &fadedStart)) { stopped = current->audio; } if (current->audio) { @@ -438,19 +442,19 @@ void AudioPlayer::play(const AudioMsgId &audio) { current->fname = audio.audio->already(true); current->data = audio.audio->data; if (current->fname.isEmpty() && current->data.isEmpty()) { - current->state = AudioPlayerStopped; + setStoppedState(current, AudioPlayerStoppedAtError); onError(audio); - } else if (updateCurrentStarted(OverviewAudios, 0)) { + } else { current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; current->loading = true; - emit loaderOnStart(audio); + emit loaderOnStart(audio, position); emit suppressSong(); } } if (stopped) emit updated(stopped); } -void AudioPlayer::play(const SongMsgId &song) { +void AudioPlayer::play(const SongMsgId &song, int64 position) { SongMsgId stopped; { QMutexLocker lock(&playerMutex); @@ -458,7 +462,7 @@ void AudioPlayer::play(const SongMsgId &song) { bool fadedStart = false; SongMsg *current = &_songData[_songCurrent]; if (current->song != song) { - if (startedOther(OverviewDocuments, fadedStart)) { + if (fadedStop(OverviewDocuments, &fadedStart)) { stopped = current->song; } if (current->song) { @@ -482,18 +486,38 @@ void AudioPlayer::play(const SongMsgId &song) { current->fname = song.song->already(true); current->data = song.song->data; if (current->fname.isEmpty() && current->data.isEmpty()) { - current->state = AudioPlayerStopped; - onError(song); - } else if (updateCurrentStarted(OverviewDocuments, 0)) { + setStoppedState(current); + if (!song.song->loader) { + DocumentOpenLink::doOpen(song.song); + song.song->openOnSave = song.song->openOnSaveMsgId = 0; + if (song.song->loader) song.song->loader->start(true, true); + } + } else { current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; current->loading = true; - emit loaderOnStart(song); + emit loaderOnStart(song, position); } } if (stopped) emit updated(stopped); } -void AudioPlayer::pauseresume(MediaOverviewType type) { +bool AudioPlayer::checkCurrentALError(MediaOverviewType type) { + if (_checkALError()) return true; + + switch (type) { + case OverviewAudios: + setStoppedState(&_audioData[_audioCurrent], AudioPlayerStoppedAtError); + onError(_audioData[_audioCurrent].audio); + break; + case OverviewDocuments: + setStoppedState(&_songData[_songCurrent], AudioPlayerStoppedAtError); + onError(_songData[_songCurrent].song); + break; + } + return false; +} + +void AudioPlayer::pauseresume(MediaOverviewType type, bool fast) { QMutexLocker lock(&playerMutex); Msg *current = 0; @@ -505,21 +529,38 @@ void AudioPlayer::pauseresume(MediaOverviewType type) { break; case OverviewDocuments: current = &_songData[_songCurrent]; - suppressGain = suppressSongGain; + suppressGain = suppressSongGain * cSongVolume(); break; } switch (current->state) { case AudioPlayerPausing: case AudioPlayerPaused: + case AudioPlayerPausedAtEnd: { if (current->state == AudioPlayerPaused) { updateCurrentStarted(type); + } else if (current->state == AudioPlayerPausedAtEnd) { + if (alIsSource(current->source)) { + alSourcei(current->source, AL_SAMPLE_OFFSET, qMax(current->position - current->skipStart, 0LL)); + if (!checkCurrentALError(type)) return; + } + } + current->state = fast ? AudioPlayerPlaying : AudioPlayerResuming; + + ALint state = AL_INITIAL; + alGetSourcei(current->source, AL_SOURCE_STATE, &state); + if (!checkCurrentALError(type)) return; + + if (state != AL_PLAYING) { + audioPlayer()->resumeDevice(); + + alSourcef(current->source, AL_GAIN, suppressGain); + if (!checkCurrentALError(type)) return; + + alSourcePlay(current->source); + if (!checkCurrentALError(type)) return; } - current->state = AudioPlayerResuming; - resumeDevice(); - alSourcef(current->source, AL_GAIN, suppressGain); - alSourcePlay(current->source); if (type == OverviewAudios) emit suppressSong(); - break; + } break; case AudioPlayerStarting: case AudioPlayerResuming: case AudioPlayerPlaying: @@ -532,6 +573,78 @@ void AudioPlayer::pauseresume(MediaOverviewType type) { emit faderOnTimer(); } +void AudioPlayer::seek(int64 position) { + QMutexLocker lock(&playerMutex); + + MediaOverviewType type = OverviewDocuments; + Msg *current = 0; + float64 suppressGain = 1.; + AudioMsgId audio; + SongMsgId song; + switch (type) { + case OverviewAudios: + current = &_audioData[_audioCurrent]; + audio = _audioData[_audioCurrent].audio; + suppressGain = suppressAllGain; + break; + case OverviewDocuments: + current = &_songData[_songCurrent]; + song = _songData[_songCurrent].song; + suppressGain = suppressSongGain * cSongVolume(); + break; + } + + bool isSource = alIsSource(current->source); + bool fastSeek = (position >= current->skipStart && position < current->duration - current->skipEnd - (current->skipEnd ? AudioVoiceMsgFrequency : 0)); + if (fastSeek && isSource) { + alSourcei(current->source, AL_SAMPLE_OFFSET, position - current->skipStart); + if (!checkCurrentALError(type)) return; + alSourcef(current->source, AL_GAIN, 1. * suppressGain); + if (!checkCurrentALError(type)) return; + updateCurrentStarted(type, position - current->skipStart); + } else { + setStoppedState(current); + if (isSource) alSourceStop(current->source); + } + switch (current->state) { + case AudioPlayerPausing: + case AudioPlayerPaused: + case AudioPlayerPausedAtEnd: { + if (current->state == AudioPlayerPausedAtEnd) { + current->state = AudioPlayerPaused; + } + lock.unlock(); + return pauseresume(type, true); + } break; + case AudioPlayerStarting: + case AudioPlayerResuming: + case AudioPlayerPlaying: + current->state = AudioPlayerPausing; + updateCurrentStarted(type); + if (type == OverviewAudios) emit unsuppressSong(); + break; + case AudioPlayerFinishing: + case AudioPlayerStopped: + case AudioPlayerStoppedAtEnd: + case AudioPlayerStoppedAtError: + case AudioPlayerStoppedAtStart: + lock.unlock(); + switch (type) { + case OverviewAudios: if (audio) return play(audio, position); + case OverviewDocuments: if (song) return play(song, position); + } + } + emit faderOnTimer(); +} + +void AudioPlayer::stop(MediaOverviewType type) { + fadedStop(type); + switch (type) { + case OverviewAudios: if (_audioData[_audioCurrent].audio) emit updated(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: if (_songData[_songCurrent].song) emit updated(_songData[_songCurrent].song); break; + } +} + void AudioPlayer::currentState(AudioMsgId *audio, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { QMutexLocker lock(&playerMutex); AudioMsg *current = &_audioData[_audioCurrent]; @@ -553,17 +666,22 @@ void AudioPlayer::currentState(Msg *current, AudioPlayerState *state, int64 *pos if (frequency) *frequency = current->frequency; } +void AudioPlayer::setStoppedState(Msg *current, AudioPlayerState state) { + current->state = state; + current->position = 0; +} + void AudioPlayer::clearStoppedAtStart(const AudioMsgId &audio) { QMutexLocker lock(&playerMutex); if (_audioData[_audioCurrent].audio == audio && _audioData[_audioCurrent].state == AudioPlayerStoppedAtStart) { - _audioData[_audioCurrent].state = AudioPlayerStopped; + setStoppedState(&_audioData[_audioCurrent]); } } void AudioPlayer::clearStoppedAtStart(const SongMsgId &song) { QMutexLocker lock(&playerMutex); if (_songData[_songCurrent].song == song && _songData[_songCurrent].state == AudioPlayerStoppedAtStart) { - _songData[_songCurrent].state = AudioPlayerStopped; + setStoppedState(&_songData[_songCurrent]); } } @@ -676,7 +794,7 @@ void AudioPlayerFader::onTimer() { for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { AudioPlayer::AudioMsg &m(voice->_audioData[i]); - if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; + if ((m.state & AudioPlayerStoppedMask) || m.state == AudioPlayerPaused || !m.source) continue; int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressAllGain, suppressAudioChanged); if (emitSignals & EmitError) emit error(m.audio); @@ -687,14 +805,15 @@ void AudioPlayerFader::onTimer() { for (int32 i = 0; i < AudioSongSimultaneously; ++i) { AudioPlayer::SongMsg &m(voice->_songData[i]); - if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; + if ((m.state & AudioPlayerStoppedMask) || m.state == AudioPlayerPaused || !m.source) continue; - int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressSongGain, suppressSongChanged); + int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressSongGain * cSongVolume(), suppressSongChanged || _songVolumeChanged); if (emitSignals & EmitError) emit error(m.song); if (emitSignals & EmitStopped) emit audioStopped(m.song); if (emitSignals & EmitPositionUpdated) emit playPositionUpdated(m.song); if (emitSignals & EmitNeedToPreload) emit needToPreload(m.song); } + _songVolumeChanged = false; if (!hasFading) { if (!hasPlaying) { @@ -724,11 +843,9 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, ALint pos = 0; ALint state = AL_INITIAL; alGetSourcei(m->source, AL_SAMPLE_OFFSET, &pos); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } alGetSourcei(m->source, AL_SOURCE_STATE, &state); - if (!_checkALError()) { - m->state = AudioPlayerStopped; - return EmitError; - } + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } int32 emitSignals = 0; switch (m->state) { @@ -746,17 +863,33 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, if (state != AL_PLAYING) { fading = false; if (m->source) { - alSourcef(m->source, AL_GAIN, 1); alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + alSourcef(m->source, AL_GAIN, 1); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + } + if (m->state == AudioPlayerPausing) { + m->state = AudioPlayerPausedAtEnd; + } else { + setStoppedState(m, AudioPlayerStoppedAtEnd); } - m->state = AudioPlayerStopped; emitSignals |= EmitStopped; } else if (1000 * (pos + m->skipStart - m->started) >= AudioFadeDuration * m->frequency) { fading = false; alSourcef(m->source, AL_GAIN, 1. * suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } switch (m->state) { - case AudioPlayerFinishing: alSourceStop(m->source); m->state = AudioPlayerStopped; break; - case AudioPlayerPausing: alSourcePause(m->source); m->state = AudioPlayerPaused; break; + case AudioPlayerFinishing: + alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + setStoppedState(m); + state = AL_STOPPED; + break; + case AudioPlayerPausing: + alSourcePause(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + m->state = AudioPlayerPaused; + break; case AudioPlayerStarting: case AudioPlayerResuming: m->state = AudioPlayerPlaying; @@ -769,18 +902,22 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, newGain = 1. - newGain; } alSourcef(m->source, AL_GAIN, newGain * suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } } } else if (playing && (state == AL_PLAYING || !m->loading)) { if (state != AL_PLAYING) { playing = false; if (m->source) { alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } alSourcef(m->source, AL_GAIN, 1); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } } - m->state = AudioPlayerStopped; + setStoppedState(m, AudioPlayerStoppedAtEnd); emitSignals |= EmitStopped; } else if (suppressGainChanged) { alSourcef(m->source, AL_GAIN, suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } } } if (state == AL_PLAYING && pos + m->skipStart - m->position >= AudioCheckPositionDelta) { @@ -799,6 +936,11 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, return emitSignals; } +void AudioPlayerFader::setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state) { + m->state = state; + m->position = 0; +} + void AudioPlayerFader::onPauseTimer() { QMutexLocker lock(&_pauseMutex); if (_pauseFlag) { @@ -838,6 +980,11 @@ void AudioPlayerFader::onSuppressAll() { onTimer(); } +void AudioPlayerFader::onSongVolumeChanged() { + _songVolumeChanged = true; + onTimer(); +} + void AudioPlayerFader::resumeDevice() { QMutexLocker lock(&_pauseMutex); _pauseFlag = false; @@ -859,7 +1006,7 @@ public: return this->fname == fname && this->data.size() == data.size(); } - virtual bool open() = 0; + virtual bool open(qint64 position = 0) = 0; virtual int64 duration() = 0; virtual int32 frequency() = 0; virtual int32 format() = 0; @@ -904,7 +1051,7 @@ public: frame = av_frame_alloc(); } - bool open() { + bool open(qint64 position = 0) { if (!AudioPlayerLoader::openFile()) { return false; } @@ -950,7 +1097,7 @@ public: } freq = fmtContext->streams[streamId]->codec->sample_rate; - len = (fmtContext->streams[streamId]->duration * freq) / fmtContext->streams[streamId]->time_base.den; + len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; uint64_t layout = fmtContext->streams[streamId]->codec->channel_layout; inputFormat = fmtContext->streams[streamId]->codec->sample_fmt; switch (layout) { @@ -1016,6 +1163,16 @@ public: return false; } } + if (position) { + int64 ts = (position * fmtContext->streams[streamId]->time_base.den) / (freq * fmtContext->streams[streamId]->time_base.num); + if (av_seek_frame(fmtContext, streamId, ts, AVSEEK_FLAG_ANY) < 0) { + if (av_seek_frame(fmtContext, streamId, ts, 0) < 0) { + } + } + //if (dstSamplesData) { + // position = qRound(srcRate * (position / float64(dstRate))); + //} + } return true; } @@ -1180,18 +1337,18 @@ AudioPlayerLoaders::~AudioPlayerLoaders() { void AudioPlayerLoaders::onInit() { } -void AudioPlayerLoaders::onStart(const AudioMsgId &audio) { +void AudioPlayerLoaders::onStart(const AudioMsgId &audio, qint64 position) { _audio = AudioMsgId(); delete _audioLoader; _audioLoader = 0; - onLoad(audio); + loadData(OverviewAudios, static_cast(&audio), position); } -void AudioPlayerLoaders::onStart(const SongMsgId &song) { +void AudioPlayerLoaders::onStart(const SongMsgId &song, qint64 position) { _song = SongMsgId(); delete _songLoader; _songLoader = 0; - onLoad(song); + loadData(OverviewDocuments, static_cast(&song), position); } void AudioPlayerLoaders::clear(MediaOverviewType type) { @@ -1201,6 +1358,11 @@ void AudioPlayerLoaders::clear(MediaOverviewType type) { } } +void AudioPlayerLoaders::setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state) { + m->state = state; + m->position = 0; +} + void AudioPlayerLoaders::emitError(MediaOverviewType type) { switch (type) { case OverviewAudios: emit error(clearAudio()); break; @@ -1225,16 +1387,16 @@ SongMsgId AudioPlayerLoaders::clearSong() { } void AudioPlayerLoaders::onLoad(const AudioMsgId &audio) { - loadData(OverviewAudios, static_cast(&audio)); + loadData(OverviewAudios, static_cast(&audio), 0); } void AudioPlayerLoaders::onLoad(const SongMsgId &song) { - loadData(OverviewDocuments, static_cast(&song)); + loadData(OverviewDocuments, static_cast(&song), 0); } -void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { +void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qint64 position) { SetupError err = SetupNoErrorStarted; - AudioPlayerLoader *l = setupLoader(type, objId, err); + AudioPlayerLoader *l = setupLoader(type, objId, err, position); if (!l) { if (err == SetupErrorAtStart) { emitError(type); @@ -1277,19 +1439,22 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { } m->nextBuffer = 0; } + m->skipStart = position; + m->skipEnd = m->duration - position; + m->position = 0; + m->started = 0; } if (samplesAdded) { if (!m->source) { alGenSources(1, &m->source); alSourcef(m->source, AL_PITCH, 1.f); - alSourcef(m->source, AL_GAIN, 1.f); alSource3f(m->source, AL_POSITION, 0, 0, 0); alSource3f(m->source, AL_VELOCITY, 0, 0, 0); alSourcei(m->source, AL_LOOPING, 0); } if (!m->buffers[m->nextBuffer]) alGenBuffers(3, m->buffers); if (!_checkALError()) { - m->state = AudioPlayerStopped; + setStoppedState(m, AudioPlayerStoppedAtError); emitError(type); return; } @@ -1307,7 +1472,7 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { m->nextBuffer = (m->nextBuffer + 1) % 3; if (!_checkALError()) { - m->state = AudioPlayerStopped; + setStoppedState(m, AudioPlayerStoppedAtError); emitError(type); return; } @@ -1326,18 +1491,34 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { if (_checkALError()) { if (state != AL_PLAYING) { audioPlayer()->resumeDevice(); + switch (type) { case OverviewAudios: alSourcef(m->source, AL_GAIN, suppressAllGain); break; - case OverviewDocuments: alSourcef(m->source, AL_GAIN, suppressSongGain); break; + case OverviewDocuments: alSourcef(m->source, AL_GAIN, suppressSongGain * cSongVolume()); break; } + if (!_checkALError()) { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; + } + alSourcePlay(m->source); + if (!_checkALError()) { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; + } + emit needToCheck(); } + } else { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); } } } -AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const void *objId, SetupError &err) { +AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position) { err = SetupErrorAtStart; QMutexLocker lock(&playerMutex); AudioPlayer *voice = audioPlayer(); @@ -1410,7 +1591,7 @@ AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const *l = new FFMpegLoader(m->fname, m->data); int ret; - if (!(*l)->open()) { + if (!(*l)->open(position)) { m->state = AudioPlayerStoppedAtStart; return 0; } @@ -1422,10 +1603,6 @@ AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const m->duration = duration; m->frequency = (*l)->frequency(); if (!m->frequency) m->frequency = AudioVoiceMsgFrequency; - m->skipStart = 0; - m->skipEnd = duration; - m->position = 0; - m->started = 0; err = SetupNoErrorStarted; } else { if (!m->skipEnd) { @@ -1985,7 +2162,7 @@ public: _opened(false) { } - bool open() { + bool open(qint64 position = 0) { if (!AudioPlayerLoader::openFile()) { return false; } diff --git a/Telegram/SourceFiles/audio.h b/Telegram/SourceFiles/audio.h index f28a21d5e..323613c72 100644 --- a/Telegram/SourceFiles/audio.h +++ b/Telegram/SourceFiles/audio.h @@ -25,14 +25,19 @@ void audioPlayNotify(); void audioFinish(); enum AudioPlayerState { - AudioPlayerStopped, - AudioPlayerStoppedAtStart, - AudioPlayerStarting, - AudioPlayerPlaying, - AudioPlayerFinishing, - AudioPlayerPausing, - AudioPlayerPaused, - AudioPlayerResuming, + AudioPlayerStopped = 0x01, + AudioPlayerStoppedAtEnd = 0x02, + AudioPlayerStoppedAtError = 0x03, + AudioPlayerStoppedAtStart = 0x04, + AudioPlayerStoppedMask = 0x07, + + AudioPlayerStarting = 0x08, + AudioPlayerPlaying = 0x10, + AudioPlayerFinishing = 0x18, + AudioPlayerPausing = 0x20, + AudioPlayerPaused = 0x28, + AudioPlayerPausedAtEnd = 0x30, + AudioPlayerResuming = 0x38, }; class AudioPlayerFader; @@ -45,9 +50,11 @@ public: AudioPlayer(); - void play(const AudioMsgId &audio); - void play(const SongMsgId &song); - void pauseresume(MediaOverviewType type); + void play(const AudioMsgId &audio, int64 position = 0); + void play(const SongMsgId &song, int64 position = 0); + void pauseresume(MediaOverviewType type, bool fast = false); + void seek(int64 position); // type == OverviewDocuments + void stop(MediaOverviewType type); void currentState(AudioMsgId *audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); void currentState(SongMsgId *song, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); @@ -75,21 +82,28 @@ signals: void stopped(const AudioMsgId &audio); void stopped(const SongMsgId &song); - void loaderOnStart(const AudioMsgId &audio); - void loaderOnStart(const SongMsgId &song); + void stoppedOnError(const AudioMsgId &audio); + void stoppedOnError(const SongMsgId &song); + + void loaderOnStart(const AudioMsgId &audio, qint64 position); + void loaderOnStart(const SongMsgId &song, qint64 position); void loaderOnCancel(const AudioMsgId &audio); void loaderOnCancel(const SongMsgId &song); void faderOnTimer(); + void suppressSong(); void unsuppressSong(); void suppressAll(); + void songVolumeChanged(); + private: - bool startedOther(MediaOverviewType type, bool &fadedStart); + bool fadedStop(MediaOverviewType type, bool *fadedStart = 0); bool updateCurrentStarted(MediaOverviewType type, int32 pos = -1); + bool checkCurrentALError(MediaOverviewType type); struct Msg { Msg() : position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), @@ -124,6 +138,7 @@ private: }; void currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency); + void setStoppedState(Msg *current, AudioPlayerState state = AudioPlayerStopped); int32 _audioCurrent; AudioMsg _audioData[AudioVoiceMsgSimultaneously]; @@ -210,6 +225,7 @@ public slots: void onSuppressSong(); void onUnsuppressSong(); void onSuppressAll(); + void onSongVolumeChanged(); private: @@ -220,12 +236,13 @@ private: EmitNeedToPreload = 0x08, }; int32 updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged); + void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped); QTimer _timer, _pauseTimer; QMutex _pauseMutex; bool _pauseFlag, _paused; - bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim; + bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim, _songVolumeChanged; anim::fvalue _suppressAllGain, _suppressSongGain; uint64 _suppressAllStart, _suppressSongStart; @@ -250,8 +267,8 @@ public slots: void onInit(); - void onStart(const AudioMsgId &audio); - void onStart(const SongMsgId &audio); + void onStart(const AudioMsgId &audio, qint64 position); + void onStart(const SongMsgId &audio, qint64 position); void onLoad(const AudioMsgId &audio); void onLoad(const SongMsgId &audio); @@ -269,6 +286,7 @@ private: void emitError(MediaOverviewType type); void clear(MediaOverviewType type); + void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped); AudioMsgId clearAudio(); SongMsgId clearSong(); @@ -278,8 +296,8 @@ private: SetupErrorLoadedFull = 2, SetupNoErrorStarted = 3, }; - void loadData(MediaOverviewType type, const void *objId); - AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err); + void loadData(MediaOverviewType type, const void *objId, qint64 position); + AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position); AudioPlayer::Msg *checkLoader(MediaOverviewType type); }; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 31c3d0965..e887ecb72 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -87,7 +87,7 @@ enum { AudioVoiceMsgSimultaneously = 4, AudioSongSimultaneously = 4, AudioCheckPositionTimeout = 100, // 100ms per check audio pos - AudioCheckPositionDelta = 4800, // update position called each 4800 samples + AudioCheckPositionDelta = 2400, // update position called each 2400 samples AudioFadeTimeout = 7, // 7ms AudioFadeDuration = 500, AudioVoiceMsgSkip = 400, // 200ms diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index f81270584..b346267d1 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1929,9 +1929,16 @@ void DialogsWidget::resizeEvent(QResizeEvent *e) { _addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y()); _cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y()); scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); + + int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; + int32 newScrollY = scroll.scrollTop() + addToY; scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); list.resize(w, list.height()); - onListScroll(); + if (addToY) { + scroll.scrollToY(newScrollY); + } else { + onListScroll(); + } } void DialogsWidget::keyPressEvent(QKeyEvent *e) { diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index cf41f42c3..1b755bd0d 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2611,6 +2611,15 @@ bool MentionsInner::moveSel(int direction) { } bool MentionsInner::select() { + QString sel = getSelected(); + if (!sel.isEmpty()) { + emit chosen(sel); + return true; + } + return false; +} + +QString MentionsInner::getSelected() const { int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size()); if (_sel >= 0 && _sel < maxSel) { QString result; @@ -2628,10 +2637,9 @@ bool MentionsInner::select() { result = '/' + command.command; } } - emit chosen(result); - return true; + return result; } - return false; + return QString(); } void MentionsInner::mousePressEvent(QMouseEvent *e) { @@ -2991,6 +2999,10 @@ int32 MentionsDropdown::innerBottom() { return _scroll.scrollTop() + _scroll.height(); } +QString MentionsDropdown::getSelected() const { + return _inner.getSelected(); +} + bool MentionsDropdown::eventFilter(QObject *obj, QEvent *e) { if (isHidden()) return QWidget::eventFilter(obj, e); if (e->type() == QEvent::KeyPress) { diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index 7335a17ff..7a43c6b1f 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -503,6 +503,8 @@ public: bool moveSel(int direction); bool select(); + QString getSelected() const; + signals: void chosen(QString mentionOrHashtag); @@ -552,6 +554,7 @@ public: int32 innerBottom(); bool eventFilter(QObject *obj, QEvent *e); + QString getSelected() const; ~MentionsDropdown(); diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 06157981a..4421091f7 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -26,8 +26,17 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include +inline QPoint rtlpoint(int x, int y, int outerw) { + return QPoint(rtl() ? (outerw - x) : x, y); +} +inline QPoint rtlpoint(const QPoint &p, int outerw) { + return rtl() ? QPoint(outerw - p.x(), p.y()) : p; +} inline QRect rtlrect(int x, int y, int w, int h, int outerw) { - return rtl() ? QRect(outerw - x - w, y, w, h) : QRect(x, y, w, h); + return QRect(rtl() ? (outerw - x - w) : x, y, w, h); +} +inline QRect rtlrect(const QRect &r, int outerw) { + return rtl() ? QRect(outerw - r.x() - r.width(), r.y(), r.width(), r.height()) : r; } inline QRect centerrect(const QRect &inRect, const QRect &rect) { return QRect(inRect.x() + (inRect.width() - rect.width()) / 2, inRect.y() + (inRect.height() - rect.height()) / 2, rect.width(), rect.height()); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index d1de1358f..4b03a03a6 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { - const QRegularExpression _reDomain(QString::fromUtf8("(?_font; int flags = block->flags(); - if (!flags && block->lnkIndex()) { + if (block->lnkIndex()) { const TextLinkPtr &l(_t->_links.at(block->lnkIndex() - 1)); if (l == _overLnk) { if (l == _downLnk || !_downLnk) { - flags = _textStyle->lnkOverFlags->flags(); + newFont = _textStyle->lnkOverFlags; } else { - flags = _textStyle->lnkFlags->flags(); + newFont = _textStyle->lnkFlags; } } else { - flags = _textStyle->lnkFlags->flags(); + newFont = _textStyle->lnkFlags; } + } else { + flags = block->flags(); + if (flags & TextBlockBold) newFont = newFont->bold(); + if (flags & TextBlockItalic) newFont = newFont->italic(); + if (flags & TextBlockUnderline) newFont = newFont->underline(); } - if (flags & TextBlockBold) newFont = newFont->bold(); - if (flags & TextBlockItalic) newFont = newFont->italic(); - if (flags & TextBlockUnderline) newFont = newFont->underline(); if (newFont != _f) { _f = newFont; _e->fnt = _f->f; diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index c1359f7f5..36da53381 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -17,20 +17,6 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -class Widget : public QWidget { -public: - - Widget(QWidget *parent = 0) : QWidget(parent) { - } - void moveToLeft(int x, int y, int outerw) { - move(rtl() ? (outerw - x - width()) : x, y); - } - void moveToRight(int x, int y, int outerw) { - move(rtl() ? x : (outerw - x - width()), y); - } - -}; - namespace App { const QPixmap &sprite(); } @@ -119,14 +105,20 @@ public: void drawSpriteCenter(const QRect &in, const style::sprite &sprite) { return drawPixmap(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), App::sprite(), sprite); } + void drawSpriteCenterLeft(const QRect &in, int outerw, const style::sprite &sprite) { + return drawPixmapLeft(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite); + } + void drawSpriteCenterRight(const QRect &in, int outerw, const style::sprite &sprite) { + return drawPixmapRight(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite); + } }; -class TWidget : public Widget { +class TWidget : public QWidget { Q_OBJECT public: - TWidget(QWidget *parent = 0) : Widget(parent) { + TWidget(QWidget *parent = 0) : QWidget(parent) { } TWidget *tparent() { return qobject_cast(parentWidget()); @@ -140,6 +132,27 @@ public: virtual void enterFromChildEvent(QEvent *e) { // e -- from leaveEvent() of child TWidget } + void moveToLeft(int x, int y, int outerw) { + move(rtl() ? (outerw - x - width()) : x, y); + } + void moveToRight(int x, int y, int outerw) { + move(rtl() ? x : (outerw - x - width()), y); + } + QPoint myrtlpoint(int x, int y) const { + return rtlpoint(x, y, width()); + } + QPoint myrtlpoint(const QPoint p) const { + return rtlpoint(p, width()); + } + QRect myrtlrect(int x, int y, int w, int h) const { + return rtlrect(x, y, w, h, width()); + } + QRect myrtlrect(const QRect &r) { + return rtlrect(r, width()); + } + void rtlupdate(const QRect &r) { + update(myrtlrect(r)); + } bool event(QEvent *e) { return QWidget::event(e); } @@ -149,12 +162,12 @@ protected: void enterEvent(QEvent *e) { TWidget *p(tparent()); if (p) p->leaveToChildEvent(e); - return Widget::enterEvent(e); + return QWidget::enterEvent(e); } void leaveEvent(QEvent *e) { TWidget *p(tparent()); if (p) p->enterFromChildEvent(e); - return Widget::leaveEvent(e); + return QWidget::leaveEvent(e); } private: diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 2e2b5d79c..c272b0fd1 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -372,6 +372,28 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { return changed; } +void History::eraseFromOverview(MediaOverviewType type, MsgId msgId) { + if (_overviewIds[type].isEmpty()) return; + + History::MediaOverviewIds::iterator i = _overviewIds[type].find(msgId); + if (i == _overviewIds[type].cend()) return; + + _overviewIds[type].erase(i); + for (History::MediaOverview::iterator i = _overview[type].begin(), e = _overview[type].end(); i != e; ++i) { + if ((*i) == msgId) { + _overview[type].erase(i); + if (_overviewCount[type] > 0) { + --_overviewCount[type]; + if (!_overviewCount[type]) { + _overviewCount[type] = -1; + } + } + break; + } + } + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, type); +} + bool DialogsList::del(const PeerId &peerId, DialogRow *replacedBy) { RowByPeer::iterator i = rowByPeer.find(peerId); if (i == rowByPeer.cend()) return false; @@ -803,13 +825,23 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } HistoryMedia *media = adding->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { _overview[t].push_back(adding->id); _overviewIds[t].insert(adding->id, NullType()); if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { + _overview[t].push_back(adding->id); + _overviewIds[t].insert(adding->id, NullType()); + if (_overviewCount[t] > 0) ++_overviewCount[t]; + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } } } } @@ -933,16 +965,27 @@ void History::addToFront(const QVector &slice) { ++skip; if (loadedAtBottom()) { // add photos to overview and authors to lastAuthors + int32 mask = 0; QList *lastAuthors = peer->chat ? &(peer->asChat()->lastAuthors) : 0; for (int32 i = block->size(); i > 0; --i) { HistoryItem *item = (*block)[i - 1]; HistoryMedia *media = item->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { _overview[t].push_front(item->id); _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { + _overview[t].push_front(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } } } } @@ -987,7 +1030,9 @@ void History::addToFront(const QVector &slice) { } } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + for (int32 t = 0; t < OverviewCount; ++t) { + if ((mask & (1 << t)) && App::wnd()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(t)); + } } } else { delete block; @@ -1062,10 +1107,14 @@ void History::addToBack(const QVector &slice) { delete block; } if (!wasLoadedAtBottom && loadedAtBottom()) { // add all loaded photos to overview + int32 mask = 0; for (int32 i = 0; i < OverviewCount; ++i) { if (_overviewCount[i] == 0) continue; // all loaded - _overview[i].clear(); - _overviewIds[i].clear(); + if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { + _overview[i].clear(); + _overviewIds[i].clear(); + mask |= (1 << i); + } } for (int32 i = 0; i < size(); ++i) { HistoryBlock *b = (*this)[i]; @@ -1073,15 +1122,29 @@ void History::addToBack(const QVector &slice) { HistoryItem *item = (*b)[j]; HistoryMedia *media = item->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); - if (t != OverviewCount && _overviewCount[t] != 0) { - _overview[t].push_back(item->id); - _overviewIds[t].insert(item->id, NullType()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); + if (t != OverviewCount) { + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + } } } } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + for (int32 t = 0; t < OverviewCount; ++t) { + if ((mask & (1 << t)) && App::wnd()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(t)); + } } if (wasEmpty && !isEmpty()) { HistoryBlock *dateBlock = new HistoryBlock(this); @@ -1328,11 +1391,13 @@ void History::clear(bool leaveItems) { showFrom = 0; } for (int32 i = 0; i < OverviewCount; ++i) { - if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); - _overview[i].clear(); - _overviewIds[i].clear(); + if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { + if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); + _overview[i].clear(); + _overviewIds[i].clear(); + if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(i)); + } } - if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer); for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { if (leaveItems) { (*i)->clear(true); @@ -1580,23 +1645,10 @@ void HistoryItem::destroy() { } HistoryMedia *m = getMedia(true); MediaOverviewType t = m ? mediaToOverviewType(m->type()) : OverviewCount; - if (t != OverviewCount && !history()->_overviewIds[t].isEmpty()) { - History::MediaOverviewIds::iterator i = history()->_overviewIds[t].find(id); - if (i != history()->_overviewIds[t].cend()) { - history()->_overviewIds[t].erase(i); - for (History::MediaOverview::iterator i = history()->_overview[t].begin(), e = history()->_overview[t].end(); i != e; ++i) { - if ((*i) == id) { - history()->_overview[t].erase(i); - if (history()->_overviewCount[t] > 0) { - --history()->_overviewCount[t]; - if (!history()->_overviewCount[t]) { - history()->_overviewCount[t] = -1; - } - } - break; - } - } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(history()->peer); + if (t != OverviewCount) { + history()->eraseFromOverview(t, id); + if (m->type() == MediaTypeDocument && static_cast(m)->document()->song()) { + history()->eraseFromOverview(OverviewAudioDocuments, id); } } delete this; @@ -2339,8 +2391,9 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i p.setPen(status->p); if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2563,7 +2616,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; } else if (already || hasdata) { bool showPause = false; - if (playing.msgId == parent->id && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } else { @@ -2572,8 +2625,9 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); } else { if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2733,7 +2787,7 @@ namespace { SongData *song = document->song(); if (!song || (song->title.isEmpty() && song->performer.isEmpty())) return document->name; if (song->performer.isEmpty()) return song->title; - return song->performer + QString::fromUtf8(" \xe2\x80\x94 ") + (song->title.isEmpty() ? qsl("Unknown Track") : song->title); + return song->performer + QString::fromUtf8(" \xe2\x80\x93 ") + (song->title.isEmpty() ? qsl("Unknown Track") : song->title); } } @@ -2905,17 +2959,19 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; } else if (already || hasdata) { bool showPause = false; - if (playing.msgId == parent->id && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } else { statusText = formatDurationText(data->song()->duration); } + if (!showPause && playing.msgId == parent->id && App::main() && App::main()->player()->seekingSong(playing)) showPause = true; img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); } else { if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2936,8 +2992,9 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } statusText = _uplTextCache; } else if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -3147,8 +3204,8 @@ HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia() , pixw(1), pixh(1), data(document), lastw(0) { data->thumb->load(); - if (!data->sticker->alt.isEmpty()) { - _emoji = data->sticker->alt; + if (!data->sticker()->alt.isEmpty()) { + _emoji = data->sticker()->alt; } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index c952e5f73..f13c0f922 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -106,6 +106,7 @@ enum MediaOverviewType { OverviewVideos, OverviewDocuments, OverviewAudios, + OverviewAudioDocuments, OverviewCount }; @@ -127,6 +128,7 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) { case OverviewVideos: return MTP_inputMessagesFilterVideo(); case OverviewDocuments: return MTP_inputMessagesFilterDocument(); case OverviewAudios: return MTP_inputMessagesFilterAudio(); + case OverviewAudioDocuments: return MTP_inputMessagesFilterAudioDocuments(); default: type = OverviewCount; break; } return MTPMessagesFilter(); @@ -286,6 +288,8 @@ struct History : public QList { MediaOverviewIds _overviewIds[OverviewCount]; int32 _overviewCount[OverviewCount]; // -1 - not loaded, 0 - all loaded, > 0 - count, but not all loaded + void eraseFromOverview(MediaOverviewType type, MsgId msgId); + static const int32 ScrollMax = INT_MAX; }; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index e9e0344b1..6570c1da7 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2225,6 +2225,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); connect(&_field, SIGNAL(submitted(bool)), this, SLOT(onSend(bool))); connect(&_field, SIGNAL(cancelled()), this, SLOT(onCancel())); + connect(&_field, SIGNAL(tabbed()), this, SLOT(onFieldTabbed())); connect(&_field, SIGNAL(resized()), this, SLOT(onFieldResize())); connect(&_field, SIGNAL(focused()), this, SLOT(onFieldFocused())); connect(&imageLoader, SIGNAL(imageReady()), this, SLOT(onPhotoReady())); @@ -3501,20 +3502,7 @@ bool HistoryWidget::showStep(float64 ms) { _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); App::main()->topBar()->enableShadow(); - if (hist && hist->readyForWork()) { - _scroll.show(); - if (hist->lastScrollTop == History::ScrollMax) { - _scroll.scrollToY(hist->lastScrollTop); - } - - onListScroll(); - } - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); - } - updateControlsVisibility(); - App::wnd()->setInnerFocus(); + doneShow(); } else { a_bgCoord.update(dt1, st::introHideFunc); a_bgAlpha.update(dt1, st::introAlphaHideFunc); @@ -3526,6 +3514,23 @@ bool HistoryWidget::showStep(float64 ms) { return res; } +void HistoryWidget::doneShow() { + if (hist && hist->readyForWork()) { + _scroll.show(); + if (hist->lastScrollTop == History::ScrollMax) { + _scroll.scrollToY(hist->lastScrollTop); + } + + onListScroll(); + } + if (hist) { + if (!_histInited) checkUnreadLoaded(); + if (_histNeedUpdate) updateListSize(); + } + updateControlsVisibility(); + App::wnd()->setInnerFocus(); +} + void HistoryWidget::animStop() { if (!_showAnim.animating()) return; _showAnim.stop(); @@ -4502,7 +4507,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _attachPhoto.move(_attachDocument.x(), _attachDocument.y()); _replyForwardPreviewCancel.move(width() - _replyForwardPreviewCancel.width(), _field.y() - st::sendPadding - _replyForwardPreviewCancel.height()); - updateListSize(); + updateListSize(App::main() ? App::main()->contentScrollAddToY() : 0); bool kbShowShown = hist && !_kbShown && _keyboard.hasMarkup(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0), _field.height()); @@ -4841,6 +4846,13 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { } } +void HistoryWidget::onFieldTabbed() { + QString sel = _attachMention.isHidden() ? QString() : _attachMention.getSelected(); + if (!sel.isEmpty()) { + _field.onMentionHashtagOrBotCommandInsert(sel); + } +} + void HistoryWidget::onStickerSend(DocumentData *sticker) { if (!hist || !sticker) return; @@ -5403,9 +5415,9 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { return; } - bool hasTopBar = !App::main()->topBar()->isHidden(); + bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); QRect fill(0, 0, width(), App::main()->height()); - int fromy = hasTopBar ? (-st::topBarHeight) : 0, x = 0, y = 0; + int fromy = (hasTopBar ? (-st::topBarHeight) : 0) + (hasPlayer ? (-st::playerHeight) : 0), x = 0, y = 0; QPixmap cached = App::main()->cachedBackground(fill, x, y); if (cached.isNull()) { const QPixmap &pix(*cChatBackground()); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index e5204709c..0dced5131 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -416,6 +416,7 @@ public: void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false); bool showStep(float64 ms); void animStop(); + void doneShow(); QPoint clampMousePosition(QPoint point); @@ -528,6 +529,7 @@ public slots: void onMentionHashtagOrBotCommandInsert(QString str); void onTextChange(); + void onFieldTabbed(); void onStickerSend(DocumentData *sticker); void onVisibleChanged(); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 243a93f44..c0f979b7b 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -1036,6 +1036,14 @@ namespace { cSetDialogLastPath(path); } break; + case dbiSongVolume: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetSongVolume(snap(v / 1e6, 0., 1.)); + } break; + default: LOG(("App Error: unknown blockId in _readSetting: %1").arg(blockId)); return false; @@ -1257,7 +1265,7 @@ namespace { _writeMap(WriteMapFast); } - uint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); + uint32 size = 12 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); @@ -1278,6 +1286,7 @@ namespace { data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); data.stream << quint32(dbiEmojiTab) << qint32(cEmojiTab()); data.stream << quint32(dbiDialogLastPath) << cDialogLastPath(); + data.stream << quint32(dbiSongVolume) << qint32(qRound(cSongVolume() * 1e6)); { RecentEmojisPreload v(cRecentEmojisPreload()); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 635f152fc..c1a80ed29 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -277,7 +277,7 @@ void TopBarWidget::showAll() { resizeEvent(0); return; } - PeerData *p = App::main() ? App::main()->profilePeer() : 0; + PeerData *p = App::main() ? App::main()->profilePeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0; if (p && (p->chat || p->asUser()->contact >= 0)) { if (p->chat) { if (p->asChat()->forbidden) { @@ -324,7 +324,7 @@ void TopBarWidget::showAll() { _mediaType.hide(); } } - if (App::main() && App::main()->historyPeer() && !p && _clearSelection.isHidden() && !cWideMode()) { + if (App::main() && App::main()->historyPeer() && !o && !p && _clearSelection.isHidden() && !cWideMode()) { _info.show(); } else { _info.hide(); @@ -350,9 +350,12 @@ MainWidget *TopBarWidget::main() { return static_cast(parentWidget()); } -MainWidget::MainWidget(Window *window) : QWidget(window), _started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), -dialogs(this), history(this), profile(0), overview(0), _topBar(this), _forwardConfirm(0), hider(0), _mediaType(this), _mediaTypeMask(0), -updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), _onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), +MainWidget::MainWidget(Window *window) : QWidget(window), +_started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), +dialogs(this), history(this), profile(0), overview(0), _player(this), _topBar(this), +_forwardConfirm(0), hider(0), _contentScrollAddToY(0), _playerHeight(0), _mediaType(this), _mediaTypeMask(0), +updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), +_onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _background(0), _api(new ApiWrap(this)) { setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); @@ -397,7 +400,10 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr App::wnd()->getTitle()->updateBackButton(); _topBar.hide(); + _player.hide(); + _topBar.raise(); + _player.raise(); dialogs.raise(); _mediaType.raise(); @@ -613,7 +619,7 @@ void MainWidget::noHider(HistoryHider *destroyed) { onPeerShown(history.peer()); if (profile || overview || (history.peer() && history.peer()->id)) { dialogs.enableShadow(false); - QPixmap animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)), + QPixmap animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); dialogs.enableShadow(); _topBar.enableShadow(); @@ -651,7 +657,7 @@ void MainWidget::hiderLayer(HistoryHider *h) { hider->hide(); dialogs.enableShadow(false); - QPixmap animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + QPixmap animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); dialogs.enableShadow(); _topBar.enableShadow(); @@ -1138,13 +1144,14 @@ void MainWidget::overviewPreloaded(PeerData *peer, const MTPmessages_Messages &r } } - mediaOverviewUpdated(peer); + mediaOverviewUpdated(peer, type); } -void MainWidget::mediaOverviewUpdated(PeerData *peer) { - if (profile) profile->mediaOverviewUpdated(peer); +void MainWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (profile) profile->mediaOverviewUpdated(peer, type); + if (!_player.isHidden()) _player.mediaOverviewUpdated(peer, type); if (overview && overview->peer() == peer) { - overview->mediaOverviewUpdated(peer); + overview->mediaOverviewUpdated(peer, type); int32 mask = 0; History *h = peer ? App::historyLoaded(peer->id) : 0; @@ -1336,7 +1343,7 @@ void MainWidget::photosLoaded(History *h, const MTPmessages_Messages &msgs, mtpR h->_overview[type].push_front(item->id); } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(h->peer); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(h->peer, type); } void MainWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) { @@ -1417,7 +1424,7 @@ void MainWidget::audioLoadProgress(mtpFileLoader *loader) { AudioMsgId playing; AudioPlayerState state = AudioPlayerStopped; audioPlayer()->currentState(&playing, &state); - if (playing.msgId == audio->openOnSaveMsgId && state != AudioPlayerStopped) { + if (playing.msgId == audio->openOnSaveMsgId && !(state & AudioPlayerStoppedMask) && state != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewAudios); } else { audioPlayer()->play(AudioMsgId(audio, audio->openOnSaveMsgId)); @@ -1480,9 +1487,12 @@ void MainWidget::audioPlayProgress(const AudioMsgId &audioId) { void MainWidget::documentPlayProgress(const SongMsgId &songId) { SongMsgId playing; - AudioPlayerState state = AudioPlayerStopped; - audioPlayer()->currentState(&playing, &state); - if (playing == songId && state == AudioPlayerStoppedAtStart) { + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == songId && playingState == AudioPlayerStoppedAtStart) { + playingState = AudioPlayerStopped; audioPlayer()->clearStoppedAtStart(songId); DocumentData *document = songId.song; @@ -1518,11 +1528,33 @@ void MainWidget::documentPlayProgress(const SongMsgId &songId) { } } + if (playing == songId) { + _player.updateState(playing, playingState, playingPosition, playingDuration, playingFrequency); + + if (!(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + if (_player.isHidden()) { + _player.clearSelection(); + _player.show(); + _playerHeight = _contentScrollAddToY = _player.height(); + resizeEvent(0); + } + } + } + if (HistoryItem *item = App::histItemById(songId.msgId)) { msgUpdated(item->history()->peer->id, item); } } +void MainWidget::hidePlayer() { + if (!_player.isHidden()) { + _player.hide(); + _contentScrollAddToY = -_player.height(); + _playerHeight = 0; + resizeEvent(0); + } +} + void MainWidget::audioLoadFailed(mtpFileLoader *loader, bool started) { loadFailed(loader, started, SLOT(audioLoadRetry())); AudioData *audio = App::audio(loader->objId()); @@ -1552,10 +1584,12 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { SongMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing.msgId == item->id && playingState != AudioPlayerStopped) { + if (playing.msgId == item->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewDocuments); } else { - audioPlayer()->play(SongMsgId(document, item->id)); + SongMsgId song(document, item->id); + audioPlayer()->play(song); + if (App::main()) App::main()->documentPlayProgress(song); } } else if(document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { QImageReader reader(already); @@ -1589,6 +1623,21 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { } } App::wnd()->documentUpdated(document); + + if (audioPlayer()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing.song == document && !_player.isHidden()) { + if (document->loader) { + _player.updateState(playing, playingState, playingPosition, playingDuration, playingFrequency); + } else { + audioPlayer()->play(playing); + } + } + } } void MainWidget::documentLoadFailed(mtpFileLoader *loader, bool started) { @@ -1848,19 +1897,19 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { hider = 0; } if (force || !selectingPeer()) { - if (!animating() && ((history.isHidden() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { + if (!animating() && ((history.isHidden() && history.activePeer() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { dialogs.enableShadow(false); if (peerId) { _topBar.enableShadow(false); if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, st::topBarHeight, width() - _dialogsWidth, height() - st::topBarHeight)); + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight + st::topBarHeight, width() - _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } else { - animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)); + animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } } else if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); } else { - animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); } if (peerId || cWideMode()) { animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); @@ -1909,6 +1958,8 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { history.show(); if (!animCache.isNull()) { history.animShow(animCache, animTopBarCache, back); + } else { + QTimer::singleShot(0, this, SLOT(setInnerFocus())); } } } @@ -1958,8 +2009,12 @@ PeerData *MainWidget::profilePeer() { return profile ? profile->peer() : 0; } +PeerData *MainWidget::overviewPeer() { + return overview ? overview->peer() : 0; +} + bool MainWidget::mediaTypeSwitch() { - if (!overview) return false; + if (!overview || (overview->type() == OverviewAudioDocuments)) return false; for (int32 i = 0; i < OverviewCount; ++i) { if (!(_mediaTypeMask & ~(1 << i))) { @@ -1974,13 +2029,21 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool if (overview && overview->peer() == peer) { if (overview->type() != type) { overview->switchType(type); + } else if (type == OverviewAudioDocuments) { // hack for player + showBackFromStack(); } return; } dialogs.enableShadow(false); _topBar.enableShadow(false); - QPixmap animCache = myGrab(this, history.geometry()), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + QRect topBarRect = QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight); + QRect historyRect = QRect(history.x(), topBarRect.y() + topBarRect.height(), history.width(), history.y() + history.height() - topBarRect.y() - topBarRect.height()); + QPixmap animCache, animTopBarCache; + if (!animating() && (!cWideMode() || profile || overview || history.peer())) { + animCache = myGrab(this, historyRect); + animTopBarCache = myGrab(this, topBarRect); + } dialogs.enableShadow(); _topBar.enableShadow(); if (!back) { @@ -1988,7 +2051,7 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool _stack.push_back(new StackItemOverview(overview->peer(), overview->type(), overview->lastWidth(), overview->lastScrollTop())); } else if (profile) { _stack.push_back(new StackItemProfile(profile->peer(), profile->lastScrollTop(), profile->allMediaShown())); - } else { + } else if (history.peer()) { _stack.push_back(new StackItemHistory(history.peer(), history.lastWidth(), history.lastScrollTop(), history.replyReturns(), history.kbWasHidden())); } } @@ -2009,12 +2072,19 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool _mediaTypeMask = 0; _topBar.show(); resizeEvent(0); - mediaOverviewUpdated(peer); - overview->animShow(animCache, animTopBarCache, back, lastScrollTop); + mediaOverviewUpdated(peer, type); + if (!animCache.isNull()) { + overview->animShow(animCache, animTopBarCache, back, lastScrollTop); + } else { + overview->show(); + overview->activate(); + } history.animStop(); history.showPeer(0, 0, false, true); history.hide(); + if (!cWideMode()) dialogs.hide(); _topBar.raise(); + _player.raise(); dialogs.raise(); _mediaType.raise(); if (hider) hider->raise(); @@ -2060,6 +2130,7 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, history.showPeer(0, 0, false, true); history.hide(); _topBar.raise(); + _player.raise(); dialogs.raise(); _mediaType.raise(); if (hider) hider->raise(); @@ -2067,7 +2138,16 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, } void MainWidget::showBackFromStack() { - if (_stack.isEmpty() || selectingPeer()) return; + if (selectingPeer()) return; + if (_stack.isEmpty()) { + if (cWideMode()) { + showPeer(0, 0, false, true); + QTimer::singleShot(0, this, SLOT(setInnerFocus())); + } else { + onShowDialogs(); + } + return; + } StackItem *item = _stack.back(); _stack.pop_back(); if (item->type() == HistoryStackItem) { @@ -2313,19 +2393,26 @@ void MainWidget::resizeEvent(QResizeEvent *e) { if (cWideMode()) { _dialogsWidth = snap((width() * 5) / 14, st::dlgMinWidth, st::dlgMaxWidth); dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); - history.setGeometry(_dialogsWidth, tbh, width() - _dialogsWidth, height() - tbh); + _player.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, _player.height()); + _topBar.setGeometry(_dialogsWidth, _playerHeight, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(_dialogsWidth, _playerHeight + tbh, width() - _dialogsWidth, height() - _playerHeight - tbh); if (hider) hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); } else { _dialogsWidth = width(); - dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(0, 0, _dialogsWidth, st::topBarHeight + st::titleShadow); - history.setGeometry(0, tbh, _dialogsWidth, height() - tbh); + _player.setGeometry(0, 0, _dialogsWidth, _player.height()); + dialogs.setGeometry(0, _playerHeight, _dialogsWidth + st::dlgShadow, height() - _playerHeight); + _topBar.setGeometry(0, _playerHeight, _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(0, _playerHeight + tbh, _dialogsWidth, height() - _playerHeight - tbh); if (hider) hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); } - _mediaType.move(width() - _mediaType.width(), st::topBarHeight); + _mediaType.move(width() - _mediaType.width(), _playerHeight + st::topBarHeight); if (profile) profile->setGeometry(history.geometry()); if (overview) overview->setGeometry(history.geometry()); + _contentScrollAddToY = 0; +} + +int32 MainWidget::contentScrollAddToY() const { + return _contentScrollAddToY; } void MainWidget::keyPressEvent(QKeyEvent *e) { @@ -2355,8 +2442,14 @@ void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { } void MainWidget::topBarShadowParams(int32 &x, float64 &o) { - if (!profile && !overview && dialogs.isHidden()) { - history.topBarShadowParams(x, o); + if (!cWideMode() && dialogs.isHidden()) { + if (profile) { + if (!history.activePeer()) profile->topBarShadowParams(x, o); + } else if (overview) { + if (!history.activePeer()) overview->topBarShadowParams(x, o); + } else { + history.topBarShadowParams(x, o); + } } } @@ -2384,6 +2477,10 @@ TopBarWidget *MainWidget::topBar() { return &_topBar; } +PlayerWidget *MainWidget::player() { + return &_player; +} + void MainWidget::onTopBarClick() { if (profile) { profile->topBarClick(); @@ -3451,7 +3548,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } } App::markPeerUpdated(user); - if (App::wnd()) App::wnd()->mediaOverviewUpdated(user); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(user, OverviewCount); } } break; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 30c14ce49..7a7e6582b 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -21,6 +21,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "historywidget.h" #include "profilewidget.h" #include "overviewwidget.h" +#include "playerwidget.h" #include "apiwrap.h" class Window; @@ -189,6 +190,9 @@ public: void topBarShadowParams(int32 &x, float64 &o); TopBarWidget *topBar(); + PlayerWidget *player(); + int32 contentScrollAddToY() const; + void animShow(const QPixmap &bgAnimCache, bool back = false); bool animStep(float64 ms); @@ -233,6 +237,7 @@ public: PeerData *activePeer(); MsgId activeMsgId(); PeerData *profilePeer(); + PeerData *overviewPeer(); bool mediaTypeSwitch(); void showPeerProfile(PeerData *peer, bool back = false, int32 lastScrollTop = -1, bool allMediaShown = false); void showMediaOverview(PeerData *peer, MediaOverviewType type, bool back = false, int32 lastScrollTop = -1); @@ -313,7 +318,7 @@ public: void searchMessages(const QString &query); void preloadOverviews(PeerData *peer); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void changingMsgId(HistoryItem *row, MsgId newId); void itemRemoved(HistoryItem *item); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); @@ -391,6 +396,7 @@ public slots: void documentLoadFailed(mtpFileLoader *loader, bool started); void documentLoadRetry(); void documentPlayProgress(const SongMsgId &songId); + void hidePlayer(); void setInnerFocus(); void dialogsCancelled(); @@ -490,12 +496,16 @@ private: HistoryWidget history; ProfileWidget *profile; OverviewWidget *overview; + PlayerWidget _player; TopBarWidget _topBar; ConfirmBox *_forwardConfirm; // for narrow mode HistoryHider *hider; StackItems _stack; QPixmap profileAnimCache; + int32 _playerHeight; + int32 _contentScrollAddToY; + Dropdown _mediaType; int32 _mediaTypeMask; diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 56441c375..2036a644f 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -136,19 +136,19 @@ void MediaView::moveToScreen() { } int32 navSkip = 2 * st::mvControlMargin + st::mvControlSize; - _closeNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize, width()); + _closeNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize); _closeNavIcon = centersprite(_closeNav, st::mvClose); - _leftNav = rtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); + _leftNav = myrtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip); _leftNavIcon = centersprite(_leftNav, st::mvLeft); - _rightNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); + _rightNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip); _rightNavIcon = centersprite(_rightNav, st::mvRight); _saveMsg.moveTo((width() - _saveMsg.width()) / 2, (height() - _saveMsg.height()) / 2); } -void MediaView::mediaOverviewUpdated(PeerData *peer) { +void MediaView::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { if (!_photo && !_doc) return; - if (_history && _history->peer == peer) { + if (_history && _history->peer == peer && type == _overview) { _index = -1; for (int i = 0, l = _history->_overview[_overview].size(); i < l; ++i) { if (_history->_overview[_overview].at(i) == _msgid) { @@ -158,7 +158,7 @@ void MediaView::mediaOverviewUpdated(PeerData *peer) { } updateControls(); preloadData(0); - } else if (_user == peer) { + } else if (_user == peer && type == OverviewCount) { if (!_photo) return; _index = -1; @@ -192,7 +192,7 @@ void MediaView::changingMsgId(HistoryItem *row, MsgId newId) { if (row->id == _msgid) { _msgid = newId; } - mediaOverviewUpdated(row->history()->peer); + mediaOverviewUpdated(row->history()->peer, _overview); } void MediaView::updateDocSize() { @@ -258,9 +258,9 @@ void MediaView::updateControls() { } _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull())))); - _saveNav = rtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); + _saveNav = myrtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _saveNavIcon = centersprite(_saveNav, st::mvSave); - _moreNav = rtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); + _moreNav = myrtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _moreNavIcon = centersprite(_moreNav, st::mvMore); QDateTime d(date(_photo ? _photo->date : _doc->date)), dNow(date(unixtime())); @@ -273,11 +273,11 @@ void MediaView::updateControls() { } if (_from) { _fromName.setText(st::mvFont, _from->name); - _nameNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height, width()); - _dateNav = rtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); + _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } else { _nameNav = QRect(); - _dateNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); + _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } updateHeader(); if (_photo) { @@ -349,7 +349,6 @@ bool MediaView::animStep(float64 msp) { a_cOpacity.finish(); _controlsState = (_controlsState == ControlsShowing ? ControlsShown : ControlsHidden); setCursor(_controlsState == ControlsHidden ? Qt::BlankCursor : (_over == OverNone ? style::cur_default : style::cur_pointer)); - LOG(("Finished with controls!")); } else { a_cOpacity.update(dt, anim::linear); } @@ -410,7 +409,6 @@ void MediaView::close() { void MediaView::activateControls() { _controlsHideTimer.start(int(st::mvWaitHide)); if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) { - LOG(("Showing controls..")); _controlsState = ControlsShowing; _controlsAnimStarted = getms(); a_cOpacity.start(1); @@ -421,7 +419,6 @@ void MediaView::activateControls() { void MediaView::onHideControls(bool force) { if (!force && !_dropdown.isHidden()) return; if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) return; - LOG(("Hiding controls..")); _controlsState = ControlsHiding; _controlsAnimStarted = getms(); a_cOpacity.start(0); @@ -906,7 +903,7 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // _docSize is updated in updateControls() _docRect = QRect((width() - st::mvDocSize.width()) / 2, (height() - st::mvDocSize.height()) / 2, st::mvDocSize.width(), st::mvDocSize.height()); - _docIconRect = rtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight(), width()); + _docIconRect = myrtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight()); } else if (!_current.isNull()) { _current.setDevicePixelRatio(cRetinaFactor()); _w = _current.width() / cIntRetinaFactor(); @@ -1264,11 +1261,6 @@ void MediaView::paintEvent(QPaintEvent *e) { } } } - -// static uint64 t = getms(); -// uint64 t2 = getms(); -// LOG(("paint: %1, wait: %2, name: %3, icon: %4").arg(t2 - ms).arg(t2 - t).arg(logBool(name)).arg(logBool(icon))); -// t = t2; } void MediaView::keyPressEvent(QKeyEvent *e) { @@ -1828,7 +1820,7 @@ void MediaView::findCurrent() { } } - if (_history->_overviewCount[_overview] < 0) { + if (_history->_overviewCount[_overview] < 0 || (!_index && _history->_overviewCount[_overview] > 0)) { loadBack(); } } @@ -1877,7 +1869,7 @@ void MediaView::userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mt photo->thumb->load(); u->photos.push_back(photo); } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(u); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(u, OverviewCount); } void MediaView::updateHeader() { @@ -1913,7 +1905,7 @@ void MediaView::updateHeader() { hwidth = width() / 3; _headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth); } - _headerNav = rtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height, width()); + _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height); } // //void MediaView::updatePolaroid() { diff --git a/Telegram/SourceFiles/mediaview.h b/Telegram/SourceFiles/mediaview.h index 6735a2317..11b99e266 100644 --- a/Telegram/SourceFiles/mediaview.h +++ b/Telegram/SourceFiles/mediaview.h @@ -55,7 +55,7 @@ public: updateOver(mapFromGlobal(QCursor::pos())); } - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void documentUpdated(DocumentData *doc); void changingMsgId(HistoryItem *row, MsgId newId); void updateDocSize(); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index e3801a826..9b1b7e095 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -1681,8 +1681,12 @@ void OverviewWidget::onScroll() { } void OverviewWidget::resizeEvent(QResizeEvent *e) { + int32 st = _scroll.scrollTop(); _scroll.resize(size()); - int32 newScrollTop = _inner.resizeToWidth(width(), _scroll.scrollTop(), height()); + int32 newScrollTop = _inner.resizeToWidth(width(), st, height()); + if (int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0) { + newScrollTop += addToY; + } if (newScrollTop != _scroll.scrollTop()) { _noDropResizeIndex = true; _scroll.scrollToY(newScrollTop); @@ -1700,33 +1704,36 @@ void OverviewWidget::paintEvent(QPaintEvent *e) { return; } - bool hasTopBar = !App::main()->topBar()->isHidden(); QRect r(e->rect()); if (type() == OverviewPhotos) { p.fillRect(r, st::white->b); - } else if (cTileBackground()) { - int left = r.left(), top = r.top(), right = r.left() + r.width(), bottom = r.top() + r.height(); - if (right > 0 && bottom > 0) { - QRect fill(left, top + (hasTopBar ? st::topBarHeight : 0), right, bottom + (hasTopBar ? st::topBarHeight : 0)); - - if (hasTopBar) p.translate(0, -st::topBarHeight); - p.fillRect(fill, QBrush(*cChatBackground())); - if (hasTopBar) p.translate(0, st::topBarHeight); - } } else { + bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); QRect fill(0, 0, width(), App::main()->height()); - int fromy = hasTopBar ? (-st::topBarHeight) : 0, x = 0, y = 0; + int fromy = (hasTopBar ? (-st::topBarHeight) : 0) + (hasPlayer ? (-st::playerHeight) : 0), x = 0, y = 0; QPixmap cached = App::main()->cachedBackground(fill, x, y); if (cached.isNull()) { - bool smooth = p.renderHints().testFlag(QPainter::SmoothPixmapTransform); - p.setRenderHint(QPainter::SmoothPixmapTransform); + const QPixmap &pix(*cChatBackground()); + if (cTileBackground()) { + int left = r.left(), top = r.top(), right = r.left() + r.width(), bottom = r.top() + r.height(); + float64 w = pix.width() / cRetinaFactor(), h = pix.height() / cRetinaFactor(); + int sx = qFloor(left / w), sy = qFloor((top - fromy) / h), cx = qCeil(right / w), cy = qCeil((bottom - fromy) / h); + for (int i = sx; i < cx; ++i) { + for (int j = sy; j < cy; ++j) { + p.drawPixmap(QPointF(i * w, fromy + j * h), pix); + } + } + } else { + bool smooth = p.renderHints().testFlag(QPainter::SmoothPixmapTransform); + p.setRenderHint(QPainter::SmoothPixmapTransform); - QRect to, from; - App::main()->backgroundParams(fill, to, from); - to.moveTop(to.top() + fromy); - p.drawPixmap(to, *cChatBackground(), from); + QRect to, from; + App::main()->backgroundParams(fill, to, from); + to.moveTop(to.top() + fromy); + p.drawPixmap(to, pix, from); - if (!smooth) p.setRenderHint(QPainter::SmoothPixmapTransform, false); + if (!smooth) p.setRenderHint(QPainter::SmoothPixmapTransform, false); + } } else { p.drawPixmap(x, fromy + y, cached); } @@ -1760,6 +1767,13 @@ void OverviewWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void OverviewWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void OverviewWidget::topBarClick() { App::main()->showBackFromStack(); } @@ -1781,6 +1795,7 @@ void OverviewWidget::switchType(MediaOverviewType type) { case OverviewVideos: _header = lang(lng_profile_videos_header); break; case OverviewDocuments: _header = lang(lng_profile_files_header); break; case OverviewAudios: _header = lang(lng_profile_audios_header); break; + case OverviewAudioDocuments: _header = lang(lng_profile_audio_files_header); break; } noSelectingScroll(); App::main()->topBar()->showSelected(0); @@ -1847,10 +1862,7 @@ bool OverviewWidget::animStep(float64 ms) { a_alpha.finish(); _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); - _scroll.show(); - _scroll.scrollToY(_scrollSetAfterShow); - activate(); - onScroll(); + doneShow(); } else { a_bgCoord.update(dt1, st::introHideFunc); a_bgAlpha.update(dt1, st::introAlphaHideFunc); @@ -1862,8 +1874,15 @@ bool OverviewWidget::animStep(float64 ms) { return res; } -void OverviewWidget::mediaOverviewUpdated(PeerData *p) { - if (peer() == p) { +void OverviewWidget::doneShow() { + _scroll.show(); + _scroll.scrollToY(_scrollSetAfterShow); + activate(); + onScroll(); +} + +void OverviewWidget::mediaOverviewUpdated(PeerData *p, MediaOverviewType t) { + if (peer() == p && t == type()) { _inner.mediaOverviewUpdated(); onScroll(); updateTopBarSelection(); diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index f280f1ac8..3f3b82db3 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -142,6 +142,7 @@ private: } CachedItem; typedef QVector CachedItems; CachedItems _items; + int32 _width, _height, _minHeight, _addToY; // selection support, like in HistoryWidget @@ -199,6 +200,7 @@ public: void scrollBy(int32 add); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); PeerData *peer() const; @@ -212,7 +214,9 @@ public: void animShow(const QPixmap &oldAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false, int32 lastScrollTop = -1); bool animStep(float64 ms); - void mediaOverviewUpdated(PeerData *peer); + void doneShow(); + + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void changingMsgId(HistoryItem *row, MsgId newId); void msgUpdated(PeerId peer, const HistoryItem *msg); void itemRemoved(HistoryItem *item); diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp new file mode 100644 index 000000000..dd829cd1a --- /dev/null +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -0,0 +1,548 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "style.h" +#include "lang.h" + +#include "boxes/addcontactbox.h" +#include "application.h" +#include "window.h" +#include "playerwidget.h" +#include "mainwidget.h" + +#include "localstorage.h" + +#include "audio.h" + +PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent), +_prevAvailable(false), _nextAvailable(false), _fullAvailable(false), +_over(OverNone), _down(OverNone), _downCoord(0), _downProgress(0.), _downFrequency(AudioVoiceMsgFrequency), +_stateAnim(animFunc(this, &PlayerWidget::stateStep)), +_index(-1), _history(0), _showPause(false), _position(0), _duration(0), _loaded(0), +a_progress(0., 0.), a_loadProgress(0., 0.), _progressAnim(animFunc(this, &PlayerWidget::progressStep)) { + resize(st::wndMinWidth, st::playerHeight); + setMouseTracking(true); + memset(_stateHovers, 0, sizeof(_stateHovers)); +} + +void PlayerWidget::paintEvent(QPaintEvent *e) { + Painter p(this); + + QRect r(e->rect()), checkr(myrtlrect(r)); + p.fillRect(r, st::playerBg->b); + + if (!_playbackRect.contains(checkr)) { + if (_fullAvailable && checkr.intersects(_prevRect)) { + if (_prevAvailable) { + float64 o = _stateHovers[OverPrev]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + } else { + p.setOpacity(st::playerUnavailableOpacity); + } + p.drawSpriteCenterLeft(_prevRect, width(), st::playerPrev); + } + if (checkr.intersects(_playRect)) { + float64 o = _stateHovers[OverPlay]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_playRect, width(), (_showPause || _down == OverPlayback) ? st::playerPause : st::playerPlay); + } + if (_fullAvailable && checkr.intersects(_nextRect)) { + if (_nextAvailable) { + float64 o = _stateHovers[OverNext]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + } else { + p.setOpacity(st::playerUnavailableOpacity); + } + p.drawSpriteCenterLeft(_nextRect, width(), st::playerNext); + } + if (checkr.intersects(_closeRect)) { + float64 o = _stateHovers[OverClose]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_closeRect, width(), st::playerClose); + } + if (checkr.intersects(_volumeRect)) { + float64 o = _stateHovers[OverVolume]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + int32 top = _volumeRect.y() + (_volumeRect.height() - st::playerVolume.pxHeight()) / 2; + int32 left = _volumeRect.x() + (_volumeRect.width() - st::playerVolume.pxWidth()) / 2; + int32 mid = left + qRound(st::playerVolume.pxWidth() * cSongVolume()); + int32 right = left + st::playerVolume.pxWidth(); + if (rtl()) { + left = width() - left; + mid = width() - mid; + right = width() - right; + if (mid < left) { + p.drawPixmap(QRect(mid, top, left - mid, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x() + (mid - right) * cIntRetinaFactor(), st::playerVolume.y(), (left - mid) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + if (right < mid) { + p.setOpacity(st::playerUnavailableOpacity); + p.drawPixmap(QRect(right, top, mid - right, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x(), st::playerVolume.y(), (mid - right) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + } else { + if (mid > left) { + p.drawPixmap(QRect(left, top, mid - left, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x(), st::playerVolume.y(), (mid - left) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + if (right > mid) { + p.setOpacity(st::playerUnavailableOpacity); + p.drawPixmap(QRect(mid, top, right - mid, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x() + (mid - left) * cIntRetinaFactor(), st::playerVolume.y(), (right - mid) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + } + } + if (_fullAvailable && checkr.intersects(_fullRect)) { + float64 o = _stateHovers[OverFull]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_fullRect, width(), st::playerFull); + } + p.setOpacity(1.); + + p.setPen(st::playerTimeFg->p); + p.setFont(st::linkFont->f); + p.drawTextLeft(_infoRect.x() + _infoRect.width() - _timeWidth, _infoRect.y() + (_infoRect.height() - st::linkFont->height) / 2, width(), _time, _timeWidth); + + textstyleSet(&st::playerNameStyle); + p.setPen(st::playerFg->p); + _name.drawElided(p, _infoRect.x() + (rtl() ? (_timeWidth + st::playerSkip) : 0), _infoRect.y() + (_infoRect.height() - st::linkFont->height) / 2, _infoRect.width() - _timeWidth - st::playerSkip); + textstyleRestore(); + } + + if (_duration) { + float64 prg = (_down == OverPlayback) ? _downProgress : a_progress.current(); + int32 from = _playbackRect.x(), mid = qRound(_playbackRect.x() + prg * _playbackRect.width()), end = _playbackRect.x() + _playbackRect.width(); + if (mid > from) { + p.fillRect(rtl() ? (width() - mid) : from, height() - st::playerLineHeight, mid - from, _playbackRect.height(), st::playerLineActive->b); + } + if (end > mid) { + p.fillRect(rtl() ? (width() - end) : mid, height() - st::playerLineHeight, end - mid, st::playerLineHeight, st::playerLineInactive->b); + } + if (_stateHovers[OverPlayback] > 0) { + p.setOpacity(_stateHovers[OverPlayback]); + + int32 x = mid - (st::playerMoverSize.width() / 2); + p.fillRect(rtl() ? (width() - x - st::playerMoverSize.width()) : x, height() - st::playerMoverSize.height(), st::playerMoverSize.width(), st::playerMoverSize.height(), st::playerLineActive->b); + } + } else if (a_loadProgress.current() > 0) { + int32 from = _playbackRect.x(), mid = qRound(_playbackRect.x() + a_loadProgress.current() * _playbackRect.width()); + if (mid > from) { + p.fillRect(rtl() ? (width() - mid) : from, height() - st::playerLineHeight, mid - from, _playbackRect.height(), st::playerLineInactive->b); + } + } +} + +void PlayerWidget::mousePressEvent(QMouseEvent *e) { + QPoint pos(myrtlpoint(e->pos())); + + if (e->button() == Qt::LeftButton) { + _down = OverNone; + if (_song && _over == OverPlay) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + audioPlayer()->play(_song); + if (App::main()) App::main()->documentPlayProgress(_song); + } + return; + } else if (_over == OverPrev) { + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) { + startPlay(o->at(_index - 1)); + } + } else if (_over == OverNext) { + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { + startPlay(o->at(_index + 1)); + } + } else if (_over == OverClose) { + _down = OverClose; + } else if (_over == OverVolume) { + _down = OverVolume; + _downCoord = pos.x() - _volumeRect.x(); + cSetSongVolume(snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.)); + emit audioPlayer()->songVolumeChanged(); + rtlupdate(_volumeRect); + } else if (_over == OverPlayback) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == _song && playingDuration) { + if (playingState == AudioPlayerPlaying || playingState == AudioPlayerStarting || playingState == AudioPlayerResuming) { + audioPlayer()->pauseresume(OverviewDocuments); + } + _down = OverPlayback; + _downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.); + _downDuration = playingDuration; + _downFrequency = (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency); + + rtlupdate(_playbackRect); + updateDownTime(); + } + } else if (_over == OverFull && _song) { + if (HistoryItem *item = App::histItemById(_song.msgId)) { + App::main()->showMediaOverview(item->history()->peer, OverviewAudioDocuments); + } + } + } +} + +void PlayerWidget::updateDownTime() { + QString time = formatDurationText(qRound(_downDuration * _downProgress) / _downFrequency); + if (time != _time) { + _time = time; + _timeWidth = st::linkFont->m.width(_time); + rtlupdate(_infoRect); + } +} + +void PlayerWidget::updateOverState(OverState newState) { + bool result = true; + if (_over != newState) { + updateOverRect(_over); + updateOverRect(newState); + if (_over != OverNone) { + _stateAnimations.remove(_over); + _stateAnimations[-_over] = getms() - ((1. - _stateHovers[_over]) * st::playerDuration); + if (!_stateAnim.animating()) _stateAnim.start(); + } else { + result = false; + } + _over = newState; + if (newState != OverNone) { + _stateAnimations.remove(-_over); + _stateAnimations[_over] = getms() - (_stateHovers[_over] * st::playerDuration); + if (!_stateAnim.animating()) _stateAnim.start(); + setCursor(style::cur_pointer); + } else { + setCursor(style::cur_default); + } + } +} + +void PlayerWidget::updateOverRect(OverState state) { + switch (state) { + case OverPrev: rtlupdate(_prevRect); break; + case OverPlay: rtlupdate(_playRect); break; + case OverNext: rtlupdate(_nextRect); break; + case OverClose: rtlupdate(_closeRect); break; + case OverVolume: rtlupdate(_volumeRect); break; + case OverFull: rtlupdate(_fullRect); break; + case OverPlayback: rtlupdate(_playbackRect); break; + } +} + +void PlayerWidget::updateControls() { + _fullAvailable = (_index >= 0); + _prevAvailable = _fullAvailable && (_index > 0); + _nextAvailable = _fullAvailable && (_index < _history->_overview[OverviewAudioDocuments].size() - 1); + resizeEvent(0); + update(); + + if (_index >= 0 && _index < MediaOverviewStartPerPage) { + if (_history->_overviewCount[OverviewAudioDocuments] < 0 || _history->_overviewCount[OverviewAudioDocuments] > 0) { + if (App::main()) App::main()->loadMediaBack(_history->peer, OverviewAudioDocuments); + } + } +} + +void PlayerWidget::findCurrent() { + _index = -1; + if (!_history) return; + + const History::MediaOverview *o = &_history->_overview[OverviewAudioDocuments]; + for (int i = 0, l = o->size(); i < l; ++i) { + if (o->at(i) == _song.msgId) { + _index = i; + break; + } + } + if (_index < 0) return; + + if (_index < o->size() - 1) { + if (HistoryItem *next = App::histItemById(o->at(_index + 1))) { + if (HistoryDocument *document = static_cast(next->getMedia())) { + if (document->document()->already(true).isEmpty() && document->document()->data.isEmpty()) { + if (!document->document()->loader) { + DocumentOpenLink::doOpen(document->document()); + document->document()->openOnSave = document->document()->openOnSaveMsgId = 0; + } + } + } + } + } +} + +void PlayerWidget::startPlay(MsgId msgId) { + if (HistoryItem *item = App::histItemById(msgId)) { + if (HistoryDocument *doc = static_cast(item->getMedia())) { + audioPlayer()->play(SongMsgId(doc->document(), item->id)); + updateState(); + } + } +} + +void PlayerWidget::clearSelection() { + for (StateAnimations::const_iterator i = _stateAnimations.cbegin(); i != _stateAnimations.cend(); ++i) { + _stateHovers[qAbs(i.key())] = 0; + } + _stateAnimations.clear(); +} + +void PlayerWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (_history && _history->peer == peer && type == OverviewAudioDocuments) { + _index = -1; + for (int i = 0, l = _history->_overview[OverviewAudioDocuments].size(); i < l; ++i) { + if (_history->_overview[OverviewAudioDocuments].at(i) == _song.msgId) { + _index = i; + break; + } + } + updateControls(); + } +} + +bool PlayerWidget::seekingSong(const SongMsgId &song) const { + return (_down == OverPlayback) && (song == _song); +} + +bool PlayerWidget::stateStep(float64 ms) { + bool result = false; + uint64 ms = getms(); + for (StateAnimations::iterator i = _stateAnimations.begin(); i != _stateAnimations.cend();) { + int32 over = qAbs(i.key()); + updateOverRect(OverState(over)); + + float64 dt = float64(ms - i.value()) / st::playerDuration; + if (dt >= 1) { + _stateHovers[over] = (i.key() > 0) ? 1 : 0; + i = _stateAnimations.erase(i); + } else { + _stateHovers[over] = (i.key() > 0) ? dt : (1 - dt); + ++i; + } + } + return !_stateAnimations.isEmpty(); +} + +void PlayerWidget::mouseMoveEvent(QMouseEvent *e) { + _lastMousePos = e->globalPos(); + updateSelected(); +} + +void PlayerWidget::leaveEvent(QEvent *e) { + _lastMousePos = QCursor::pos(); + updateSelected(); +} + +void PlayerWidget::updateSelected() { + QPoint pos(myrtlpoint(mapFromGlobal(_lastMousePos))); + + if (_down == OverVolume) { + int32 delta = (pos.x() - _volumeRect.x()) - _downCoord; + float64 startFrom = snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.); + float64 add = delta / float64(4 * st::playerVolume.pxWidth()), result = snap(startFrom + add, 0., 1.); + if (result != cSongVolume()) { + cSetSongVolume(result); + emit audioPlayer()->songVolumeChanged(); + rtlupdate(_volumeRect); + } + } else if (_down == OverPlayback) { + _downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.); + rtlupdate(_playbackRect); + updateDownTime(); + } else if (_down == OverNone) { + bool inInfo = ((pos.x() >= _infoRect.x()) && (pos.x() < _fullRect.x() + _fullRect.width()) && (pos.y() >= _playRect.y()) && (pos.y() <= _playRect.y() + _playRect.height())); + if (_prevAvailable && _prevRect.contains(pos)) { + updateOverState(OverPrev); + } else if (_nextAvailable && _nextRect.contains(pos)) { + updateOverState(OverNext); + } else if (_playRect.contains(pos)) { + updateOverState(OverPlay); + } else if (_closeRect.contains(pos)) { + updateOverState(OverClose); + } else if (_volumeRect.contains(pos)) { + updateOverState(OverVolume); + } else if (_duration && _playbackRect.contains(pos)) { + updateOverState(OverPlayback); + } else if (_fullAvailable && inInfo) { + updateOverState(OverFull); + } else if (_over != OverNone) { + updateOverState(OverNone); + } + } +} + +void PlayerWidget::mouseReleaseEvent(QMouseEvent *e) { + if (_down == OverVolume) { + mouseMoveEvent(e); + Local::writeUserSettings(); + } else if (_down == OverPlayback) { + mouseMoveEvent(e); + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == _song && playingDuration) { + _downDuration = playingDuration; + audioPlayer()->seek(qRound(_downProgress * _downDuration)); + + _showPause = true; + + a_progress = anim::fvalue(_downProgress, _downProgress); + _progressAnim.stop(); + } + update(); + } else if (_down == OverClose && _over == OverClose) { + if (_song) { + audioPlayer()->stop(OverviewDocuments); + if (App::main()) App::main()->hidePlayer(); + } + } + _down = OverNone; +} + +void PlayerWidget::resizeEvent(QResizeEvent *e) { + int32 availh = (height() - st::playerLineHeight); + int32 ch = st::playerPlay.pxHeight() + st::playerSkip, ct = (availh - ch) / 2; + _playbackRect = QRect(cWideMode() ? st::dlgShadow : 0, height() - st::playerMoverSize.height(), width() - (cWideMode() ? st::dlgShadow : 0), st::playerMoverSize.height()); + _prevRect = _fullAvailable ? QRect(st::playerSkip / 2, ct, st::playerPrev.pxWidth() + st::playerSkip, ch) : QRect(); + _playRect = QRect(_fullAvailable ? (_prevRect.x() + _prevRect.width()) : (st::playerSkip / 2), ct, st::playerPlay.pxWidth() + st::playerSkip, ch); + _nextRect = _fullAvailable ? QRect(_playRect.x() + _playRect.width(), ct, st::playerNext.pxWidth() + st::playerSkip, ch) : QRect(); + + _closeRect = QRect(width() - st::playerSkip / 2 - st::playerClose.pxWidth() - st::playerSkip, ct, st::playerClose.pxWidth() + st::playerSkip, ch); + _volumeRect = QRect(_closeRect.x() - st::playerVolume.pxWidth() - st::playerSkip, ct, st::playerVolume.pxWidth() + st::playerSkip, ch); + _fullRect = _fullAvailable ? QRect(_volumeRect.x() - st::playerFull.pxWidth() - st::playerSkip, ct, st::playerFull.pxWidth() + st::playerSkip, ch) : QRect(); + + int32 infoLeft = (_fullAvailable ? (_nextRect.x() + _nextRect.width()) : (_playRect.x() + _playRect.width())); + _infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _volumeRect.x()) - infoLeft - st::playerSkip, availh); + update(); +} + +bool PlayerWidget::progressStep(float64 ms) { + float64 dt = ms / (2 * AudioVoiceMsgUpdateView); + bool res = true; + if (_duration && dt >= 1) { + a_progress.finish(); + a_loadProgress.finish(); + res = false; + } else { + a_progress.update(qMin(dt, 1.), anim::linear); + a_loadProgress.update(1. - (st::radialDuration / (st::radialDuration + ms)), anim::linear); + } + rtlupdate(_playbackRect); + return res; +} + +void PlayerWidget::updateState() { + updateState(SongMsgId(), AudioPlayerStopped, 0, 0, 0); +} + +void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, int64 playingPosition, int64 playingDuration, int32 playingFrequency) { + if (!playing) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + bool songChanged = false; + if (playing && _song != playing) { + songChanged = true; + _song = playing; + if (HistoryItem *item = App::histItemById(_song.msgId)) { + _history = item->history(); + findCurrent(); + } else { + _history = 0; + _index = -1; + } + SongData *song = _song.song->song(); + if (song->performer.isEmpty()) { + _name.setText(st::linkFont, song->title.isEmpty() ? (_song.song->name.isEmpty() ? qsl("Unknown Track") : _song.song->name) : song->title, _textNameOptions); + } else { + TextCustomTagsMap custom; + custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink())); + _name.setRichText(st::linkFont, QString::fromUtf8("[c]%1[/c] \xe2\x80\x93 %2").arg(textRichPrepare(song->performer)).arg(song->title.isEmpty() ? qsl("Unknown Track") : textRichPrepare(song->title)), _textNameOptions, custom); + } + updateControls(); + } + + qint64 position = 0, duration = 0, display = 0; + if (playing == _song) { + if (!(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + display = position = playingPosition; + duration = playingDuration; + } else { + display = playingDuration; + } + display = display / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency); + } else if (_song) { + display = _song.song->song()->duration; + } + QString time = (_down == OverPlayback) ? _time : formatDurationText(display); + bool showPause = false, stopped = ((playingState & AudioPlayerStoppedMask) || playingState == AudioPlayerFinishing); + bool wasPlaying = !!_duration; + if (!stopped) { + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } + float64 progress = duration ? snap(float64(position) / duration, 0., 1.) : 0.; + int32 loaded = duration ? _song.song->size : (_song.song->loader ? _song.song->loader->currentOffset() : 0); + float64 loadProgress = (duration || !_song.song->loader) ? 1. : snap(float64(loaded) / qMax(_song.song->size, 1), 0., 1.); + if (time != _time || showPause != _showPause) { + if (_time != time) { + _time = time; + _timeWidth = st::linkFont->m.width(_time); + } + _showPause = showPause; + if (duration != _duration || position != _position || loaded != _loaded) { + if (!songChanged && ((!stopped && duration && _duration) || (!duration && _loaded != loaded))) { + a_progress.start(progress); + a_loadProgress.start(loadProgress); + _progressAnim.start(); + } else { + a_progress = anim::fvalue(progress, progress); + a_loadProgress = anim::fvalue(loadProgress, loadProgress); + _progressAnim.stop(); + } + _position = position; + _duration = duration; + _loaded = loaded; + } + update(); + } else if (duration != _duration || position != _position || loaded != _loaded) { + if (!songChanged && ((!stopped && duration && _duration) || (!duration && _loaded != loaded))) { + a_progress.start(progress); + a_loadProgress.start(loadProgress); + _progressAnim.start(); + } else { + a_progress = anim::fvalue(progress, progress); + a_loadProgress = anim::fvalue(loadProgress, loadProgress); + _progressAnim.stop(); + } + _position = position; + _duration = duration; + _loaded = loaded; + } + + if (wasPlaying && playingState == AudioPlayerStoppedAtEnd) { + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { + startPlay(o->at(_index + 1)); + } + } +} diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h new file mode 100644 index 000000000..6b8d7ac39 --- /dev/null +++ b/Telegram/SourceFiles/playerwidget.h @@ -0,0 +1,100 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ +#pragma once + +#include "audio.h" + +class PlayerWidget : public TWidget { + Q_OBJECT + +public: + + PlayerWidget(QWidget *parent); + + void paintEvent(QPaintEvent *e); + void mousePressEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + void leaveEvent(QEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + void resizeEvent(QResizeEvent *e); + + bool progressStep(float64 ms); + bool stateStep(float64 ms); + + void updateState(SongMsgId playing, AudioPlayerState playingState, int64 playingPosition, int64 playingDuration, int32 playingFrequency); + void updateState(); + void clearSelection(); + + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); + + bool seekingSong(const SongMsgId &song) const; + +private: + + enum OverState { + OverNone = 0, + OverPrev, + OverPlay, + OverNext, + OverClose, + OverVolume, + OverFull, + OverPlayback, + + OverStateCount + }; + void updateDownTime(); + void updateOverState(OverState newState); + void updateOverRect(OverState state); + + void updateControls(); + void findCurrent(); + + void startPlay(MsgId msgId); + + QPoint _lastMousePos; + void updateSelected(); + + bool _prevAvailable, _nextAvailable, _fullAvailable; + OverState _over, _down; + int32 _downCoord; + int64 _downDuration; + int32 _downFrequency; + float64 _downProgress; + + float64 _stateHovers[OverStateCount]; + typedef QMap StateAnimations; + StateAnimations _stateAnimations; + Animation _stateAnim; + + SongMsgId _song; + int32 _index; + History *_history; + QRect _playRect, _prevRect, _nextRect, _playbackRect; + QRect _closeRect, _volumeRect, _fullRect, _infoRect; + int32 _timeWidth; + QString _time; + Text _name; + bool _showPause; + int64 _position, _duration; + int32 _loaded; + + anim::fvalue a_progress, a_loadProgress; + Animation _progressAnim; + +}; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 8581d072b..a0221743b 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -579,6 +579,8 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); int oneState = 0; // < 0 - loading, 0 - no media, > 0 - link shown for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count < 0) { if (!oneState) oneState = count; @@ -859,6 +861,8 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { _mediaShowAll.move(_left + _width - _mediaShowAll.width(), top); int wasCount = 0; // < 0 - loading, 0 - no media, > 0 - link shown for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + if (_allMediaTypes) { int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { @@ -957,7 +961,7 @@ void ProfileInner::updateNotifySettings() { _enableNotifications.setChecked(_peer->notify == EmptyNotifySettings || _peer->notify == UnknownNotifySettings || _peer->notify->mute < unixtime()); } -void ProfileInner::mediaOverviewUpdated(PeerData *peer) { +void ProfileInner::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { if (peer == _peer) { resizeEvent(0); showAll(); @@ -1029,6 +1033,8 @@ void ProfileInner::showAll() { // shared media bool first = false, wasCount = false, manyCounts = false; for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { if (wasCount) { @@ -1136,8 +1142,13 @@ void ProfileWidget::onScroll() { } void ProfileWidget::resizeEvent(QResizeEvent *e) { + int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; + int32 newScrollY = _scroll.scrollTop() + addToY; _scroll.resize(size()); _inner.resize(width(), _inner.height()); + if (addToY) { + _scroll.scrollToY(newScrollY); + } } void ProfileWidget::mousePressEvent(QMouseEvent *e) { @@ -1176,6 +1187,13 @@ void ProfileWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void ProfileWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void ProfileWidget::topBarClick() { App::main()->showBackFromStack(); } @@ -1253,8 +1271,8 @@ void ProfileWidget::updateNotifySettings() { _inner.updateNotifySettings(); } -void ProfileWidget::mediaOverviewUpdated(PeerData *peer) { - _inner.mediaOverviewUpdated(peer); +void ProfileWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + _inner.mediaOverviewUpdated(peer, type); } void ProfileWidget::clear() { diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 4ecaa77d5..7acc3dfe3 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -53,7 +53,7 @@ public: void loadProfilePhotos(int32 yFrom); void updateNotifySettings(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); ~ProfileInner(); @@ -187,6 +187,7 @@ public: void dropEvent(QDropEvent *e); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); PeerData *peer() const; @@ -200,7 +201,7 @@ public: void updateOnlineDisplayTimer(); void updateNotifySettings(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void clear(); ~ProfileWidget(); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 3634fb63c..a770c64a9 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -156,6 +156,8 @@ int gNotifyDefaultDelay = 1500; int gOtherOnline = 0; +float64 gSongVolume = 0.9; + void settingsParseArgs(int argc, char *argv[]) { #ifdef Q_OS_MAC gCustomNotifies = (QSysInfo::macVersion() < QSysInfo::MV_10_8); diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 39d789b4a..48faec016 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -304,4 +304,6 @@ DeclareSetting(int, NotifyDefaultDelay); DeclareSetting(int, OtherOnline); +DeclareSetting(float64, SongVolume); + void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 522c712e7..c9bbaad73 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -448,7 +448,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { AudioMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing.msgId == App::hoveredLinkItem()->id && playingState != AudioPlayerStopped) { + if (playing.msgId == App::hoveredLinkItem()->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewAudios); } else { audioPlayer()->play(AudioMsgId(data, App::hoveredLinkItem()->id)); @@ -545,9 +545,8 @@ QString AudioData::already(bool check) { return location.name; } -void DocumentOpenLink::onClick(Qt::MouseButton button) const { - DocumentData *data = document(); - if (!data->date || button != Qt::LeftButton) return; +void DocumentOpenLink::doOpen(DocumentData *data) { + if (!data->date) return; bool play = data->song() && App::hoveredLinkItem() && audioPlayer(); QString already = data->already(true); @@ -556,10 +555,12 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { SongMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing.msgId == App::hoveredLinkItem()->id && playingState != AudioPlayerStopped) { + if (playing.msgId == App::hoveredLinkItem()->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewDocuments); } else { - audioPlayer()->play(SongMsgId(data, App::hoveredLinkItem()->id)); + SongMsgId song(data, App::hoveredLinkItem()->id); + audioPlayer()->play(song); + if (App::main()) App::main()->documentPlayProgress(song); } } else if (data->size < MediaViewImageSizeLimit) { QImageReader reader(already); @@ -604,6 +605,11 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { } } +void DocumentOpenLink::onClick(Qt::MouseButton button) const { + if (button != Qt::LeftButton) return; + doOpen(document()); +} + void DocumentSaveLink::doSave(DocumentData *data, bool forceSavingAs) { if (!data->date) return; diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index d73c90d22..7849674ad 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -627,6 +627,7 @@ class DocumentOpenLink : public DocumentLink { public: DocumentOpenLink(DocumentData *document) : DocumentLink(document) { } + static void doOpen(DocumentData *document); void onClick(Qt::MouseButton button) const; }; diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 2c7684f11..5d8ee7a0e 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -273,6 +273,7 @@ enum DataBlockId { dbiRecentStickers = 0x26, dbiDcOption = 0x27, dbiTryIPv6 = 0x28, + dbiSongVolume = 0x29, dbiEncryptedWithSalt = 333, dbiEncrypted = 444, diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index bb218b9c9..00f713269 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -1712,10 +1712,10 @@ void Window::sendPaths() { } } -void Window::mediaOverviewUpdated(PeerData *peer) { - if (main) main->mediaOverviewUpdated(peer); +void Window::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (main) main->mediaOverviewUpdated(peer, type); if (!_mediaView || _mediaView->isHidden()) return; - _mediaView->mediaOverviewUpdated(peer); + _mediaView->mediaOverviewUpdated(peer, type); } void Window::documentUpdated(DocumentData *doc) { diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 3835f573c..321cbae27 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -226,7 +226,7 @@ public: void sendPaths(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void documentUpdated(DocumentData *doc); void changingMsgId(HistoryItem *row, MsgId newId); diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index f392e9280..3d511a4c0 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -352,6 +352,10 @@ true true + + true + true + true true @@ -618,6 +622,10 @@ true true + + true + true + true true @@ -909,6 +917,10 @@ true true + + true + true + true true @@ -1044,6 +1056,7 @@ + true @@ -1993,6 +2006,20 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index 6694d680f..b3cb689af 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -903,6 +903,18 @@ Generated Files\Release + + Source Files + + + Generated Files\Deploy + + + Generated Files\Debug + + + Generated Files\Release + @@ -1198,6 +1210,9 @@ Source Files + + Source Files +