CMake variables and commandline options to allow multiple engines to be built. Thanks christoph.gysin.
Fixes issue #203
This commit is contained in:
parent
44ffc5be75
commit
dd86b60411
|
@ -9,14 +9,11 @@ if (CMAKE_FIND_ROOT_PATH)
|
||||||
set(QT_LIBRARY_DIR ${CMAKE_FIND_ROOT_PATH}/lib)
|
set(QT_LIBRARY_DIR ${CMAKE_FIND_ROOT_PATH}/lib)
|
||||||
endif (CMAKE_FIND_ROOT_PATH)
|
endif (CMAKE_FIND_ROOT_PATH)
|
||||||
|
|
||||||
find_package(Qt4 REQUIRED)
|
find_package(Qt4 REQUIRED QtCore QtGui QtOpenGL QtSql QtNetwork QtXml)
|
||||||
set(QT_USE_QTOPENGL 1)
|
|
||||||
set(QT_USE_QTSQL 1)
|
|
||||||
set(QT_USE_QTNETWORK 1)
|
|
||||||
set(QT_USE_QTXML 1)
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
set(QT_USE_QTDBUS 1)
|
find_package(Qt4 REQUIRED QtDbus)
|
||||||
endif(UNIX AND NOT APPLE)
|
endif(UNIX AND NOT APPLE)
|
||||||
|
find_package(Qt4 COMPONENTS Phonon)
|
||||||
|
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
find_package(Boost REQUIRED)
|
find_package(Boost REQUIRED)
|
||||||
|
@ -35,19 +32,13 @@ if(WIN32)
|
||||||
find_library(GLIB_LIBRARIES glib-2.0)
|
find_library(GLIB_LIBRARIES glib-2.0)
|
||||||
find_library(GOBJECT_LIBRARIES gobject-2.0)
|
find_library(GOBJECT_LIBRARIES gobject-2.0)
|
||||||
else(WIN32)
|
else(WIN32)
|
||||||
pkg_check_modules(TAGLIB taglib)
|
pkg_check_modules(TAGLIB REQUIRED taglib>=1.6)
|
||||||
pkg_check_modules(GSTREAMER gstreamer-0.10)
|
pkg_check_modules(GSTREAMER gstreamer-0.10)
|
||||||
pkg_check_modules(GSTREAMER_BASE gstreamer-base-0.10)
|
pkg_check_modules(GSTREAMER_BASE gstreamer-base-0.10)
|
||||||
|
pkg_check_modules(VLC libvlc)
|
||||||
if (TAGLIB_VERSION VERSION_LESS 1.6)
|
pkg_check_modules(XINE libxine)
|
||||||
message(FATAL_ERROR "Taglib version 1.6 or greater is required")
|
|
||||||
endif (TAGLIB_VERSION VERSION_LESS 1.6)
|
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
if (NOT Boost_FOUND)
|
|
||||||
message(FATAL_ERROR "Boost not found")
|
|
||||||
endif (NOT Boost_FOUND)
|
|
||||||
|
|
||||||
find_library(LASTFM_LIBRARY_DIRS lastfm)
|
find_library(LASTFM_LIBRARY_DIRS lastfm)
|
||||||
find_path(LASTFM_INCLUDE_DIRS lastfm/ws.h)
|
find_path(LASTFM_INCLUDE_DIRS lastfm/ws.h)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
# add an engine
|
||||||
|
macro(add_engine engine lib_list src_list moc_list supported)
|
||||||
|
|
||||||
|
# recreate list
|
||||||
|
set(lib_list ${lib_list})
|
||||||
|
list(GET lib_list 0 name)
|
||||||
|
|
||||||
|
# add a user selectable build option, supported engines enabled by default
|
||||||
|
option(ENGINE_${name}_ENABLED "enable engine ${engine}" ${supported})
|
||||||
|
|
||||||
|
# check for all needed libraries
|
||||||
|
foreach(lib ${lib_list})
|
||||||
|
if(${lib}_NOTFOUND)
|
||||||
|
set(ENGINE_${name}_LIB_MISSING TRUE)
|
||||||
|
endif(${lib}_NOTFOUND)
|
||||||
|
endforeach(lib ${lib_list})
|
||||||
|
|
||||||
|
# check if engine is enabled and needed librares are available
|
||||||
|
if(ENGINE_${name}_ENABLED AND NOT ENGINE_${name}_LIB_MISSING)
|
||||||
|
|
||||||
|
# add to list of unsupported engines
|
||||||
|
set(supported ${supported})
|
||||||
|
if(NOT supported)
|
||||||
|
set(ENGINES_UNSUPPORTED "${ENGINES_UNSUPPORTED} ${engine}")
|
||||||
|
endif(NOT supported)
|
||||||
|
|
||||||
|
# add define -DHAVE_<engine> so we can clutter the code with #ifdefs
|
||||||
|
add_definitions(-DHAVE_${name})
|
||||||
|
|
||||||
|
# add sources and MOC headers
|
||||||
|
list(APPEND CLEMENTINE-SOURCES ${src_list})
|
||||||
|
list(APPEND CLEMENTINE-MOC-HEADERS ${moc_list})
|
||||||
|
|
||||||
|
# add libraries to link against
|
||||||
|
foreach(lib ${lib_list})
|
||||||
|
set(ENGINE_LIBRARIES ${ENGINE_LIBRARIES} ${${lib}_LIBRARIES})
|
||||||
|
endforeach(lib ${lib_list})
|
||||||
|
|
||||||
|
# add to list of enabled engines
|
||||||
|
set(ENGINES_ENABLED "${ENGINES_ENABLED} ${engine}")
|
||||||
|
|
||||||
|
else(ENGINE_${name}_ENABLED AND NOT ENGINE_${name}_LIB_MISSING)
|
||||||
|
|
||||||
|
# add to list of disabled engines
|
||||||
|
set(ENGINES_DISABLED "${ENGINES_DISABLED} ${engine}")
|
||||||
|
|
||||||
|
endif(ENGINE_${name}_ENABLED AND NOT ENGINE_${name}_LIB_MISSING)
|
||||||
|
|
||||||
|
endmacro(add_engine engine lib_list src_list moc_list supported)
|
||||||
|
|
||||||
|
# print engines to be built
|
||||||
|
macro(print_engines)
|
||||||
|
# show big warning if building unsupported engines
|
||||||
|
if(ENGINES_UNSUPPORTED)
|
||||||
|
message("")
|
||||||
|
message(" *********************************")
|
||||||
|
message(" ************ WARNING ************")
|
||||||
|
message(" *********************************")
|
||||||
|
message("")
|
||||||
|
message(" The following engines are NOT supported by clementine developers:")
|
||||||
|
message(" ${ENGINES_UNSUPPORTED}")
|
||||||
|
message("")
|
||||||
|
message(" Don't post any bugs if you use them, fix them yourself!")
|
||||||
|
message("")
|
||||||
|
pig()
|
||||||
|
message("")
|
||||||
|
endif(ENGINES_UNSUPPORTED)
|
||||||
|
|
||||||
|
message("building engines:${ENGINES_ENABLED}")
|
||||||
|
message("skipping engines:${ENGINES_DISABLED}")
|
||||||
|
endmacro(print_engines)
|
||||||
|
|
||||||
|
# print the pig :)
|
||||||
|
macro(pig)
|
||||||
|
file(READ pig.txt pig)
|
||||||
|
message(${pig})
|
||||||
|
endmacro(pig)
|
|
@ -12,9 +12,6 @@ set(CLEMENTINE-SOURCES
|
||||||
playlist.cpp
|
playlist.cpp
|
||||||
playlistitem.cpp
|
playlistitem.cpp
|
||||||
engines/enginebase.cpp
|
engines/enginebase.cpp
|
||||||
engines/gstengine.cpp
|
|
||||||
engines/gstequalizer.cpp
|
|
||||||
engines/gstenginepipeline.cpp
|
|
||||||
analyzers/baranalyzer.cpp
|
analyzers/baranalyzer.cpp
|
||||||
analyzers/analyzerbase.cpp
|
analyzers/analyzerbase.cpp
|
||||||
fht.cpp
|
fht.cpp
|
||||||
|
@ -88,8 +85,6 @@ set(CLEMENTINE-MOC-HEADERS
|
||||||
librarybackend.h
|
librarybackend.h
|
||||||
playlist.h
|
playlist.h
|
||||||
engines/enginebase.h
|
engines/enginebase.h
|
||||||
engines/gstengine.h
|
|
||||||
engines/gstenginepipeline.h
|
|
||||||
sliderwidget.h
|
sliderwidget.h
|
||||||
playlistview.h
|
playlistview.h
|
||||||
backgroundthread.h
|
backgroundthread.h
|
||||||
|
@ -144,6 +139,41 @@ set(CLEMENTINE-MOC-HEADERS
|
||||||
stickyslider.h
|
stickyslider.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# lists of engine source files
|
||||||
|
set(GST_ENGINE_SRC
|
||||||
|
engines/gstengine.cpp
|
||||||
|
engines/gstequalizer.cpp
|
||||||
|
engines/gstenginepipeline.cpp
|
||||||
|
)
|
||||||
|
set(GST_ENGINE_MOC
|
||||||
|
engines/gstengine.h
|
||||||
|
engines/gstenginepipeline.h
|
||||||
|
)
|
||||||
|
set(GST_ENGINE_LIB
|
||||||
|
GSTREAMER
|
||||||
|
GSTREAMER_BASE
|
||||||
|
)
|
||||||
|
set(XINE_ENGINE_SRC
|
||||||
|
engines/xine-engine.cpp
|
||||||
|
engines/xine-scope.c
|
||||||
|
)
|
||||||
|
set(XINE_ENGINE_MOC
|
||||||
|
engines/xine-engine.h
|
||||||
|
)
|
||||||
|
|
||||||
|
# try to add engines
|
||||||
|
include(AddEngine.cmake)
|
||||||
|
add_engine(gst "${GST_ENGINE_LIB}" "${GST_ENGINE_SRC}" "${GST_ENGINE_MOC}" ON)
|
||||||
|
add_engine(vlc VLC engines/vlcengine.cpp engines/vlcengine.h OFF)
|
||||||
|
add_engine(xine XINE "${XINE_ENGINE_SRC}" "${XINE_ENGINE_MOC}" OFF)
|
||||||
|
add_engine(qt-phonon QT_PHONON engines/phononengine.cpp engines/phononengine.h OFF)
|
||||||
|
print_engines()
|
||||||
|
|
||||||
|
# need at least 1 engine
|
||||||
|
if(NOT ENGINES_ENABLED)
|
||||||
|
message(FATAL_ERROR "no engine enabled!")
|
||||||
|
endif(NOT ENGINES_ENABLED)
|
||||||
|
|
||||||
# UI files
|
# UI files
|
||||||
set(CLEMENTINE-UI
|
set(CLEMENTINE-UI
|
||||||
mainwindow.ui
|
mainwindow.ui
|
||||||
|
@ -319,10 +349,9 @@ target_link_libraries(clementine_lib
|
||||||
lastfm
|
lastfm
|
||||||
${GOBJECT_LIBRARIES}
|
${GOBJECT_LIBRARIES}
|
||||||
${GLIB_LIBRARIES}
|
${GLIB_LIBRARIES}
|
||||||
${GSTREAMER_LIBRARIES}
|
|
||||||
${GSTREAMER_BASE_LIBRARIES}
|
|
||||||
${TAGLIB_LIBRARIES}
|
${TAGLIB_LIBRARIES}
|
||||||
${QT_LIBRARIES}
|
${QT_LIBRARIES}
|
||||||
|
${ENGINE_LIBRARIES}
|
||||||
)
|
)
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
target_link_libraries(clementine_lib
|
target_link_libraries(clementine_lib
|
||||||
|
|
|
@ -45,7 +45,8 @@ const char* CommandlineOptions::kHelpText =
|
||||||
" -k, --play-track <n> %19\n"
|
" -k, --play-track <n> %19\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%20:\n"
|
"%20:\n"
|
||||||
" -o, --show-osd %21\n";
|
" -o, --show-osd %21\n"
|
||||||
|
" -e, --engine %22\n";
|
||||||
|
|
||||||
|
|
||||||
CommandlineOptions::CommandlineOptions(int argc, char** argv)
|
CommandlineOptions::CommandlineOptions(int argc, char** argv)
|
||||||
|
@ -58,7 +59,8 @@ CommandlineOptions::CommandlineOptions(int argc, char** argv)
|
||||||
seek_to_(-1),
|
seek_to_(-1),
|
||||||
seek_by_(0),
|
seek_by_(0),
|
||||||
play_track_at_(-1),
|
play_track_at_(-1),
|
||||||
show_osd_(false)
|
show_osd_(false),
|
||||||
|
engine_(Engine::gstreamer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +85,7 @@ bool CommandlineOptions::Parse() {
|
||||||
{"play-track", required_argument, 0, 'k'},
|
{"play-track", required_argument, 0, 'k'},
|
||||||
|
|
||||||
{"show-osd", no_argument, 0, 'o'},
|
{"show-osd", no_argument, 0, 'o'},
|
||||||
|
{"engine", required_argument, 0, 'e'},
|
||||||
|
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
@ -91,7 +94,7 @@ bool CommandlineOptions::Parse() {
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
forever {
|
forever {
|
||||||
int c = getopt_long(argc_, argv_, "hptusrfv:alk:o", kOptions, &option_index);
|
int c = getopt_long(argc_, argv_, "hptusrfv:alk:oe:", kOptions, &option_index);
|
||||||
|
|
||||||
// End of the options
|
// End of the options
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
|
@ -117,7 +120,8 @@ bool CommandlineOptions::Parse() {
|
||||||
tr("Loads files/URLs, replacing current playlist")).arg(
|
tr("Loads files/URLs, replacing current playlist")).arg(
|
||||||
tr("Play the <n>th track in the playlist"),
|
tr("Play the <n>th track in the playlist"),
|
||||||
tr("Other options"),
|
tr("Other options"),
|
||||||
tr("Display the on-screen-display"));
|
tr("Display the on-screen-display"),
|
||||||
|
tr("Select engine"));
|
||||||
|
|
||||||
std::cout << translated_help_text.toLocal8Bit().constData();
|
std::cout << translated_help_text.toLocal8Bit().constData();
|
||||||
return false;
|
return false;
|
||||||
|
@ -155,6 +159,27 @@ bool CommandlineOptions::Parse() {
|
||||||
if (!ok) play_track_at_ = -1;
|
if (!ok) play_track_at_ = -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
{
|
||||||
|
ok = true;
|
||||||
|
QString engine = optarg;
|
||||||
|
if(engine == "gst")
|
||||||
|
engine_ = Engine::gstreamer;
|
||||||
|
else if(engine == "vlc")
|
||||||
|
engine_ = Engine::vlc;
|
||||||
|
else if(engine == "xine")
|
||||||
|
engine_ = Engine::xine;
|
||||||
|
else if(engine == "qt-phonon")
|
||||||
|
engine_ = Engine::qt_phonon;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qFatal("%s %s",
|
||||||
|
tr("Unknown audio engine \"%1\". Choices are:").arg(engine).toAscii().data(),
|
||||||
|
"gst vlc xine qt-phonon");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QDataStream>
|
#include <QDataStream>
|
||||||
|
|
||||||
|
#include "engines/engine_fwd.h"
|
||||||
|
|
||||||
class CommandlineOptions {
|
class CommandlineOptions {
|
||||||
friend QDataStream& operator<<(QDataStream& s, const CommandlineOptions& a);
|
friend QDataStream& operator<<(QDataStream& s, const CommandlineOptions& a);
|
||||||
friend QDataStream& operator>>(QDataStream& s, CommandlineOptions& a);
|
friend QDataStream& operator>>(QDataStream& s, CommandlineOptions& a);
|
||||||
|
@ -59,6 +61,7 @@ class CommandlineOptions {
|
||||||
int play_track_at() const { return play_track_at_; }
|
int play_track_at() const { return play_track_at_; }
|
||||||
bool show_osd() const { return show_osd_; }
|
bool show_osd() const { return show_osd_; }
|
||||||
QList<QUrl> urls() const { return urls_; }
|
QList<QUrl> urls() const { return urls_; }
|
||||||
|
Engine::Type engine() const { return engine_; }
|
||||||
|
|
||||||
QByteArray Serialize() const;
|
QByteArray Serialize() const;
|
||||||
void Load(const QByteArray& serialized);
|
void Load(const QByteArray& serialized);
|
||||||
|
@ -89,6 +92,7 @@ class CommandlineOptions {
|
||||||
int seek_by_;
|
int seek_by_;
|
||||||
int play_track_at_;
|
int play_track_at_;
|
||||||
bool show_osd_;
|
bool show_osd_;
|
||||||
|
Engine::Type engine_;
|
||||||
|
|
||||||
QList<QUrl> urls_;
|
QList<QUrl> urls_;
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,6 +10,8 @@ namespace Engine
|
||||||
class SimpleMetaBundle;
|
class SimpleMetaBundle;
|
||||||
class Base;
|
class Base;
|
||||||
|
|
||||||
|
enum Type { gstreamer, vlc, xine, qt_phonon };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* You should return:
|
* You should return:
|
||||||
* Playing when playing,
|
* Playing when playing,
|
||||||
|
|
|
@ -38,21 +38,21 @@ PhononEngine::~PhononEngine() {
|
||||||
delete audio_output_;
|
delete audio_output_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PhononEngine::init() {
|
bool PhononEngine::Init() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PhononEngine::canDecode(const QUrl &url) const {
|
bool PhononEngine::CanDecode(const QUrl &url) {
|
||||||
// TODO
|
// TODO
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PhononEngine::load(const QUrl &url, bool stream) {
|
bool PhononEngine::Load(const QUrl &url, Engine::TrackChangeType change ) {
|
||||||
media_object_->setCurrentSource(Phonon::MediaSource(url));
|
media_object_->setCurrentSource(Phonon::MediaSource(url));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PhononEngine::play(uint offset) {
|
bool PhononEngine::Play(uint offset) {
|
||||||
// The seek happens in PhononStateChanged - phonon doesn't seem to change
|
// The seek happens in PhononStateChanged - phonon doesn't seem to change
|
||||||
// currentTime() if we seek before we start playing :S
|
// currentTime() if we seek before we start playing :S
|
||||||
seek_offset_ = offset;
|
seek_offset_ = offset;
|
||||||
|
@ -61,15 +61,15 @@ bool PhononEngine::play(uint offset) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::stop() {
|
void PhononEngine::Stop() {
|
||||||
media_object_->stop();
|
media_object_->stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::pause() {
|
void PhononEngine::Pause() {
|
||||||
media_object_->pause();
|
media_object_->pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::unpause() {
|
void PhononEngine::Unpause() {
|
||||||
media_object_->play();
|
media_object_->play();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,21 +98,21 @@ uint PhononEngine::length() const {
|
||||||
return media_object_->totalTime();
|
return media_object_->totalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::seek(uint ms) {
|
void PhononEngine::Seek(uint ms) {
|
||||||
media_object_->seek(ms);
|
media_object_->seek(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::setVolumeSW(uint) {
|
void PhononEngine::SetVolumeSW(uint volume) {
|
||||||
audio_output_->setVolume(qreal(m_volume) / 100.0);
|
audio_output_->setVolume(volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::PhononFinished() {
|
void PhononEngine::PhononFinished() {
|
||||||
emit trackEnded();
|
emit TrackEnded();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::PhononStateChanged(Phonon::State new_state) {
|
void PhononEngine::PhononStateChanged(Phonon::State new_state) {
|
||||||
if (new_state == Phonon::ErrorState) {
|
if (new_state == Phonon::ErrorState) {
|
||||||
emit error(media_object_->errorString());
|
emit Error(media_object_->errorString());
|
||||||
}
|
}
|
||||||
if (new_state == Phonon::PlayingState && seek_offset_ != -1) {
|
if (new_state == Phonon::PlayingState && seek_offset_ != -1) {
|
||||||
media_object_->seek(seek_offset_);
|
media_object_->seek(seek_offset_);
|
||||||
|
@ -124,5 +124,5 @@ void PhononEngine::PhononStateChanged(Phonon::State new_state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhononEngine::StateTimeoutExpired() {
|
void PhononEngine::StateTimeoutExpired() {
|
||||||
emit stateChanged(state());
|
emit StateChanged(state());
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,24 +31,24 @@ class PhononEngine : public Engine::Base {
|
||||||
PhononEngine();
|
PhononEngine();
|
||||||
~PhononEngine();
|
~PhononEngine();
|
||||||
|
|
||||||
bool init();
|
bool Init();
|
||||||
|
|
||||||
bool canDecode( const QUrl &url ) const;
|
bool CanDecode( const QUrl &url );
|
||||||
|
|
||||||
bool load( const QUrl &url, bool stream = false );
|
bool Load( const QUrl &url, Engine::TrackChangeType change );
|
||||||
bool play( uint offset = 0 );
|
bool Play( uint offset = 0 );
|
||||||
void stop();
|
void Stop();
|
||||||
void pause();
|
void Pause();
|
||||||
void unpause();
|
void Unpause();
|
||||||
|
|
||||||
Engine::State state() const;
|
Engine::State state() const;
|
||||||
uint position() const;
|
uint position() const;
|
||||||
uint length() const;
|
uint length() const;
|
||||||
|
|
||||||
void seek( uint ms );
|
void Seek( uint ms );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setVolumeSW( uint percent );
|
void SetVolumeSW( uint percent );
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void PhononFinished();
|
void PhononFinished();
|
||||||
|
|
|
@ -113,23 +113,23 @@ void VlcEngine::StateChangedCallback(const libvlc_event_t* e, void* data) {
|
||||||
|
|
||||||
case libvlc_MediaPlayerEndReached:
|
case libvlc_MediaPlayerEndReached:
|
||||||
engine->state_ = Engine::Idle;
|
engine->state_ = Engine::Idle;
|
||||||
emit engine->trackEnded();
|
emit engine->TrackEnded();
|
||||||
return; // Don't emit state changed here
|
return; // Don't emit state changed here
|
||||||
}
|
}
|
||||||
|
|
||||||
emit engine->stateChanged(engine->state_);
|
emit engine->StateChanged(engine->state_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VlcEngine::init() {
|
bool VlcEngine::Init() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VlcEngine::canDecode(const QUrl &url) const {
|
bool VlcEngine::CanDecode(const QUrl &url) {
|
||||||
// TODO
|
// TODO
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VlcEngine::load(const QUrl &url, bool stream) {
|
bool VlcEngine::Load(const QUrl &url, Engine::TrackChangeType change) {
|
||||||
// Create the media object
|
// Create the media object
|
||||||
VlcScopedRef<libvlc_media_t> media(
|
VlcScopedRef<libvlc_media_t> media(
|
||||||
libvlc_media_new(instance_, url.toEncoded().constData(), &exception_));
|
libvlc_media_new(instance_, url.toEncoded().constData(), &exception_));
|
||||||
|
@ -143,27 +143,27 @@ bool VlcEngine::load(const QUrl &url, bool stream) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VlcEngine::play(uint offset) {
|
bool VlcEngine::Play(uint offset) {
|
||||||
libvlc_media_player_play(player_, &exception_);
|
libvlc_media_player_play(player_, &exception_);
|
||||||
if (libvlc_exception_raised(&exception_))
|
if (libvlc_exception_raised(&exception_))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
seek(offset);
|
Seek(offset);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VlcEngine::stop() {
|
void VlcEngine::Stop() {
|
||||||
libvlc_media_player_stop(player_, &exception_);
|
libvlc_media_player_stop(player_, &exception_);
|
||||||
HandleErrors();
|
HandleErrors();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VlcEngine::pause() {
|
void VlcEngine::Pause() {
|
||||||
libvlc_media_player_pause(player_, &exception_);
|
libvlc_media_player_pause(player_, &exception_);
|
||||||
HandleErrors();
|
HandleErrors();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VlcEngine::unpause() {
|
void VlcEngine::Unpause() {
|
||||||
libvlc_media_player_play(player_, &exception_);
|
libvlc_media_player_play(player_, &exception_);
|
||||||
HandleErrors();
|
HandleErrors();
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ uint VlcEngine::length() const {
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VlcEngine::seek(uint ms) {
|
void VlcEngine::Seek(uint ms) {
|
||||||
uint len = length();
|
uint len = length();
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return;
|
return;
|
||||||
|
@ -209,7 +209,7 @@ void VlcEngine::seek(uint ms) {
|
||||||
HandleErrors();
|
HandleErrors();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VlcEngine::setVolumeSW(uint volume) {
|
void VlcEngine::SetVolumeSW(uint volume) {
|
||||||
libvlc_audio_set_volume(instance_, volume, &exception_);
|
libvlc_audio_set_volume(instance_, volume, &exception_);
|
||||||
HandleErrors();
|
HandleErrors();
|
||||||
}
|
}
|
||||||
|
@ -233,19 +233,19 @@ void VlcEngine::SetScopeData(float* data, int size) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const Engine::Scope& VlcEngine::scope() {
|
const Engine::Scope& VlcEngine::Scope() {
|
||||||
QMutexLocker l(&scope_mutex_);
|
QMutexLocker l(&scope_mutex_);
|
||||||
|
|
||||||
// Leave the scope unchanged if there's not enough data
|
// Leave the scope unchanged if there's not enough data
|
||||||
if (scope_data_.size() < uint(SCOPESIZE))
|
if (scope_data_.size() < uint(kScopeSize))
|
||||||
return m_scope;
|
return scope_;
|
||||||
|
|
||||||
// Take the samples off the front of the circular buffer
|
// Take the samples off the front of the circular buffer
|
||||||
for (uint i=0 ; i<uint(SCOPESIZE) ; ++i)
|
for (uint i=0 ; i<uint(kScopeSize) ; ++i)
|
||||||
m_scope[i] = scope_data_[i] * (1 << 15);
|
scope_[i] = scope_data_[i] * (1 << 15);
|
||||||
|
|
||||||
// Remove the samples from the buffer. Unfortunately I think this is O(n) :(
|
// Remove the samples from the buffer. Unfortunately I think this is O(n) :(
|
||||||
scope_data_.rresize(qMax(0, int(scope_data_.size()) - SCOPESIZE*2));
|
scope_data_.rresize(qMax(0, int(scope_data_.size()) - kScopeSize*2));
|
||||||
|
|
||||||
return m_scope;
|
return scope_;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,27 +33,27 @@ class VlcEngine : public Engine::Base {
|
||||||
VlcEngine();
|
VlcEngine();
|
||||||
~VlcEngine();
|
~VlcEngine();
|
||||||
|
|
||||||
bool init();
|
bool Init();
|
||||||
|
|
||||||
bool canDecode( const QUrl &url ) const;
|
bool CanDecode( const QUrl &url );
|
||||||
|
|
||||||
bool load( const QUrl &url, bool stream = false );
|
bool Load( const QUrl &url, Engine::TrackChangeType change );
|
||||||
bool play( uint offset = 0 );
|
bool Play( uint offset = 0 );
|
||||||
void stop();
|
void Stop();
|
||||||
void pause();
|
void Pause();
|
||||||
void unpause();
|
void Unpause();
|
||||||
|
|
||||||
Engine::State state() const { return state_; }
|
Engine::State state() const { return state_; }
|
||||||
uint position() const;
|
uint position() const;
|
||||||
uint length() const;
|
uint length() const;
|
||||||
|
|
||||||
void seek( uint ms );
|
void Seek( uint ms );
|
||||||
|
|
||||||
static void SetScopeData(float* data, int size);
|
static void SetScopeData(float* data, int size);
|
||||||
const Engine::Scope& scope();
|
const Engine::Scope& Scope();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setVolumeSW( uint percent );
|
void SetVolumeSW( uint percent );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void HandleErrors() const;
|
void HandleErrors() const;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -57,16 +57,16 @@ class XineEngine : public Engine::Base
|
||||||
|
|
||||||
~XineEngine();
|
~XineEngine();
|
||||||
|
|
||||||
virtual bool init();
|
virtual bool Init();
|
||||||
virtual bool canDecode( const QUrl& ) const;
|
virtual bool CanDecode( const QUrl& );
|
||||||
virtual bool load( const QUrl &url, bool stream );
|
virtual bool Load( const QUrl &url, Engine::TrackChangeType change );
|
||||||
virtual bool play( uint = 0 );
|
virtual bool Play( uint = 0 );
|
||||||
virtual void stop();
|
virtual void Stop();
|
||||||
virtual void pause();
|
virtual void Pause();
|
||||||
virtual void unpause();
|
virtual void Unpause();
|
||||||
virtual uint position() const;
|
virtual uint position() const;
|
||||||
virtual uint length() const;
|
virtual uint length() const;
|
||||||
virtual void seek( uint );
|
virtual void Seek( uint );
|
||||||
|
|
||||||
virtual bool metaDataForUrl(const QUrl &url, Engine::SimpleMetaBundle &b);
|
virtual bool metaDataForUrl(const QUrl &url, Engine::SimpleMetaBundle &b);
|
||||||
virtual bool getAudioCDContents(const QString &device, QList<QUrl> &urls);
|
virtual bool getAudioCDContents(const QString &device, QList<QUrl> &urls);
|
||||||
|
@ -77,7 +77,7 @@ class XineEngine : public Engine::Base
|
||||||
|
|
||||||
virtual void setEqualizerEnabled( bool );
|
virtual void setEqualizerEnabled( bool );
|
||||||
virtual void setEqualizerParameters( int preamp, const QList<int>& );
|
virtual void setEqualizerParameters( int preamp, const QList<int>& );
|
||||||
virtual void setVolumeSW( uint );
|
virtual void SetVolumeSW( uint );
|
||||||
virtual void fadeOut( uint fadeLength, bool* terminate, bool exiting = false );
|
virtual void fadeOut( uint fadeLength, bool* terminate, bool exiting = false );
|
||||||
|
|
||||||
static void XineEventListener( void*, const xine_event_t* );
|
static void XineEventListener( void*, const xine_event_t* );
|
||||||
|
@ -95,35 +95,38 @@ class XineEngine : public Engine::Base
|
||||||
|
|
||||||
void determineAndShowErrorMessage(); //call after failure to load/play
|
void determineAndShowErrorMessage(); //call after failure to load/play
|
||||||
|
|
||||||
xine_t *m_xine;
|
xine_t *xine_;
|
||||||
xine_stream_t *m_stream;
|
xine_stream_t *stream_;
|
||||||
xine_audio_port_t *m_audioPort;
|
xine_audio_port_t *audioPort_;
|
||||||
xine_event_queue_t *m_eventQueue;
|
xine_event_queue_t *eventQueue_;
|
||||||
xine_post_t *m_post;
|
xine_post_t *post_;
|
||||||
|
|
||||||
int64_t m_currentVpts;
|
int64_t currentVpts_;
|
||||||
float m_preamp;
|
float preamp_;
|
||||||
|
|
||||||
bool m_stopFader;
|
bool stopFader_;
|
||||||
bool m_fadeOutRunning;
|
bool fadeOutRunning_;
|
||||||
|
|
||||||
QString m_currentAudioPlugin; //to see if audio plugin has been changed
|
QString currentAudioPlugin_; //to see if audio plugin has been changed
|
||||||
//need to save these for when the audio plugin is changed and xine reloaded
|
//need to save these for when the audio plugin is changed and xine reloaded
|
||||||
bool m_equalizerEnabled;
|
bool equalizerEnabled_;
|
||||||
int m_intPreamp;
|
int intPreamp_;
|
||||||
QList<int> m_equalizerGains;
|
QList<int> equalizerGains_;
|
||||||
|
|
||||||
QMutex m_initMutex;
|
QMutex initMutex_;
|
||||||
|
|
||||||
QSettings m_settings;
|
QSettings settings_;
|
||||||
bool m_fadeoutOnExit;
|
bool fadeoutOnExit_;
|
||||||
bool m_fadeoutEnabled;
|
bool fadeoutEnabled_;
|
||||||
bool m_crossfadeEnabled;
|
bool crossfadeEnabled_;
|
||||||
int m_fadeoutDuration;
|
int fadeoutDuration_;
|
||||||
|
int xfadeLength_;
|
||||||
|
bool xfadeNextTrack_;
|
||||||
|
QUrl url_;
|
||||||
|
|
||||||
PruneScopeThread* prune_;
|
PruneScopeThread* prune_;
|
||||||
|
|
||||||
mutable Engine::SimpleMetaBundle m_currentBundle;
|
mutable Engine::SimpleMetaBundle currentBundle_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
XineEngine();
|
XineEngine();
|
||||||
|
@ -133,19 +136,21 @@ public:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void resetConfig(xine_t *xine);
|
void resetConfig(xine_t *xine);
|
||||||
|
void InfoMessage(const QString&);
|
||||||
|
void LastFmTrackChange();
|
||||||
};
|
};
|
||||||
|
|
||||||
class Fader : public QThread
|
class Fader : public QThread
|
||||||
{
|
{
|
||||||
XineEngine *m_engine;
|
XineEngine *engine_;
|
||||||
xine_t *m_xine;
|
xine_t *xine_;
|
||||||
xine_stream_t *m_decrease;
|
xine_stream_t *decrease_;
|
||||||
xine_stream_t *m_increase;
|
xine_stream_t *increase_;
|
||||||
xine_audio_port_t *m_port;
|
xine_audio_port_t *port_;
|
||||||
xine_post_t *m_post;
|
xine_post_t *post_;
|
||||||
uint m_fadeLength;
|
uint fadeLength_;
|
||||||
bool m_paused;
|
bool paused_;
|
||||||
bool m_terminated;
|
bool terminated_;
|
||||||
|
|
||||||
virtual void run();
|
virtual void run();
|
||||||
|
|
||||||
|
@ -159,9 +164,9 @@ public:
|
||||||
|
|
||||||
class OutFader : public QThread
|
class OutFader : public QThread
|
||||||
{
|
{
|
||||||
XineEngine *m_engine;
|
XineEngine *engine_;
|
||||||
bool m_terminated;
|
bool terminated_;
|
||||||
uint m_fadeLength;
|
uint fadeLength_;
|
||||||
|
|
||||||
virtual void run();
|
virtual void run();
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ int main(int argc, char *argv[]) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Window
|
// Window
|
||||||
MainWindow w(&network);
|
MainWindow w(&network, options.engine());
|
||||||
|
|
||||||
#ifdef Q_OS_DARWIN
|
#ifdef Q_OS_DARWIN
|
||||||
mac::SetApplicationHandler(&w);
|
mac::SetApplicationHandler(&w);
|
||||||
|
|
|
@ -72,7 +72,7 @@ const char* MainWindow::kSettingsGroup = "MainWindow";
|
||||||
const char* MainWindow::kMediaFilterSpec =
|
const char* MainWindow::kMediaFilterSpec =
|
||||||
"Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma);;Playlists (*.m3u *.xspf *.xml)";
|
"Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma);;Playlists (*.m3u *.xspf *.xml)";
|
||||||
|
|
||||||
MainWindow::MainWindow(QNetworkAccessManager* network, QWidget *parent)
|
MainWindow::MainWindow(QNetworkAccessManager* network, Engine::Type engine, QWidget *parent)
|
||||||
: QMainWindow(parent),
|
: QMainWindow(parent),
|
||||||
#ifdef Q_OS_DARWIN
|
#ifdef Q_OS_DARWIN
|
||||||
tray_icon_(NULL),
|
tray_icon_(NULL),
|
||||||
|
@ -88,7 +88,7 @@ MainWindow::MainWindow(QNetworkAccessManager* network, QWidget *parent)
|
||||||
about_dialog_(new About),
|
about_dialog_(new About),
|
||||||
radio_model_(new RadioModel(this)),
|
radio_model_(new RadioModel(this)),
|
||||||
playlist_(new Playlist(this)),
|
playlist_(new Playlist(this)),
|
||||||
player_(new Player(playlist_, radio_model_->GetLastFMService(), this)),
|
player_(new Player(playlist_, radio_model_->GetLastFMService(), engine, this)),
|
||||||
library_(new Library(player_->GetEngine(), this)),
|
library_(new Library(player_->GetEngine(), this)),
|
||||||
global_shortcuts_(new GlobalShortcuts(this)),
|
global_shortcuts_(new GlobalShortcuts(this)),
|
||||||
settings_dialog_(new SettingsDialog),
|
settings_dialog_(new SettingsDialog),
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
|
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
|
#include "engines/engine_fwd.h"
|
||||||
|
|
||||||
class Playlist;
|
class Playlist;
|
||||||
class Player;
|
class Player;
|
||||||
|
@ -55,7 +56,7 @@ class MainWindow : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MainWindow(QNetworkAccessManager* network, QWidget *parent = 0);
|
MainWindow(QNetworkAccessManager* network, Engine::Type engine, QWidget *parent = 0);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
static const char* kSettingsGroup;
|
static const char* kSettingsGroup;
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
___
|
||||||
|
,---. /""`_,'
|
||||||
|
| `\``""-; /
|
||||||
|
\ /`\\ ';'
|
||||||
|
.') | __ \
|
||||||
|
/ (` / /(O\. _|
|
||||||
|
.-`| `"` ` .-\_
|
||||||
|
.-' \ ` ;=-.
|
||||||
|
.' . ._, / o o\
|
||||||
|
.-'` . '-._;_._.J
|
||||||
|
.-'` `.-'`
|
||||||
|
_.-` ' .'
|
||||||
|
.' '- ._.-'
|
||||||
|
/` /
|
||||||
|
/ You have been warned! |
|
||||||
|
._ ; | |
|
||||||
|
)).-| | | /
|
||||||
|
(/`.-| \ \ / .;
|
||||||
|
( (_)| | \ ; .' |
|
||||||
|
'--'; | `\ / / |
|
||||||
|
\ | `\ /.' /
|
||||||
|
\ / ; |`\ |
|
||||||
|
'. .' _.-| | | |
|
||||||
|
'-. .-';_"---'`.__| | | \
|
||||||
|
`'-._ ``'-. | \ \__\\
|
||||||
|
`''--.___\\ \__\\
|
|
@ -17,7 +17,20 @@
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
#include "lastfmservice.h"
|
#include "lastfmservice.h"
|
||||||
#include "engines/gstengine.h"
|
#include "engines/enginebase.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_GSTREAMER
|
||||||
|
# include "engines/gstengine.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_VLC
|
||||||
|
# include "engines/vlcengine.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_XINE
|
||||||
|
# include "engines/xine-engine.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_QT_PHONON
|
||||||
|
# include "engines/phononengine.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
#ifdef Q_WS_X11
|
||||||
# include "mpris_player.h"
|
# include "mpris_player.h"
|
||||||
|
@ -54,14 +67,15 @@ const QDBusArgument& operator>> (const QDBusArgument& arg, DBusStatus& status) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Player::Player(Playlist* playlist, LastFMService* lastfm, QObject* parent)
|
Player::Player(Playlist* playlist, LastFMService* lastfm, Engine::Type engine, QObject* parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
playlist_(playlist),
|
playlist_(playlist),
|
||||||
lastfm_(lastfm),
|
lastfm_(lastfm),
|
||||||
current_item_options_(PlaylistItem::Default),
|
current_item_options_(PlaylistItem::Default),
|
||||||
engine_(new GstEngine),
|
|
||||||
stream_change_type_(Engine::First)
|
stream_change_type_(Engine::First)
|
||||||
{
|
{
|
||||||
|
engine_ = createEngine(engine);
|
||||||
|
|
||||||
settings_.beginGroup("Player");
|
settings_.beginGroup("Player");
|
||||||
|
|
||||||
SetVolume(settings_.value("volume", 50).toInt());
|
SetVolume(settings_.value("volume", 50).toInt());
|
||||||
|
@ -79,6 +93,37 @@ Player::Player(Playlist* playlist, LastFMService* lastfm, QObject* parent)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EngineBase* Player::createEngine(Engine::Type engine) {
|
||||||
|
|
||||||
|
switch(engine) {
|
||||||
|
#ifdef HAVE_GSTREAMER
|
||||||
|
case Engine::gstreamer:
|
||||||
|
return new GstEngine();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_VLC
|
||||||
|
case Engine::vlc:
|
||||||
|
return new VlcEngine();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_XINE
|
||||||
|
case Engine::xine:
|
||||||
|
return new XineEngine();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_QT_PHONON
|
||||||
|
case Engine::qt_phonon:
|
||||||
|
return new PhononEngine();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
qFatal("Selected engine not compiled in");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* NOT REACHED */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void Player::Init() {
|
void Player::Init() {
|
||||||
if (!engine_->Init())
|
if (!engine_->Init())
|
||||||
qFatal("Error initialising audio engine");
|
qFatal("Error initialising audio engine");
|
||||||
|
|
|
@ -52,8 +52,9 @@ class Player : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Player(Playlist* playlist, LastFMService* lastfm, QObject* parent = 0);
|
Player(Playlist* playlist, LastFMService* lastfm, Engine::Type engine, QObject* parent = 0);
|
||||||
|
|
||||||
|
EngineBase* createEngine(Engine::Type engine);
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
EngineBase* GetEngine() { return engine_; }
|
EngineBase* GetEngine() { return engine_; }
|
||||||
|
|
|
@ -550,6 +550,14 @@ msgstr ""
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -692,8 +700,7 @@ msgid "Tools"
|
||||||
msgstr "Nástroje"
|
msgstr "Nástroje"
|
||||||
|
|
||||||
msgid "These folders will be scanned for music to make up your library"
|
msgid "These folders will be scanned for music to make up your library"
|
||||||
msgstr ""
|
msgstr "Tyto složky budou prohledány a nalezená hudba bude přidána do knihovny"
|
||||||
"Tyto složky budou prohledány a nalezená hudba bude přidána do knihovny"
|
|
||||||
|
|
||||||
msgid "Add new folder..."
|
msgid "Add new folder..."
|
||||||
msgstr "Přidat novou složku..."
|
msgstr "Přidat novou složku..."
|
||||||
|
@ -732,11 +739,11 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pamatujte, že musíte být <span style=\" font-weight:600;\">platící "
|
"Pamatujte, že musíte být <span style=\" font-weight:600;\">platící uživatel</"
|
||||||
"uživatel</span> abyste v Clementine mohli poslouchat rádio Last.fm."
|
"span> abyste v Clementine mohli poslouchat rádio Last.fm."
|
||||||
|
|
||||||
msgid "Authenticating..."
|
msgid "Authenticating..."
|
||||||
msgstr "Ověřuji..."
|
msgstr "Ověřuji..."
|
||||||
|
@ -747,8 +754,8 @@ msgstr "Přehrát umělce nebo značku"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zadejte <b>umělce</b> nebo <b>značku</b> pro spuštění poslouchání rádia "
|
"Zadejte <b>umělce</b> nebo <b>značku</b> pro spuštění poslouchání rádia Last."
|
||||||
"Last.fm."
|
"fm."
|
||||||
|
|
||||||
msgid "Tag"
|
msgid "Tag"
|
||||||
msgstr "Značka"
|
msgstr "Značka"
|
||||||
|
|
|
@ -555,6 +555,14 @@ msgstr "Einstellungen"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
|
|
@ -541,8 +541,7 @@ msgid "Append files/URLs to the playlist"
|
||||||
msgstr "Προσάρτηση αρχείων/URLs στην λίστα αναπαραγωγής"
|
msgstr "Προσάρτηση αρχείων/URLs στην λίστα αναπαραγωγής"
|
||||||
|
|
||||||
msgid "Loads files/URLs, replacing current playlist"
|
msgid "Loads files/URLs, replacing current playlist"
|
||||||
msgstr ""
|
msgstr "Φορτώνει αρχεία/URLs, αντικαθιστώντας την τρέχουσα λίστα αναπαραγωγής"
|
||||||
"Φορτώνει αρχεία/URLs, αντικαθιστώντας την τρέχουσα λίστα αναπαραγωγής"
|
|
||||||
|
|
||||||
msgid "Play the <n>th track in the playlist"
|
msgid "Play the <n>th track in the playlist"
|
||||||
msgstr "Αναπαραγωγή του <n>ου κομματιού της λίστας αναπαραγωγής"
|
msgstr "Αναπαραγωγή του <n>ου κομματιού της λίστας αναπαραγωγής"
|
||||||
|
@ -553,6 +552,14 @@ msgstr "Άλλες επιλογές"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr "Απεικόνιση της «απεικόνισης στην οθόνη»"
|
msgstr "Απεικόνιση της «απεικόνισης στην οθόνη»"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -695,8 +702,7 @@ msgid "Tools"
|
||||||
msgstr "Εργαλεία"
|
msgstr "Εργαλεία"
|
||||||
|
|
||||||
msgid "These folders will be scanned for music to make up your library"
|
msgid "These folders will be scanned for music to make up your library"
|
||||||
msgstr ""
|
msgstr "Οι φάκελοι αυτοί θα σαρωθούν για μουσικά αρχεία για την βιβλιοθήκη σας"
|
||||||
"Οι φάκελοι αυτοί θα σαρωθούν για μουσικά αρχεία για την βιβλιοθήκη σας"
|
|
||||||
|
|
||||||
msgid "Add new folder..."
|
msgid "Add new folder..."
|
||||||
msgstr "Προσθήκη νέου φακέλου..."
|
msgstr "Προσθήκη νέου φακέλου..."
|
||||||
|
@ -735,11 +741,11 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr "Εμφάνισε τα κουμπιά \"αγάπη\"και \"απαγόρευση\""
|
msgstr "Εμφάνισε τα κουμπιά \"αγάπη\"και \"απαγόρευση\""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Σημείωσε πως πρέπει να είσαι <span style=\" font-"
|
"Σημείωσε πως πρέπει να είσαι <span style=\" font-weight:600;\">συνδρομητής</"
|
||||||
"weight:600;\">συνδρομητής</span> για να ακούσεις Last.fm από το Clementine."
|
"span> για να ακούσεις Last.fm από το Clementine."
|
||||||
|
|
||||||
msgid "Authenticating..."
|
msgid "Authenticating..."
|
||||||
msgstr "Πιστοποίηση..."
|
msgstr "Πιστοποίηση..."
|
||||||
|
|
|
@ -255,8 +255,7 @@ msgid "This stream is for paid subscribers only"
|
||||||
msgstr "Este flujo es solo para Suscriptores de Paga"
|
msgstr "Este flujo es solo para Suscriptores de Paga"
|
||||||
|
|
||||||
msgid "Last.fm is currently busy, please try again in a few minutes"
|
msgid "Last.fm is currently busy, please try again in a few minutes"
|
||||||
msgstr ""
|
msgstr "Last.fm está actualmente saturado, intente nuevamente en unos minutos"
|
||||||
"Last.fm está actualmente saturado, intente nuevamente en unos minutos"
|
|
||||||
|
|
||||||
msgid "Not enough content"
|
msgid "Not enough content"
|
||||||
msgstr "No hay suficiente contenido"
|
msgstr "No hay suficiente contenido"
|
||||||
|
@ -378,8 +377,8 @@ msgstr "Establecer carátula personalizada"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
|
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Imágenes (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm "
|
"Imágenes (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *."
|
||||||
"*.tiff)"
|
"tiff)"
|
||||||
|
|
||||||
msgid "All files (*)"
|
msgid "All files (*)"
|
||||||
msgstr "Todos los archivos (*)"
|
msgstr "Todos los archivos (*)"
|
||||||
|
@ -553,6 +552,14 @@ msgstr "Otras opciones"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr "Mostrar la indicación-en-pantalla"
|
msgstr "Mostrar la indicación-en-pantalla"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -708,8 +715,7 @@ msgid "Options"
|
||||||
msgstr "Opciones"
|
msgstr "Opciones"
|
||||||
|
|
||||||
msgid "Automatically open single categories in the library tree"
|
msgid "Automatically open single categories in the library tree"
|
||||||
msgstr ""
|
msgstr "Automaticamente expandir categorias unicas en el árbol de la colección"
|
||||||
"Automaticamente expandir categorias unicas en el árbol de la colección"
|
|
||||||
|
|
||||||
msgid "Form"
|
msgid "Form"
|
||||||
msgstr "Formulario"
|
msgstr "Formulario"
|
||||||
|
@ -736,8 +742,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr "Mostrar los botones \"Me encanta\" y \"Prohibir\""
|
msgstr "Mostrar los botones \"Me encanta\" y \"Prohibir\""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Recuerda que tienes que ser un <span style=\" font-weight:600;\">Suscriptor "
|
"Recuerda que tienes que ser un <span style=\" font-weight:600;\">Suscriptor "
|
||||||
"de Paga</span> para poder escuchar la radio de Last.fm desde Clementine."
|
"de Paga</span> para poder escuchar la radio de Last.fm desde Clementine."
|
||||||
|
@ -751,8 +757,8 @@ msgstr "Reproducir Artista o Etiqueta"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ingrese un <b>artista</b> o <b>etiqueta</b> para escuchar la radio de "
|
"Ingrese un <b>artista</b> o <b>etiqueta</b> para escuchar la radio de Last."
|
||||||
"Last.fm."
|
"fm."
|
||||||
|
|
||||||
msgid "Tag"
|
msgid "Tag"
|
||||||
msgstr "Etiqueta"
|
msgstr "Etiqueta"
|
||||||
|
@ -1050,8 +1056,8 @@ msgstr "Habilitar el ecualizador"
|
||||||
#~ msgstr "Acceso por defecto:"
|
#~ msgstr "Acceso por defecto:"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "You are about to reset to global shortcuts default values. Are you sure you "
|
#~ "You are about to reset to global shortcuts default values. Are you sure "
|
||||||
#~ "want to continue?"
|
#~ "you want to continue?"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Estas por reinicar las teclas rapidas a sus valores por defecto. Estás "
|
#~ "Estas por reinicar las teclas rapidas a sus valores por defecto. Estás "
|
||||||
#~ "seguro que deseas continuar?"
|
#~ "seguro que deseas continuar?"
|
||||||
|
|
|
@ -553,6 +553,14 @@ msgstr "Autres options"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -736,8 +744,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"N'oubliez pas que vous devez être <span style=\" font-weight:600;\">abonné "
|
"N'oubliez pas que vous devez être <span style=\" font-weight:600;\">abonné "
|
||||||
"(payant)</span> pour écouter la radio Last.fm avec Clementine."
|
"(payant)</span> pour écouter la radio Last.fm avec Clementine."
|
||||||
|
|
|
@ -557,6 +557,14 @@ msgstr "Instillinger"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
|
|
@ -550,6 +550,13 @@ msgstr ""
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -731,8 +738,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Musisz posiadać <span style=\" font-weight:600;\">opłacone konto</span> aby "
|
"Musisz posiadać <span style=\" font-weight:600;\">opłacone konto</span> aby "
|
||||||
"słuchać radia Last.fm w Clementine."
|
"słuchać radia Last.fm w Clementine."
|
||||||
|
@ -745,8 +752,7 @@ msgstr "Odtwarzaj Wykonawcę lub Znacznik"
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
||||||
msgstr ""
|
msgstr "Wpisz <b>wykonawcę</b> lub <b>znacznik</b> aby słuchać radia Last.fm."
|
||||||
"Wpisz <b>wykonawcę</b> lub <b>znacznik</b> aby słuchać radia Last.fm."
|
|
||||||
|
|
||||||
msgid "Tag"
|
msgid "Tag"
|
||||||
msgstr "Znacznik"
|
msgstr "Znacznik"
|
||||||
|
|
|
@ -552,6 +552,14 @@ msgstr "Outras opções"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -733,8 +741,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr "Mostrar os botões \"adorar\" e \"excluir\""
|
msgstr "Mostrar os botões \"adorar\" e \"excluir\""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Note que deverá ser <span style=\" font-weight:600;\"> um assinante </span> "
|
"Note que deverá ser <span style=\" font-weight:600;\"> um assinante </span> "
|
||||||
"para ouvir rádio da Last.fm com o Clementine."
|
"para ouvir rádio da Last.fm com o Clementine."
|
||||||
|
@ -806,8 +814,7 @@ msgid "Choose automatically"
|
||||||
msgstr "Escolher automaticamente"
|
msgstr "Escolher automaticamente"
|
||||||
|
|
||||||
msgid "Leave blank for the default. Examples: \"/dev/dsp\", \"front\", etc."
|
msgid "Leave blank for the default. Examples: \"/dev/dsp\", \"front\", etc."
|
||||||
msgstr ""
|
msgstr "Deixar em branco por defeito. Exemplos: \"/dev/dsp\", \"front\", etc."
|
||||||
"Deixar em branco por defeito. Exemplos: \"/dev/dsp\", \"front\", etc."
|
|
||||||
|
|
||||||
msgid "Output device"
|
msgid "Output device"
|
||||||
msgstr "Dispositivo de saída"
|
msgstr "Dispositivo de saída"
|
||||||
|
|
|
@ -549,6 +549,13 @@ msgstr ""
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -730,8 +737,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Authenticating..."
|
msgid "Authenticating..."
|
||||||
|
|
|
@ -375,8 +375,8 @@ msgstr "Укажите обложку вручную"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
|
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Изображения (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm "
|
"Изображения (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *."
|
||||||
"*.tiff)"
|
"tiff)"
|
||||||
|
|
||||||
msgid "All files (*)"
|
msgid "All files (*)"
|
||||||
msgstr "Все файлы (*)"
|
msgstr "Все файлы (*)"
|
||||||
|
@ -550,6 +550,14 @@ msgstr "Другие настройки"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr "Показывать экранное уведомление"
|
msgstr "Показывать экранное уведомление"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -732,12 +740,11 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr "Показывать кнопки \"Избранное\" и \"Запретить\""
|
msgstr "Показывать кнопки \"Избранное\" и \"Запретить\""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Обратите внимание, что вы должны быть <span style=\"font-"
|
"Обратите внимание, что вы должны быть <span style=\"font-weight:600;"
|
||||||
"weight:600;\">платным подписчиком</span> ,чтобы слушать радио Last.fm из "
|
"\">платным подписчиком</span> ,чтобы слушать радио Last.fm из Clementine."
|
||||||
"Clementine."
|
|
||||||
|
|
||||||
msgid "Authenticating..."
|
msgid "Authenticating..."
|
||||||
msgstr "Аутентификация..."
|
msgstr "Аутентификация..."
|
||||||
|
@ -747,8 +754,7 @@ msgstr "Проиграть исполнителя или тег"
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
||||||
msgstr ""
|
msgstr "Укажите <b>исполнителя</b> или <b>тег</b> чтобы слушать радио Last.fm."
|
||||||
"Укажите <b>исполнителя</b> или <b>тег</b> чтобы слушать радио Last.fm."
|
|
||||||
|
|
||||||
msgid "Tag"
|
msgid "Tag"
|
||||||
msgstr "Тег"
|
msgstr "Тег"
|
||||||
|
|
|
@ -551,6 +551,13 @@ msgstr ""
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -732,8 +739,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pam§tajte, že musíte byť <span style=\" font-weight:600;\">platiaci "
|
"Pam§tajte, že musíte byť <span style=\" font-weight:600;\">platiaci "
|
||||||
"odberateľ</span> aby ste mohli počúvať Last.fm rádio v Clementine."
|
"odberateľ</span> aby ste mohli počúvať Last.fm rádio v Clementine."
|
||||||
|
@ -1039,8 +1046,8 @@ msgstr ""
|
||||||
#~ msgstr "Pôvodný kľúč"
|
#~ msgstr "Pôvodný kľúč"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "You are about to reset to global shortcuts default values. Are you sure you "
|
#~ "You are about to reset to global shortcuts default values. Are you sure "
|
||||||
#~ "want to continue?"
|
#~ "you want to continue?"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Pokúšate sa zresetovať pôvodné globálne skratky. Ste si istý, že chcete "
|
#~ "Pokúšate sa zresetovať pôvodné globálne skratky. Ste si istý, že chcete "
|
||||||
#~ "pokračovať?"
|
#~ "pokračovať?"
|
||||||
|
|
|
@ -550,6 +550,14 @@ msgstr "Övriga alternativ"
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr "Clementine"
|
msgstr "Clementine"
|
||||||
|
|
||||||
|
@ -733,8 +741,8 @@ msgid "Show the \"love\" and \"ban\" buttons"
|
||||||
msgstr "Visa knapparna \"gilla\" och \"banlys\""
|
msgstr "Visa knapparna \"gilla\" och \"banlys\""
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that you must be a <span style=\" font-weight:600;\">paid "
|
"Note that you must be a <span style=\" font-weight:600;\">paid subscriber</"
|
||||||
"subscriber</span> to listen to Last.fm radio from within Clementine."
|
"span> to listen to Last.fm radio from within Clementine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du måste ha ett <span style=\"font-weight:600;\">betalabonnemang</span> för "
|
"Du måste ha ett <span style=\"font-weight:600;\">betalabonnemang</span> för "
|
||||||
"att kunna lyssna på Last.fm radio i Clementine."
|
"att kunna lyssna på Last.fm radio i Clementine."
|
||||||
|
@ -748,8 +756,8 @@ msgstr "Spela upp artist eller tagg"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Skriv in en <b>artist</b> eller <b>tagg</b> för att börja lyssna till "
|
"Skriv in en <b>artist</b> eller <b>tagg</b> för att börja lyssna till Last."
|
||||||
"Last.fm radio."
|
"fm radio."
|
||||||
|
|
||||||
msgid "Tag"
|
msgid "Tag"
|
||||||
msgstr "Tagg"
|
msgstr "Tagg"
|
||||||
|
|
|
@ -549,6 +549,13 @@ msgstr ""
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -540,6 +540,13 @@ msgstr ""
|
||||||
msgid "Display the on-screen-display"
|
msgid "Display the on-screen-display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select engine"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, qt-format
|
||||||
|
msgid "Unknown audio engine \"%1\". Choices are:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Clementine"
|
msgid "Clementine"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue