mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-01-09 16:19:43 +00:00
dev version 0.8.39 - Qt 5.5.0, repeat button in audio play
This commit is contained in:
parent
8bb376798e
commit
5b9cdbd98a
@ -1,11 +1,11 @@
|
||||
@echo OFF
|
||||
|
||||
set "AppVersionStrMajor=0.8"
|
||||
set "AppVersion=8038"
|
||||
set "AppVersionStrSmall=0.8.38"
|
||||
set "AppVersionStr=0.8.38"
|
||||
set "AppVersionStrFull=0.8.38.0"
|
||||
set "DevChannel=0"
|
||||
set "AppVersion=8039"
|
||||
set "AppVersionStrSmall=0.8.39"
|
||||
set "AppVersionStr=0.8.39"
|
||||
set "AppVersionStrFull=0.8.39.0"
|
||||
set "DevChannel=1"
|
||||
|
||||
if %DevChannel% neq 0 goto preparedev
|
||||
|
||||
|
@ -1989,6 +1989,7 @@ playerNext: sprite(374px, 151px, 22px, 14px);
|
||||
playerPrev: sprite(374px, 165px, 22px, 14px);
|
||||
playerClose: sprite(361px, 97px, 12px, 12px);
|
||||
playerFull: sprite(365px, 109px, 12px, 12px);
|
||||
playerRepeat: sprite(365px, 121px, 12px, 14px);
|
||||
playerVolume: sprite(352px, 179px, 44px, 12px);
|
||||
playerInactiveOpacity: 0.8;
|
||||
playerUnavailableOpacity: 0.3;
|
||||
|
@ -654,8 +654,8 @@ void Application::checkMapVersion() {
|
||||
psRegisterCustomScheme();
|
||||
if (Local::oldMapVersion()) {
|
||||
QString versionFeatures;
|
||||
if (DevChannel && Local::oldMapVersion() < 8037) {
|
||||
versionFeatures = lang(lng_new_version_text);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D));
|
||||
if (DevChannel && Local::oldMapVersion() < 8039) {
|
||||
versionFeatures = QString::fromUtf8("\xe2\x80\x94 Moved to Qt 5.5\n\xe2\x80\x94 Some bugfixes and optimizations\n\xe2\x80\x94 In OS X 10.10.3 location marks sent from mobile should be displayed now");// .replace('@', qsl("@") + QChar(0x200D));
|
||||
} else if (!DevChannel && Local::oldMapVersion() < 8038) {
|
||||
versionFeatures = lang(lng_new_version_text).trimmed();
|
||||
}
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 167 KiB |
Binary file not shown.
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 220 KiB |
@ -1010,7 +1010,7 @@ public:
|
||||
virtual int64 duration() = 0;
|
||||
virtual int32 frequency() = 0;
|
||||
virtual int32 format() = 0;
|
||||
virtual bool readMore(QByteArray &result, int64 &samplesAdded) = 0;
|
||||
virtual int readMore(QByteArray &result, int64 &samplesAdded) = 0; // < 0 - error, 0 - nothing read, > 0 - read something
|
||||
|
||||
protected:
|
||||
|
||||
@ -1189,14 +1189,14 @@ public:
|
||||
return fmt;
|
||||
}
|
||||
|
||||
bool readMore(QByteArray &result, int64 &samplesAdded) {
|
||||
int readMore(QByteArray &result, int64 &samplesAdded) {
|
||||
int res;
|
||||
if ((res = av_read_frame(fmtContext, &avpkt)) < 0) {
|
||||
if (res != AVERROR_EOF) {
|
||||
char err[AV_ERROR_MAX_STRING_SIZE] = { 0 };
|
||||
LOG(("Audio Error: Unable to av_read_frame() file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res)));
|
||||
}
|
||||
return false;
|
||||
return -1;
|
||||
}
|
||||
if (avpkt.stream_index == streamId) {
|
||||
av_frame_unref(frame);
|
||||
@ -1204,7 +1204,10 @@ public:
|
||||
if ((res = avcodec_decode_audio4(codecContext, frame, &got_frame, &avpkt)) < 0) {
|
||||
char err[AV_ERROR_MAX_STRING_SIZE] = { 0 };
|
||||
LOG(("Audio Error: Unable to avcodec_decode_audio4() file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res)));
|
||||
return false;
|
||||
|
||||
av_free_packet(&avpkt);
|
||||
if (res == AVERROR_INVALIDDATA) return 0; // try to skip bad packet
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (got_frame) {
|
||||
@ -1218,13 +1221,17 @@ public:
|
||||
dstSamplesData[0] = 0;
|
||||
char err[AV_ERROR_MAX_STRING_SIZE] = { 0 };
|
||||
LOG(("Audio Error: Unable to av_samples_alloc for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res)));
|
||||
return false;
|
||||
|
||||
av_free_packet(&avpkt);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if ((res = swr_convert(swrContext, dstSamplesData, dstSamples, (const uint8_t**)frame->extended_data, frame->nb_samples)) < 0) {
|
||||
char err[AV_ERROR_MAX_STRING_SIZE] = { 0 };
|
||||
LOG(("Audio Error: Unable to swr_convert for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res)));
|
||||
return false;
|
||||
|
||||
av_free_packet(&avpkt);
|
||||
return -1;
|
||||
}
|
||||
int32 resultLen = av_samples_get_buffer_size(0, _toChannels, res, _toFormat, 1);
|
||||
result.append((const char*)dstSamplesData[0], resultLen);
|
||||
@ -1236,7 +1243,7 @@ public:
|
||||
}
|
||||
}
|
||||
av_free_packet(&avpkt);
|
||||
return true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
~FFMpegLoader() {
|
||||
@ -1427,7 +1434,8 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qin
|
||||
QByteArray result;
|
||||
int64 samplesAdded = 0, frequency = l->frequency(), format = l->format();
|
||||
while (result.size() < AudioVoiceMsgBufferSize) {
|
||||
if (!l->readMore(result, samplesAdded)) {
|
||||
int res = l->readMore(result, samplesAdded);
|
||||
if (res < 0) {
|
||||
if (errAtStart) {
|
||||
{
|
||||
QMutexLocker lock(&playerMutex);
|
||||
@ -1440,7 +1448,7 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qin
|
||||
finished = true;
|
||||
break;
|
||||
}
|
||||
errAtStart = false;
|
||||
if (res > 0) errAtStart = false;
|
||||
|
||||
QMutexLocker lock(&playerMutex);
|
||||
if (!checkLoader(type)) {
|
||||
@ -2309,9 +2317,9 @@ public:
|
||||
return _coverFormat;
|
||||
}
|
||||
|
||||
bool readMore(QByteArray &result, int64 &samplesAdded) {
|
||||
int readMore(QByteArray &result, int64 &samplesAdded) {
|
||||
DEBUG_LOG(("Audio Read Error: should not call this"));
|
||||
return false;
|
||||
return -1;
|
||||
}
|
||||
|
||||
~FFMpegAttributesReader() {
|
||||
|
@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
static const int32 AppVersion = 8038;
|
||||
static const wchar_t *AppVersionStr = L"0.8.38";
|
||||
static const bool DevChannel = false;
|
||||
static const int32 AppVersion = 8039;
|
||||
static const wchar_t *AppVersionStr = L"0.8.39";
|
||||
static const bool DevChannel = true;
|
||||
|
||||
static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)";
|
||||
static const wchar_t *AppName = L"Telegram Desktop";
|
||||
|
@ -33,7 +33,7 @@ PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent),
|
||||
_prevAvailable(false), _nextAvailable(false), _fullAvailable(false),
|
||||
_over(OverNone), _down(OverNone), _downCoord(0), _downFrequency(AudioVoiceMsgFrequency), _downProgress(0.),
|
||||
_stateAnim(animFunc(this, &PlayerWidget::stateStep)),
|
||||
_index(-1), _history(0), _showPause(false), _position(0), _duration(0), _loaded(0),
|
||||
_index(-1), _history(0), _timeWidth(0), _repeat(false), _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);
|
||||
@ -108,6 +108,11 @@ void PlayerWidget::paintEvent(QPaintEvent *e) {
|
||||
p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity);
|
||||
p.drawSpriteCenterLeft(_fullRect, width(), st::playerFull);
|
||||
}
|
||||
if (checkr.intersects(_repeatRect)) {
|
||||
float64 o = _stateHovers[OverRepeat];
|
||||
p.setOpacity(_repeat ? 1. : (o * st::playerInactiveOpacity + (1. - o) * st::playerUnavailableOpacity));
|
||||
p.drawSpriteCenterLeft(_repeatRect, width(), st::playerRepeat);
|
||||
}
|
||||
p.setOpacity(1.);
|
||||
|
||||
p.setPen(st::playerTimeFg->p);
|
||||
@ -185,6 +190,9 @@ void PlayerWidget::mousePressEvent(QMouseEvent *e) {
|
||||
if (HistoryItem *item = App::histItemById(_song.msgId)) {
|
||||
App::main()->showMediaOverview(item->history()->peer, OverviewAudioDocuments);
|
||||
}
|
||||
} else if (_over == OverRepeat) {
|
||||
_repeat = !_repeat;
|
||||
updateOverRect(OverRepeat);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -230,6 +238,7 @@ void PlayerWidget::updateOverRect(OverState state) {
|
||||
case OverClose: rtlupdate(_closeRect); break;
|
||||
case OverVolume: rtlupdate(_volumeRect); break;
|
||||
case OverFull: rtlupdate(_fullRect); break;
|
||||
case OverRepeat: rtlupdate(_repeatRect); break;
|
||||
case OverPlayback: rtlupdate(_playbackRect); break;
|
||||
}
|
||||
}
|
||||
@ -365,6 +374,8 @@ void PlayerWidget::updateSelected() {
|
||||
updateOverState(OverClose);
|
||||
} else if (_volumeRect.contains(pos)) {
|
||||
updateOverState(OverVolume);
|
||||
} else if (_repeatRect.contains(pos)) {
|
||||
updateOverState(OverRepeat);
|
||||
} else if (_duration && _playbackRect.contains(pos)) {
|
||||
updateOverState(OverPlayback);
|
||||
} else if (_fullAvailable && inInfo) {
|
||||
@ -446,7 +457,7 @@ void PlayerWidget::playPausePressed() {
|
||||
}
|
||||
|
||||
void PlayerWidget::prevPressed() {
|
||||
if (isHidden() || !_prevAvailable) return;
|
||||
if (isHidden()) return;
|
||||
|
||||
const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0;
|
||||
if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) {
|
||||
@ -455,7 +466,7 @@ void PlayerWidget::prevPressed() {
|
||||
}
|
||||
|
||||
void PlayerWidget::nextPressed() {
|
||||
if (isHidden() || !_nextAvailable) return;
|
||||
if (isHidden()) return;
|
||||
|
||||
const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0;
|
||||
if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) {
|
||||
@ -480,10 +491,11 @@ void PlayerWidget::resizeEvent(QResizeEvent *e) {
|
||||
|
||||
_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();
|
||||
_repeatRect = QRect(_volumeRect.x() - st::playerRepeat.pxWidth() - st::playerSkip, ct, st::playerRepeat.pxWidth() + st::playerSkip, ch);
|
||||
_fullRect = _fullAvailable ? QRect(_repeatRect.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);
|
||||
_infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _repeatRect.x()) - infoLeft - st::playerSkip, availh);
|
||||
update();
|
||||
}
|
||||
|
||||
@ -600,9 +612,10 @@ void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState,
|
||||
}
|
||||
|
||||
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));
|
||||
if (_repeat) {
|
||||
startPlay(_song.msgId);
|
||||
} else {
|
||||
nextPressed();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,6 +65,7 @@ private:
|
||||
OverClose,
|
||||
OverVolume,
|
||||
OverFull,
|
||||
OverRepeat,
|
||||
OverPlayback,
|
||||
|
||||
OverStateCount
|
||||
@ -97,8 +98,9 @@ private:
|
||||
int32 _index;
|
||||
History *_history;
|
||||
QRect _playRect, _prevRect, _nextRect, _playbackRect;
|
||||
QRect _closeRect, _volumeRect, _fullRect, _infoRect;
|
||||
QRect _closeRect, _volumeRect, _fullRect, _repeatRect, _infoRect;
|
||||
int32 _timeWidth;
|
||||
bool _repeat;
|
||||
QString _time;
|
||||
Text _name;
|
||||
bool _showPause;
|
||||
|
@ -11,7 +11,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.8.38</string>
|
||||
<string>0.8.39</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
|
Binary file not shown.
@ -1711,7 +1711,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 0.8.38;
|
||||
CURRENT_PROJECT_VERSION = 0.8.39;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
@ -1729,7 +1729,7 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CURRENT_PROJECT_VERSION = 0.8.38;
|
||||
CURRENT_PROJECT_VERSION = 0.8.39;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = fast;
|
||||
GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h;
|
||||
@ -1755,10 +1755,10 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 0.8.38;
|
||||
CURRENT_PROJECT_VERSION = 0.8.39;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DYLIB_COMPATIBILITY_VERSION = 0.8;
|
||||
DYLIB_CURRENT_VERSION = 0.8.38;
|
||||
DYLIB_CURRENT_VERSION = 0.8.39;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "";
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
@ -1898,10 +1898,10 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 0.8.38;
|
||||
CURRENT_PROJECT_VERSION = 0.8.39;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DYLIB_COMPATIBILITY_VERSION = 0.8;
|
||||
DYLIB_CURRENT_VERSION = 0.8.38;
|
||||
DYLIB_CURRENT_VERSION = 0.8.39;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "";
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
|
@ -1,2 +1,2 @@
|
||||
echo 0.8 8038 0.8.38 0
|
||||
echo 0.8 8039 0.8.39 1
|
||||
# AppVersionStrMajor AppVersion AppVersionStr DevChannel
|
||||
|
Loading…
Reference in New Issue
Block a user