mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-09-07 04:30:43 +02:00
Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a104e92471 | ||
|
1929804541 | ||
|
a564b3b272 | ||
|
d083528ad5 | ||
|
4d63a9462d | ||
|
5a64886b7c | ||
|
76986e8908 | ||
|
9a9a7148af | ||
|
aec7a0b140 | ||
|
eff42af593 | ||
|
ad2b54ad90 | ||
|
4e316a48ea | ||
|
87863ae7e2 | ||
|
5e439b990f |
@@ -16,7 +16,7 @@ SET( TOMAHAWK_DESCRIPTION_SUMMARY "The social media player" )
|
|||||||
|
|
||||||
SET( TOMAHAWK_VERSION_MAJOR 0 )
|
SET( TOMAHAWK_VERSION_MAJOR 0 )
|
||||||
SET( TOMAHAWK_VERSION_MINOR 4 )
|
SET( TOMAHAWK_VERSION_MINOR 4 )
|
||||||
SET( TOMAHAWK_VERSION_PATCH 0 )
|
SET( TOMAHAWK_VERSION_PATCH 2 )
|
||||||
|
|
||||||
#SET( TOMAHAWK_VERSION_RC 0 )
|
#SET( TOMAHAWK_VERSION_RC 0 )
|
||||||
|
|
||||||
|
85
ChangeLog
85
ChangeLog
@@ -1,38 +1,55 @@
|
|||||||
|
Version 0.4.2:
|
||||||
|
* Updated translations for various languages.
|
||||||
|
* Resuming playback restores correct volume settings.
|
||||||
|
* Reduced CPU usage during playback.
|
||||||
|
* Fixed not starting up due to case sensitivity issue on OS X.
|
||||||
|
* Fixed volume issue (too quiet) on Windows.
|
||||||
|
|
||||||
|
Version 0.4.1:
|
||||||
|
* Fixed various crashes.
|
||||||
|
* Fixed issues with auto-updating XSPF playlists.
|
||||||
|
* Double-clicking a playlist starts playing it.
|
||||||
|
* Resolvers can now return disc number and album position for results.
|
||||||
|
* Fixed sorting playlists by track number.
|
||||||
|
* Fixed issues with changing proxy.
|
||||||
|
* Fixed Twitter authentication issues.
|
||||||
|
* Fixed Grooveshark support on Windows.
|
||||||
|
|
||||||
Version 0.4.0:
|
Version 0.4.0:
|
||||||
* Added visual notification for database indexing job.
|
* Added visual notification for database indexing job.
|
||||||
* Fixed icons not appearing in resolvers list.
|
* Fixed icons not appearing in resolvers list.
|
||||||
* Fixed various UI glitches and stray error messages in stations.
|
* Fixed various UI glitches and stray error messages in stations.
|
||||||
* Fixed bug where album page would resolve bottom-to-top.
|
* Fixed bug where album page would resolve bottom-to-top.
|
||||||
* Fixed bug where Footnotes would not update when changing selected album in Album View.
|
* Fixed bug where Footnotes would not update when changing selected album in Album View.
|
||||||
* Fixed dragging albums and artists from charts, album, and artist views.
|
* Fixed dragging albums and artists from charts, album, and artist views.
|
||||||
* Fixed bug where filter text would be one step behind filter value.
|
* Fixed bug where filter text would be one step behind filter value.
|
||||||
* Fixed bug where resolvers would enable themselves after auto-updating.
|
* Fixed bug where resolvers would enable themselves after auto-updating.
|
||||||
* Fixed occasional crash when dropping tracks onto New Station item.
|
* Fixed occasional crash when dropping tracks onto New Station item.
|
||||||
* Added jump-to-current-track support for search results page.
|
* Added jump-to-current-track support for search results page.
|
||||||
* Fixed out of sync Show/Hide menu items on OS X when hidden with cmd-h.
|
* Fixed non-resolving tracks when dragging from album view.
|
||||||
* Fixed non-resolving tracks when dragging from album view.
|
* Fixed fetching album covers for albums with special characters.
|
||||||
* Fixed /Volumes directory not showing up on OS X.
|
* Show errors and continue gracefully when resolved audio is not available.
|
||||||
* Fixed fetching album covers for albums with special characters.
|
* Fixed various crashes on exit.
|
||||||
* Show errors and continue gracefully when resolved audio is not available.
|
* Added basic command-line options for playback control.
|
||||||
* Fixed various crashes on exit.
|
* Bumped up web api timeouts to allow web clients to finish resolving.
|
||||||
* Added basic command-line options for playback control.
|
* Added filename suggestion when exporting a playlist.
|
||||||
* Bumped up web api timeouts to allow web clients to finish resolving.
|
* Cleaned up highlighting of artist names in album view.
|
||||||
* Added filename suggestion when exporting a playlist.
|
* Cleaned up alignment of playlist items.
|
||||||
* Cleaned up highlighting of artist names in album view.
|
* Fixed potential crash when searching.
|
||||||
* Cleaned up alignment of playlist items.
|
* Added support for disc number.
|
||||||
* Fixed potential crash when searching.
|
* Added SoundCloudWall.com charts.
|
||||||
* Added support for disc number.
|
* Added ability to "lock on" to a user when listening along, to skip along.
|
||||||
* Added SoundCloudWall.com charts.
|
* Fixed bug where loved tracks would be refreshed much too often.
|
||||||
* Added ability to "lock on" to a user when listening along, to skip along.
|
* Fixed some font size issues.
|
||||||
* Fixed bug where loved tracks would be refreshed much too often.
|
* Sped up Tomahawk startup by moving chart loading into a separate thread.
|
||||||
* Fixed startup crash on OS X.
|
* Added support for parsing Grooveshark and Tinysong tracks and playlists.
|
||||||
* Fixed some font size issues.
|
* Reorganized sidebar to follow more logical item groupings.
|
||||||
* Sped up Tomahawk startup by moving chart loading into a separate thread.
|
* Added artist and album results to global searches.
|
||||||
* Added support for parsing Grooveshark and Tinysong tracks and playlists.
|
* Fixed style and contrast issues when using GTK styles.
|
||||||
* Reorganized sidebar to follow more logical item groupings.
|
* Fixed paths to artwork when using MPRIS2 interface.
|
||||||
* Added artist and album results to global searches.
|
* Fixed out of sync Show/Hide menu items on OS X when hidden with cmd-h.
|
||||||
* Fixed style and contrast issues when using GTK styles.
|
* Fixed /Volumes directory not showing up on OS X.
|
||||||
* Fixed paths to artwork when using MPRIS2 interface.
|
* Fixed startup crash on OS X.
|
||||||
|
|
||||||
Version 0.3.3:
|
Version 0.3.3:
|
||||||
* Automatically load Super Collection tracks when no official release
|
* Automatically load Super Collection tracks when no official release
|
||||||
|
@@ -250,7 +250,7 @@ frameworks_dir = os.path.join(bundle_dir, 'Contents', 'Frameworks')
|
|||||||
commands.append(['mkdir', '-p', frameworks_dir])
|
commands.append(['mkdir', '-p', frameworks_dir])
|
||||||
resources_dir = os.path.join(bundle_dir, 'Contents', 'Resources')
|
resources_dir = os.path.join(bundle_dir, 'Contents', 'Resources')
|
||||||
commands.append(['mkdir', '-p', resources_dir])
|
commands.append(['mkdir', '-p', resources_dir])
|
||||||
plugins_dir = os.path.join(bundle_dir, 'Contents', 'plugins')
|
plugins_dir = os.path.join(bundle_dir, 'Contents', 'PlugIns')
|
||||||
binary = os.path.join(bundle_dir, 'Contents', 'MacOS', bundle_name)
|
binary = os.path.join(bundle_dir, 'Contents', 'MacOS', bundle_name)
|
||||||
|
|
||||||
fixed_libraries = []
|
fixed_libraries = []
|
||||||
|
3541
lang/tomahawk_bg.ts
Normal file
3541
lang/tomahawk_bg.ts
Normal file
File diff suppressed because it is too large
Load Diff
2495
lang/tomahawk_de.ts
2495
lang/tomahawk_de.ts
File diff suppressed because it is too large
Load Diff
3365
lang/tomahawk_en.ts
3365
lang/tomahawk_en.ts
File diff suppressed because it is too large
Load Diff
2226
lang/tomahawk_es.ts
2226
lang/tomahawk_es.ts
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,8 @@
|
|||||||
<file>tomahawk_de.qm</file>
|
<file>tomahawk_de.qm</file>
|
||||||
<file>tomahawk_sv.qm</file>
|
<file>tomahawk_sv.qm</file>
|
||||||
<file>tomahawk_es.qm</file>
|
<file>tomahawk_es.qm</file>
|
||||||
|
<file>tomahawk_bg.qm</file>
|
||||||
|
<file>tomahawk_pl.qm</file>
|
||||||
<file>tomahawk_pt_BR.qm</file>
|
<file>tomahawk_pt_BR.qm</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
2322
lang/tomahawk_pl.ts
2322
lang/tomahawk_pl.ts
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
3391
lang/tomahawk_sv.ts
3391
lang/tomahawk_sv.ts
File diff suppressed because it is too large
Load Diff
@@ -92,14 +92,12 @@ AudioControls::AudioControls( QWidget* parent )
|
|||||||
ui->metaDataArea->setStyleSheet( "QWidget#metaDataArea {\nborder-width: 4px;\nborder-image: url(" RESPATH "images/now-playing-panel.png) 4 4 4 4 stretch stretch; }" );
|
ui->metaDataArea->setStyleSheet( "QWidget#metaDataArea {\nborder-width: 4px;\nborder-image: url(" RESPATH "images/now-playing-panel.png) 4 4 4 4 stretch stretch; }" );
|
||||||
|
|
||||||
ui->seekSlider->setEnabled( true );
|
ui->seekSlider->setEnabled( true );
|
||||||
|
ui->seekSlider->setTimeLine( &m_sliderTimeLine );
|
||||||
ui->volumeSlider->setRange( 0, 100 );
|
ui->volumeSlider->setRange( 0, 100 );
|
||||||
ui->volumeSlider->setValue( AudioEngine::instance()->volume() );
|
ui->volumeSlider->setValue( AudioEngine::instance()->volume() );
|
||||||
|
|
||||||
m_phononTickCheckTimer.setSingleShot( true );
|
m_phononTickCheckTimer.setSingleShot( true );
|
||||||
|
|
||||||
m_sliderTimeLine.setCurveShape( QTimeLine::LinearCurve );
|
|
||||||
ui->seekSlider->setTimeLine( &m_sliderTimeLine );
|
|
||||||
|
|
||||||
connect( &m_phononTickCheckTimer, SIGNAL( timeout() ), SLOT( phononTickCheckTimeout() ) );
|
connect( &m_phononTickCheckTimer, SIGNAL( timeout() ), SLOT( phononTickCheckTimeout() ) );
|
||||||
connect( &m_sliderTimeLine, SIGNAL( frameChanged( int ) ), ui->seekSlider, SLOT( setValue( int ) ) );
|
connect( &m_sliderTimeLine, SIGNAL( frameChanged( int ) ), ui->seekSlider, SLOT( setValue( int ) ) );
|
||||||
|
|
||||||
@@ -199,6 +197,7 @@ AudioControls::onPlaybackStarted( const Tomahawk::result_ptr& result )
|
|||||||
|
|
||||||
ui->seekSlider->setRange( 0, duration );
|
ui->seekSlider->setRange( 0, duration );
|
||||||
ui->seekSlider->setValue( 0 );
|
ui->seekSlider->setValue( 0 );
|
||||||
|
ui->seekSlider->setEnabled( AudioEngine::instance()->canSeek() );
|
||||||
|
|
||||||
m_phononTickCheckTimer.stop();
|
m_phononTickCheckTimer.stop();
|
||||||
|
|
||||||
@@ -210,6 +209,9 @@ AudioControls::onPlaybackStarted( const Tomahawk::result_ptr& result )
|
|||||||
|
|
||||||
ui->seekSlider->setVisible( true );
|
ui->seekSlider->setVisible( true );
|
||||||
|
|
||||||
|
int updateRate = (double)1000 / ( (double)ui->seekSlider->contentsRect().width() / (double)( duration / 1000 ) );
|
||||||
|
m_sliderTimeLine.setUpdateInterval( qBound( 40, updateRate, 500 ) );
|
||||||
|
|
||||||
m_noTimeChange = false;
|
m_noTimeChange = false;
|
||||||
m_lastSliderCheck = 0;
|
m_lastSliderCheck = 0;
|
||||||
}
|
}
|
||||||
@@ -237,6 +239,7 @@ AudioControls::onPlaybackLoading( const Tomahawk::result_ptr& result )
|
|||||||
ui->timeLabel->setText( TomahawkUtils::timeToString( 0 ) );
|
ui->timeLabel->setText( TomahawkUtils::timeToString( 0 ) );
|
||||||
ui->timeLeftLabel->setFixedWidth( ui->timeLeftLabel->fontMetrics().width( QString( duration.length() + 1, QChar( '0' ) ) ) );
|
ui->timeLeftLabel->setFixedWidth( ui->timeLeftLabel->fontMetrics().width( QString( duration.length() + 1, QChar( '0' ) ) ) );
|
||||||
ui->timeLeftLabel->setText( "-" + duration );
|
ui->timeLeftLabel->setText( "-" + duration );
|
||||||
|
m_lastTextSecondShown = 0;
|
||||||
|
|
||||||
ui->stackedLayout->setCurrentWidget( ui->pauseButton );
|
ui->stackedLayout->setCurrentWidget( ui->pauseButton );
|
||||||
|
|
||||||
@@ -361,6 +364,14 @@ AudioControls::onPlaybackStopped()
|
|||||||
void
|
void
|
||||||
AudioControls::onPlaybackTimer( qint64 msElapsed )
|
AudioControls::onPlaybackTimer( qint64 msElapsed )
|
||||||
{
|
{
|
||||||
|
const int seconds = msElapsed / 1000;
|
||||||
|
if ( seconds != m_lastTextSecondShown && !m_currentTrack.isNull() )
|
||||||
|
{
|
||||||
|
ui->timeLabel->setText( TomahawkUtils::timeToString( seconds ) );
|
||||||
|
ui->timeLeftLabel->setText( "-" + TomahawkUtils::timeToString( m_currentTrack->duration() - seconds ) );
|
||||||
|
m_lastTextSecondShown = seconds;
|
||||||
|
}
|
||||||
|
|
||||||
//tDebug( LOGEXTRA ) << Q_FUNC_INFO << "msElapsed =" << msElapsed << "and timer current time =" << m_sliderTimeLine.currentTime() << "and m_seekMsecs =" << m_seekMsecs;
|
//tDebug( LOGEXTRA ) << Q_FUNC_INFO << "msElapsed =" << msElapsed << "and timer current time =" << m_sliderTimeLine.currentTime() << "and m_seekMsecs =" << m_seekMsecs;
|
||||||
if ( msElapsed > 0 && msElapsed != m_lastSliderCheck && m_seekMsecs == -1 && msElapsed - 500 < m_lastSliderCheck )
|
if ( msElapsed > 0 && msElapsed != m_lastSliderCheck && m_seekMsecs == -1 && msElapsed - 500 < m_lastSliderCheck )
|
||||||
return;
|
return;
|
||||||
@@ -377,13 +388,10 @@ AudioControls::onPlaybackTimer( qint64 msElapsed )
|
|||||||
if ( sender() != &m_phononTickCheckTimer )
|
if ( sender() != &m_phononTickCheckTimer )
|
||||||
m_phononTickCheckTimer.start( 1000 );
|
m_phononTickCheckTimer.start( 1000 );
|
||||||
|
|
||||||
const int seconds = msElapsed / 1000;
|
int currentTime = m_sliderTimeLine.currentTime();
|
||||||
ui->timeLabel->setText( TomahawkUtils::timeToString( seconds ) );
|
|
||||||
ui->timeLeftLabel->setText( "-" + TomahawkUtils::timeToString( m_currentTrack->duration() - seconds ) );
|
|
||||||
|
|
||||||
if ( m_noTimeChange )
|
if ( m_noTimeChange )
|
||||||
{
|
{
|
||||||
if ( m_sliderTimeLine.currentTime() != msElapsed )
|
if ( currentTime != msElapsed )
|
||||||
{
|
{
|
||||||
m_sliderTimeLine.setPaused( true );
|
m_sliderTimeLine.setPaused( true );
|
||||||
m_noTimeChange = false;
|
m_noTimeChange = false;
|
||||||
@@ -392,12 +400,12 @@ AudioControls::onPlaybackTimer( qint64 msElapsed )
|
|||||||
m_sliderTimeLine.resume();
|
m_sliderTimeLine.resume();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_sliderTimeLine.currentTime() >= msElapsed || m_seekMsecs != -1 )
|
else if ( currentTime >= msElapsed || m_seekMsecs != -1 )
|
||||||
{
|
{
|
||||||
m_sliderTimeLine.setPaused( true );
|
m_sliderTimeLine.setPaused( true );
|
||||||
|
|
||||||
m_noTimeChange = false;
|
m_noTimeChange = false;
|
||||||
if ( m_sliderTimeLine.currentTime() == msElapsed )
|
if ( currentTime == msElapsed )
|
||||||
m_noTimeChange = true;
|
m_noTimeChange = true;
|
||||||
|
|
||||||
m_sliderTimeLine.setCurrentTime( msElapsed );
|
m_sliderTimeLine.setCurrentTime( msElapsed );
|
||||||
@@ -407,12 +415,10 @@ AudioControls::onPlaybackTimer( qint64 msElapsed )
|
|||||||
}
|
}
|
||||||
else if ( m_sliderTimeLine.duration() > msElapsed && m_sliderTimeLine.state() == QTimeLine::NotRunning && AudioEngine::instance()->state() == AudioEngine::Playing )
|
else if ( m_sliderTimeLine.duration() > msElapsed && m_sliderTimeLine.state() == QTimeLine::NotRunning && AudioEngine::instance()->state() == AudioEngine::Playing )
|
||||||
{
|
{
|
||||||
ui->seekSlider->setEnabled( AudioEngine::instance()->canSeek() );
|
|
||||||
m_sliderTimeLine.start();
|
m_sliderTimeLine.start();
|
||||||
}
|
}
|
||||||
else if ( m_sliderTimeLine.state() == QTimeLine::Paused && AudioEngine::instance()->state() != AudioEngine::Paused )
|
else if ( m_sliderTimeLine.state() == QTimeLine::Paused && AudioEngine::instance()->state() != AudioEngine::Paused )
|
||||||
{
|
{
|
||||||
ui->seekSlider->setEnabled( AudioEngine::instance()->canSeek() );
|
|
||||||
m_sliderTimeLine.resume();
|
m_sliderTimeLine.resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -100,6 +100,7 @@ private:
|
|||||||
qint64 m_seekMsecs;
|
qint64 m_seekMsecs;
|
||||||
qint64 m_lastSliderCheck;
|
qint64 m_lastSliderCheck;
|
||||||
bool m_noTimeChange;
|
bool m_noTimeChange;
|
||||||
|
qint64 m_lastTextSecondShown;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AUDIOCONTROLS_H
|
#endif // AUDIOCONTROLS_H
|
||||||
|
@@ -131,8 +131,11 @@ AudioEngine::play()
|
|||||||
|
|
||||||
if ( isPaused() )
|
if ( isPaused() )
|
||||||
{
|
{
|
||||||
|
setVolume( m_volume );
|
||||||
m_mediaObject->play();
|
m_mediaObject->play();
|
||||||
|
setVolume( m_volume );
|
||||||
emit resumed();
|
emit resumed();
|
||||||
|
|
||||||
Tomahawk::InfoSystem::InfoStringHash trackInfo;
|
Tomahawk::InfoSystem::InfoStringHash trackInfo;
|
||||||
|
|
||||||
trackInfo["title"] = m_currentTrack->track();
|
trackInfo["title"] = m_currentTrack->track();
|
||||||
@@ -152,6 +155,7 @@ AudioEngine::pause()
|
|||||||
{
|
{
|
||||||
tDebug( LOGEXTRA ) << Q_FUNC_INFO;
|
tDebug( LOGEXTRA ) << Q_FUNC_INFO;
|
||||||
|
|
||||||
|
m_volume = volume();
|
||||||
m_mediaObject->pause();
|
m_mediaObject->pause();
|
||||||
emit paused();
|
emit paused();
|
||||||
|
|
||||||
|
@@ -155,6 +155,7 @@ private:
|
|||||||
|
|
||||||
mutable QStringList m_supportedMimeTypes;
|
mutable QStringList m_supportedMimeTypes;
|
||||||
AudioState m_state;
|
AudioState m_state;
|
||||||
|
unsigned int m_volume;
|
||||||
|
|
||||||
static AudioEngine* s_instance;
|
static AudioEngine* s_instance;
|
||||||
};
|
};
|
||||||
|
@@ -741,11 +741,21 @@ TomahawkWindow::setWindowTitle( const QString& title )
|
|||||||
void
|
void
|
||||||
TomahawkWindow::showAboutTomahawk()
|
TomahawkWindow::showAboutTomahawk()
|
||||||
{
|
{
|
||||||
QMessageBox::about( this, tr( "About Tomahawk" ),
|
QString head, desc;
|
||||||
tr( "<h2><b>Tomahawk %1<br/>(%2)</h2>Copyright 2010 - 2012<br/>Christian Muehlhaeuser <muesli@tomahawk-player.org><br/><br/>"
|
|
||||||
"Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindström, Michael Zanetti, Harald Sitter and Steve Robertson" )
|
#ifdef DEBUG_BUILD
|
||||||
.arg( TomahawkUtils::appFriendlyVersion() )
|
head = tr( "<h2><b>Tomahawk %1<br/>(%2)</h2>" )
|
||||||
.arg( qApp->applicationVersion() ) );
|
.arg( TomahawkUtils::appFriendlyVersion() )
|
||||||
|
.arg( qApp->applicationVersion() );
|
||||||
|
#else
|
||||||
|
head = tr( "<h2><b>Tomahawk %1</h2>" )
|
||||||
|
.arg( TomahawkUtils::appFriendlyVersion() );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
desc = tr( "Copyright 2010 - 2012<br/>Christian Muehlhaeuser <muesli@tomahawk-player.org><br/><br/>"
|
||||||
|
"Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindström, Michael Zanetti, Harald Sitter and Steve Robertson" );
|
||||||
|
|
||||||
|
QMessageBox::about( this, tr( "About Tomahawk" ), head + desc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user