[SCM] cantata/master: Imported Upstream version 1.5.2.ds1
stuart at users.alioth.debian.org
stuart at users.alioth.debian.org
Mon Apr 27 13:37:38 UTC 2015
The following commit has been merged in the master branch:
commit ea299e3a687e3bb92d91e9a7e6f98dc49a79bf69
Author: Stuart Prescott <stuart at debian.org>
Date: Mon Apr 27 00:32:52 2015 +1000
Imported Upstream version 1.5.2.ds1
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f2af90d..9a2030b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,20 @@
PROJECT(cantata)
+# NOTE: If PROJECT_URL, or PROJECT_REV_URL, are changed, then cantata-dynamic, and README will need updating.
+# dbus/com.googlecode.cantata.xml and devices/mounter/com.googlecode.cantata.mounter.xml
+# will also need renaming/updating.
+set(PROJECT_URL "cantata.googlecode.com")
+set(PROJECT_REV_URL "com.googlecode.cantata")
+
+if (WIN32)
+ # For some reason I chose mpd as the organization name for Windows builds. So, for config compatability, this is
+ # left as mpd for now...
+ set(ORGANIZATION_NAME "mpd")
+else (WIN32)
+ # Otherwise its set to the same as the project name. Not sure what else to set it to!!!
+ set(ORGANIZATION_NAME ${CMAKE_PROJECT_NAME})
+endif (WIN32)
+
cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
@@ -10,14 +25,15 @@ set(DEBIAN_PACKAGE_DESCRIPTION "Qt/KDE Client for MPD")
set(DEBIAN_PACKAGE_SECTION "kde4")
set(CPACK_SOURCE_GENERATOR "TBZ2")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
-set(CPACK_PACKAGE_VERSION_MINOR "4")
+set(CPACK_PACKAGE_VERSION_MINOR "5")
set(CPACK_PACKAGE_VERSION_PATCH "2")
-set(CPACK_PACKAGE_VERSION_SPIN "")
+set(CPACK_PACKAGE_VERSION_SPIN "") # Use ".$number" - e.g. ".1"
set(CPACK_PACKAGE_CONTACT "Craig Drummond <craig.p.drummond at gmail.com>")
set(CANTATA_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
set(CANTATA_VERSION_FULL "${CANTATA_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}")
-set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CANTATA_VERSION_FULL}${CPACK_PACKAGE_VERSION_SPIN}")
-set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CANTATA_VERSION_FULL}${CPACK_PACKAGE_VERSION_SPIN}")
+set(CANTATA_VERSION_WITH_SPIN "${CANTATA_VERSION_FULL}${CPACK_PACKAGE_VERSION_SPIN}")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CANTATA_VERSION_WITH_SPIN}")
+set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CANTATA_VERSION_WITH_SPIN}")
set(CPACK_SOURCE_IGNORE_FILES "/.svn/;CMakeLists.txt.user")
include(CPack)
include(MacroLogFeature)
@@ -30,6 +46,7 @@ option(ENABLE_KDE "Enable KDE libraries" OFF)
option(ENABLE_KWALLET "Use KWallet in KDE builds" ON)
option(ENABLE_QT5 "Build against Qt5" OFF)
option(ENABLE_UBUNTU "Build for the Ubuntu SDK" OFF)
+option(ENABLE_UBUNTU_COMMAND_LINE "Build for the Ubuntu SDK from the command line" OFF)
option(ENABLE_FFMPEG "Enable ffmpeg/libav libraries (required for replaygain calculation)" ON)
option(ENABLE_MPG123 "Enable mpg123 libraries (required for replaygain calculation)" ON)
option(ENABLE_PROXY_CONFIG "Enable proxy config in settings dialog" OFF)
@@ -39,12 +56,15 @@ option(ENABLE_DYNAMIC "Enable support for dynamic playlists" ON)
option(ENABLE_STREAMS "Enable support for streams tab (to save favourite streams, and search for others)" ON)
option(ENABLE_ONLINE_SERVICES "Enable support for online services (Jamendo, Magnatune, SoundCloud, and Podcasts)" ON)
if (WIN32 OR APPLE)
- set(USE_SYSTEM_MENU_ICON OFF)
option(ENABLE_DEVICES_SUPPORT "Enable suport for external devices" OFF)
else (WIN32 OR APPLE)
- option(USE_SYSTEM_MENU_ICON "Use system menu icon" ON)
option(ENABLE_DEVICES_SUPPORT "Enable suport for external devices" ON)
endif (WIN32 OR APPLE)
+if (WIN32)
+ set(USE_SYSTEM_MENU_ICON OFF)
+else (WIN32)
+ option(USE_SYSTEM_MENU_ICON "Use system menu icon" ON)
+endif (WIN32)
option(ENABLE_CDPARANOIA "Enable CDParanoia libraries (required for AudioCD support)" ON)
option(ENABLE_CDDB "Enable CDDB libraries (either this or MusicBrianz required for AudioCD support)" ON)
option(ENABLE_MUSICBRAINZ "Enable MusicBrianz libraries (either this or CDDB required for AudioCD support)" ON)
@@ -56,17 +76,29 @@ option(ENABLE_UNCACHED_MTP "Open MTP devices in un-cached mode (faster)" ON)
if (WIN32)
set(CANTATA_ICON_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/icons/oxygen)
elseif (APPLE)
+ set(ENABLE_QT5 ON)
set(MACOSX_BUNDLE_BUNDLE_NAME Cantata)
- set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${CANATA_VERSION})
- set(MACOSX_BUNDLE_VERSION ${CANATA_VERSION})
- set(MACOSX_BUNDLE_LONG_VERSION_STRING ${CANTATA_VERSION_FULL})
- set(MACOSX_BUNDLE_ICON_FILE "cantata.icns")
- set(MACOSX_BUNDLE_RESOURCES "${CMAKE_INSTALL_PREFIX}/cantata.app/Contents/Resources")
+ set(MACOSX_BUNDLE_EXECUTABLE cantata)
+ set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${CANTATA_VERSION})
+ set(MACOSX_BUNDLE_VERSION ${CANTATA_VERSION})
+ set(MACOSX_BUNDLE_LONG_VERSION_STRING ${CANTATA_VERSION_WITH_SPIN})
+ set(MACOSX_BUNDLE_ICON_FILE cantata.icns)
+ set(CANTATA_APP_CONTENTS_DIR ${CMAKE_INSTALL_PREFIX}/Cantata.app/Contents)
+ set(MACOSX_BUNDLE_RESOURCES ${CANTATA_APP_CONTENTS_DIR}/Resources)
+ set(MACOSX_BUNDLE_APP_DIR ${CANTATA_APP_CONTENTS_DIR}/MacOS)
set(CANTATA_ICON_INSTALL_PREFIX ${MACOSX_BUNDLE_RESOURCES}/icons/oxygen)
-else (WIN32)
+elseif (NOT ENABLE_UBUNTU)
set(CANTATA_ICON_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor)
endif (WIN32)
+if (ENABLE_UBUNTU_COMMAND_LINE)
+ set(ENABLE_UBUNTU ON)
+endif (ENABLE_UBUNTU_COMMAND_LINE)
+
+if (NOT APPLE AND NOT WIN32 AND NOT ENABLE_UBUNTU AND NOT ENABLE_KDE_SUPPORT)
+ set(UNITY_MENU_HACK ON)
+endif (NOT APPLE AND NOT WIN32 AND NOT ENABLE_UBUNTU AND NOT ENABLE_KDE_SUPPORT)
+
if (ENABLE_UBUNTU)
set(ENABLE_QT5 ON)
set(ENABLE_DYNAMIC OFF)
@@ -106,8 +138,20 @@ if (NOT CMAKE_BUILD_TYPE)
message("-- Set build type to ${CMAKE_BUILD_TYPE}")
endif (NOT CMAKE_BUILD_TYPE)
+if (NOT APPLE AND NOT WIN32)
+ if (CANTATA_HELPERS_LIB_DIR AND NOT ENABLE_KDE AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(LINUX_LIB_DIR ${CANTATA_HELPERS_LIB_DIR})
+ else (CANTATA_HELPERS_LIB_DIR AND NOT ENABLE_KDE AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(LINUX_LIB_DIR lib)
+ endif (CANTATA_HELPERS_LIB_DIR AND NOT ENABLE_KDE AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+endif (NOT APPLE AND NOT WIN32)
+
if (ENABLE_UBUNTU)
- set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/click")
+ if (ENABLE_UBUNTU_COMMAND_LINE)
+ set(CMAKE_INSTALL_PREFIX click)
+ else (ENABLE_UBUNTU_COMMAND_LINE)
+ set(CMAKE_INSTALL_PREFIX /)
+ endif (ENABLE_UBUNTU_COMMAND_LINE)
elseif (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
if (ENABLE_KDE)
find_program(KDE4_KDECONFIG_EXECUTABLE NAMES kde4-config
@@ -194,7 +238,7 @@ if (TAGLIB_FOUND)
if (ENABLE_FFMPEG)
find_package(FFMPEG)
- macro_log_feature(FFMPEG_FOUND "libavcodec" "ReplayGain calculation." "http://ffmpeg.org")
+ macro_log_feature(FFMPEG_FOUND "libavcodec/libavutil/libavformat" "ReplayGain calculation." "http://ffmpeg.org")
endif (ENABLE_FFMPEG)
if (ENABLE_MPG123)
find_package(MPG123)
@@ -218,15 +262,16 @@ if (ENABLE_QT5)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5Concurrent REQUIRED)
- find_package(Qt5Svg REQUIRED) # Only actually required for SVG icons...
+ find_package(Qt5Svg REQUIRED)
set(QTCORELIBS ${Qt5Core_LIBRARIES})
set(QTNETWORKLIBS ${Qt5Network_LIBRARIES})
set(QTGUILIBS ${Qt5Gui_LIBRARIES})
- set(QTLIBS ${QTCORELIBS} ${Qt5Widgets_LIBRARIES} ${QTNETWORKLIBS} ${QTGUILIBS} ${Qt5Xml_LIBRARIES} ${Qt5Concurrent_LIBRARIES})
- set(QTINCLUDES ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5Xml_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} ${Qt5Concurrent_INCLUDE_DIRS})
- add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS} ${Qt5Xml_DEFINITIONS} ${Qt5Concurrent_DEFINITIONS})
+ set(QTLIBS ${QTCORELIBS} ${Qt5Widgets_LIBRARIES} ${QTNETWORKLIBS} ${QTGUILIBS} ${Qt5Xml_LIBRARIES} ${Qt5Concurrent_LIBRARIES} ${Qt5Svg_LIBRARIES})
+ set(QTINCLUDES ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5Xml_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} ${Qt5Concurrent_INCLUDE_DIRS}
+ ${Qt5Svg_INCLUDE_DIRS})
+ add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS} ${Qt5Xml_DEFINITIONS} ${Qt5Concurrent_DEFINITIONS} ${Qt5Svg_DEFINITIONS})
set(CMAKE_CXX_FLAGS "${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
- if (NOT ENABLE_UBUNTU)
+ if (NOT ENABLE_UBUNTU AND NOT APPLE AND NOT WIN32)
# Does Ubuntu/Touch version need DBus?
find_package(Qt5DBus)
macro_log_feature(Qt5DBus_FOUND "Qt5DBus" "DBus support." "http://qtproject.org")
@@ -236,17 +281,21 @@ if (ENABLE_QT5)
set(QTINCLUDES ${QTINCLUDES} ${Qt5DBus_INCLUDE_DIRS})
add_definitions(${Qt5DBus_DEFINITIONS})
endif (Qt5DBus_FOUND)
- endif (NOT ENABLE_UBUNTU)
+ endif (NOT ENABLE_UBUNTU AND NOT APPLE AND NOT WIN32)
if (ENABLE_UBUNTU)
find_package(Qt5Quick REQUIRED)
find_package(Qt5Qml REQUIRED)
endif (ENABLE_UBUNTU)
+ if (APPLE OR WIN32)
+ get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
+ exec_program(${QT_QMAKE_EXECUTABLE} ARGS -query QT_INSTALL_TRANSLATIONS OUTPUT_VARIABLE QT_TRANSLATIONS_DIR)
+ endif (APPLE OR WIN32)
else (ENABLE_QT5)
- find_package(Qt4 REQUIRED QtCore QtGui QtXml QtNetwork QtSvg) # SVG only actually required for SVG icons...
+ find_package(Qt4 REQUIRED QtCore QtGui QtXml QtNetwork QtSvg)
set(QTCORELIBS ${QT_QTCORE_LIBRARY})
set(QTNETWORKLIBS ${QT_QTNETWORK_LIBRARY})
set(QTGUILIBS ${QT_QTGUI_LIBRARY})
- set(QTLIBS ${QT_QTXML_LIBRARY} ${QTCORELIBS} ${QTGUILIBS} ${QTNETWORKLIBS})
+ set(QTLIBS ${QT_QTXML_LIBRARY} ${QTCORELIBS} ${QTGUILIBS} ${QTNETWORKLIBS} ${QT_QTSVG_LIBRARY})
if (QT_QTDBUS_FOUND)
set(QTLIBS ${QTLIBS} ${QT_QTDBUS_LIBRARY})
endif (QT_QTDBUS_FOUND)
@@ -257,14 +306,14 @@ endif (ENABLE_QT5)
if (ENABLE_HTTP_STREAM_PLAYBACK)
if (ENABLE_LIBVLC)
find_package(LIBVLC REQUIRED)
- macro_log_feature(Qt5Multimedia "libVLC" "MPD HTTP stream playback." "http://videolan.org")
+ macro_log_feature(LIBVLC_FOUND "libVLC" "MPD HTTP stream playback." "http://videolan.org")
add_definitions(-DLIBVLC_FOUND)
include_directories(${LIBVLC_INCLUDE_DIR})
set(CANTATA_LIBS ${CANTATA_LIBS} ${LIBVLC_LIBRARY})
elseif (ENABLE_QT5)
find_package(Qt5Multimedia REQUIRED)
- macro_log_feature(Qt5Multimedia "Qt5Multimedia" "MPD HTTP stream playback." "http://qtproject.org")
- include_directories(${Qt5Multimedia_INCLUDES})
+ macro_log_feature(Qt5Multimedia_FOUND "Qt5Multimedia" "MPD HTTP stream playback." "http://qtproject.org")
+ include_directories(${Qt5Multimedia_INCLUDE_DIRS})
add_definitions(${Qt5Multimedia_DEFINITIONS})
set(CANTATA_LIBS ${CANTATA_LIBS} ${Qt5Multimedia_LIBRARIES})
else (ENABLE_LIBVLC)
@@ -285,6 +334,30 @@ endif (ENABLE_KDE)
find_package(ZLIB REQUIRED)
+if (APPLE)
+ set(CANTATA_SRCS ${CANTATA_SRCS} mac/dockmenu.cpp mac/macnotify.mm)
+ find_package(IOKit)
+ if (IOKIT_FOUND)
+ set(CANTATA_LIBS ${CANTATA_LIBS} ${IOKIT_LIBRARY})
+ set(CANTATA_SRCS ${CANTATA_SRCS} mac/powermanagement.cpp)
+ set(CANTATA_MOC_HDRS ${CANTATA_MOC_HDRS} mac/powermanagement.h)
+ endif (IOKIT_FOUND)
+ find_package(Foundation REQUIRED)
+ set(CANTATA_LIBS ${CANTATA_LIBS} ${FOUNDATION_LIBRARY})
+ find_package(Qt5MacExtras)
+ if (Qt5MacExtras_FOUND)
+ set(QTINCLUDES ${QTINCLUDES} ${Qt5MacExtras_INCLUDE_DIRS})
+ set(QTLIBS ${QTLIBS} ${Qt5MacExtras_LIBRARIES})
+ add_definitions(${Qt5MacExtras_DEFINITIONS})
+ set(QT_MAC_EXTRAS_FOUND 1)
+ endif (Qt5MacExtras_FOUND)
+elseif (WIN32 AND ENABLE_QT5)
+ find_package(Qt5WinExtras REQUIRED)
+ set(QTINCLUDES ${QTINCLUDES} ${Qt5WinExtras_INCLUDE_DIRS})
+ set(QTLIBS ${QTLIBS} ${Qt5WinExtras_LIBRARIES})
+ add_definitions(${Qt5WinExtras_DEFINITIONS})
+ set(CANTATA_SRCS ${CANTATA_SRCS} windows/thumbnailtoolbar.cpp)
+endif (APPLE)
# For Qt5, we use Qt's own QJSonDocument class, so no need to find libqjson
if (NOT ENABLE_QT5 AND NOT WIN32 AND NOT APPLE)
find_package(QJSON)
@@ -339,7 +412,8 @@ set(CANTATA_CORE_MOC_HDRS ${ANTATA_CORE_MOC_HDRS}
models/multimusicmodel.h models/searchmodel.h
mpd/mpdconnection.h mpd/mpdstats.h mpd/mpdstatus.h
network/networkaccessmanager.h
- streams/streamfetcher.h)
+ streams/streamfetcher.h
+ widgets/notelabel.h)
set(CANTATA_SRCS ${CANTATA_CORE_SRCS} ${CANTATA_SRCS}
gui/settings.cpp gui/application.cpp gui/initialsettingswizard.cpp gui/mainwindow.cpp gui/preferencesdialog.cpp
@@ -352,7 +426,8 @@ set(CANTATA_SRCS ${CANTATA_CORE_SRCS} ${CANTATA_SRCS}
widgets/volumeslider.cpp widgets/genrecombo.cpp widgets/menubutton.cpp widgets/icons.cpp widgets/toolbutton.cpp widgets/wizardpage.cpp
widgets/statuslabel.cpp widgets/searchwidget.cpp widgets/messageoverlay.cpp widgets/basicitemdelegate.cpp widgets/sizegrip.cpp
widgets/sizewidget.cpp widgets/servicestatuslabel.cpp widgets/spacerwidget.cpp widgets/songdialog.cpp widgets/stretchheaderview.cpp
- widgets/tableview.cpp widgets/thinsplitterhandle.cpp widgets/coverwidget.cpp
+ widgets/tableview.cpp widgets/thinsplitterhandle.cpp widgets/coverwidget.cpp widgets/ratingwidget.cpp widgets/notelabel.cpp
+ widgets/selectorlabel.cpp
context/lyricsettings.cpp context/ultimatelyricsprovider.cpp context/ultimatelyrics.cpp context/lyricsdialog.cpp
context/contextwidget.cpp context/view.cpp context/artistview.cpp context/albumview.cpp context/songview.cpp context/contextengine.cpp
context/wikipediaengine.cpp context/wikipediasettings.cpp context/othersettings.cpp context/contextsettings.cpp context/togglelist.cpp
@@ -360,13 +435,13 @@ set(CANTATA_SRCS ${CANTATA_CORE_SRCS} ${CANTATA_SRCS}
scrobbling/scrobbler.cpp scrobbling/pausabletimer.cpp scrobbling/scrobblingsettings.cpp scrobbling/scrobblingstatus.cpp
scrobbling/scrobblinglove.cpp)
set(CANTATA_MOC_HDRS ${CANTATA_CORE_MOC_HDRS} ${CANTATA_MOC_HDRS}
- gui/settings.h gui/initialsettingswizard.h gui/mainwindow.h gui/folderpage.h gui/librarypage.h gui/albumspage.h gui/playlistspage.h
+ gui/initialsettingswizard.h gui/mainwindow.h gui/folderpage.h gui/librarypage.h gui/albumspage.h gui/playlistspage.h
gui/playbacksettings.h gui/serversettings.h gui/preferencesdialog.h gui/interfacesettings.h gui/cachesettings.h gui/trayitem.h
gui/coverdialog.h gui/searchpage.h
widgets/treeview.h widgets/listview.h widgets/itemview.h widgets/autohidingsplitter.h widgets/nowplayingwidget.h widgets/actionlabel.h
widgets/playqueueview.h widgets/groupedview.h widgets/actionitemdelegate.h widgets/volumeslider.h widgets/genrecombo.h
widgets/searchwidget.h widgets/messageoverlay.h widgets/servicestatuslabel.h widgets/stretchheaderview.h widgets/tableview.h
- widgets/coverwidget.h
+ widgets/coverwidget.h widgets/ratingwidget.h widgets/selectorlabel.h
context/togglelist.h context/ultimatelyrics.h context/ultimatelyricsprovider.h context/lyricsdialog.h
context/contextwidget.h context/artistview.h context/albumview.h context/songview.h context/view.h context/contextengine.h
context/wikipediaengine.h context/wikipediasettings.h context/othersettings.h context/lastfmengine.h context/metaengine.h
@@ -398,7 +473,7 @@ if (ENABLE_DYNAMIC)
# Not installed for windows - script uses sym-links...
elseif (APPLE)
install(PROGRAMS dynamic/cantata-dynamic DESTINATION ${MACOSX_BUNDLE_RESOURCES}/scripts/)
- else (WIN32)
+ elseif (NOT ENABLE_UBUNTU)
install(PROGRAMS dynamic/cantata-dynamic DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${CMAKE_PROJECT_NAME}/scripts)
endif (WIN32)
endif (ENABLE_DYNAMIC)
@@ -454,9 +529,10 @@ if (QT_QTDBUS_FOUND)
if (ENABLE_QT5)
qt5_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.Player.xml dbus/mpris.h Mpris)
qt5_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.root.xml dbus/mpris.h Mpris)
- qt5_add_dbus_adaptor(CANTATA_SRCS dbus/com.googlecode.cantata.xml gui/mainwindow.h MainWindow)
+ qt5_add_dbus_adaptor(CANTATA_SRCS dbus/${PROJECT_REV_URL}.xml gui/mainwindow.h MainWindow)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.Notifications.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.UPower.xml)
+ qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.login1.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.MediaKeys.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.kde.Solid.PowerManagement.PolicyAgent.xml)
@@ -470,10 +546,11 @@ if (QT_QTDBUS_FOUND)
qt4_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.Notifications.xml)
endif (USE_OLD_DBUS_TYPEDEF OR ((QT_VERSION_MINOR LESS 8) OR (QT_VERSION_MINOR EQUAL 8 AND QT_VERSION_PATCH LESS 2) ))
qt4_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.root.xml dbus/mpris.h Mpris)
- qt4_add_dbus_adaptor(CANTATA_SRCS dbus/com.googlecode.cantata.xml gui/mainwindow.h MainWindow)
+ qt4_add_dbus_adaptor(CANTATA_SRCS dbus/${PROJECT_REV_URL}.xml gui/mainwindow.h MainWindow)
if (NOT ENABLE_KDE)
qt4_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.UPower.xml)
+ qt4_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.login1.xml)
qt4_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.xml)
qt4_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.MediaKeys.xml)
endif (NOT ENABLE_KDE)
@@ -488,12 +565,12 @@ if (NOT WIN32 AND NOT APPLE)
endif (NOT WIN32 AND NOT APPLE)
set(CANTATA_RCS cantata.qrc)
-if (NOT WIN32 AND NOT APPLE)
+if (NOT WIN32)
set(CANTATA_RCS ${CANTATA_RCS} cantata_media.qrc)
- if (USE_SYSTEM_MENU_ICON)
- set(CANTATA_RCS ${CANTATA_RCS} cantata_menu.qrc)
- endif (USE_SYSTEM_MENU_ICON)
-endif (NOT WIN32 AND NOT APPLE)
+endif (NOT WIN32)
+if (USE_SYSTEM_MENU_ICON AND NOT WIN32)
+ set(CANTATA_RCS ${CANTATA_RCS} cantata_menu.qrc)
+endif (USE_SYSTEM_MENU_ICON AND NOT WIN32)
if (TAGLIB_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} tags/tageditor.cpp tags/trackorganiser.cpp devices/filenameschemedialog.cpp widgets/tagspinbox.cpp)
@@ -503,6 +580,10 @@ if (TAGLIB_FOUND)
# Cantata still links to taglib, even if external tag reader/writer is used, because JamendoService uses taglib for ID3 genres.
set(CANTATA_LIBS ${CANTATA_LIBS} ${TAGLIB_LIBRARIES})
include_directories(${TAGLIB_INCLUDES})
+ if (APPLE)
+ # for some reason under osx we get full path ino include/taglib?
+ include_directories(${TAGLIB_INCLUDES}/..)
+ endif (APPLE)
if (NOT ENABLE_EXTERNAL_TAGS AND TAGLIB-EXTRAS_FOUND)
set(CANTATA_LIBS ${CANTATA_LIBS} ${TAGLIB-EXTRAS_LIBRARIES})
include_directories(${TAGLIB-EXTRAS_INCLUDES})
@@ -585,9 +666,9 @@ if (TAGLIB_FOUND)
devices/remotedevicepropertieswidget.h)
set(CANTATA_UIS ${CANTATA_UIS} devices/remotedevicepropertieswidget.ui)
if (ENABLE_QT5)
- qt5_add_dbus_interfaces(CANTATA_SRCS devices/mounter/com.googlecode.cantata.mounter.xml)
+ qt5_add_dbus_interfaces(CANTATA_SRCS devices/mounter/${PROJECT_REV_URL}.mounter.xml)
else (ENABLE_QT5)
- qt4_add_dbus_interfaces(CANTATA_SRCS devices/mounter/com.googlecode.cantata.mounter.xml)
+ qt4_add_dbus_interfaces(CANTATA_SRCS devices/mounter/${PROJECT_REV_URL}.mounter.xml)
endif (ENABLE_QT5)
add_subdirectory(devices/mounter)
add_subdirectory(devices/avahi)
@@ -657,7 +738,7 @@ else (ENABLE_KDE)
endif (WIN32)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/shortcutssettingspage.cpp gui/mediakeys.cpp)
- set(CANTATA_MOC_HDRS ${CANTATA_MOC_HDRS} gui/shortcutssettingspage.h gui/multimediakeysinterface.h)
+ set(CANTATA_MOC_HDRS ${CANTATA_MOC_HDRS} gui/multimediakeysinterface.h)
if (ENABLE_QT5)
QT5_ADD_RESOURCES(CANTATA_RC_SRCS ${CANTATA_RCS})
@@ -683,14 +764,21 @@ else (ENABLE_KDE)
elseif (APPLE)
ADD_EXECUTABLE(cantata MACOSX_BUNDLE ${CANTATA_SRCS} ${CANTATA_MOC_SRCS} ${CANTATA_RC_SRCS} ${CANTATA_UI_HDRS} ${CANTATA_PO})
add_subdirectory(mac)
- include(DeployQt4)
- INSTALL_QT4_EXECUTABLE("cantata.app" "qjpeg;qsvg;qsvgicon")
- else (WIN32)
+ include(DeployQt5)
+ install(PROGRAMS ${CMAKE_BINARY_DIR}/cantata.app/Contents/MacOS/cantata DESTINATION ${MACOSX_BUNDLE_APP_DIR})
+ # Create our own plist file to enable HighDPI support
+ configure_file(mac/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/mac/Info.plist)
+ configure_file(mac/dmg/create-dmg.sh.in ${CMAKE_CURRENT_BINARY_DIR}/mac/create-dmg.sh)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mac/Info.plist DESTINATION ${CANTATA_APP_CONTENTS_DIR})
+ install_qt5_executable(cantata.app "qjpeg;qsvg;qsvgicon;qcocoa")
+ elseif (NOT ENABLE_UBUNTU)
ADD_EXECUTABLE(cantata ${CANTATA_SRCS} ${CANTATA_MOC_SRCS} ${CANTATA_RC_SRCS} ${CANTATA_UI_HDRS})
install(TARGETS cantata RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
endif (WIN32)
- set(XDG_APPS_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
+ if (NOT ENABLE_UBUNTU)
+ set(XDG_APPS_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
+ endif (NOT ENABLE_UBUNTU)
if (WIN32 OR APPLE)
add_subdirectory(3rdparty/qtsingleapplication)
target_link_libraries(cantata qtsingleapplication)
@@ -712,7 +800,10 @@ elseif (NOT ENABLE_UBUNTU)
install(FILES mpd/mpd.conf.template DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${CMAKE_PROJECT_NAME}/mpd)
endif (WIN32)
-add_subdirectory(po)
+if (NOT ENABLE_UBUNTU)
+ add_subdirectory(po)
+endif (NOT ENABLE_UBUNTU)
+
add_subdirectory(support)
add_subdirectory(3rdparty/qtiocompressor)
target_link_libraries(cantata support-core qtiocompressor ${CANTATA_LIBS} ${QTLIBS} ${ZLIB_LIBRARIES})
@@ -722,7 +813,10 @@ add_definitions(-DQT_NO_DEBUG_OUTPUT)
if (UNIX AND NOT APPLE)
if (NOT ENABLE_UBUNTU)
- install(FILES cantata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
+ configure_file(cantata-remote.cmake ${CMAKE_BINARY_DIR}/cantata-remote)
+ configure_file(cantata.desktop.cmake ${CMAKE_BINARY_DIR}/cantata.desktop)
+ install(PROGRAMS ${CMAKE_BINARY_DIR}/cantata-remote DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${CMAKE_PROJECT_NAME}/scripts)
+ install(FILES ${CMAKE_BINARY_DIR}/cantata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
endif (NOT ENABLE_UBUNTU)
target_link_libraries(cantata -lpthread)
endif (UNIX AND NOT APPLE)
@@ -742,6 +836,8 @@ endif (ENABLE_KDE)
macro_display_feature_log()
if (ENABLE_UBUNTU)
+ set(UBUNTU_PROJECT_TYPE "ClickApp" CACHE INTERNAL "Tells QtCreator this is a Click application project")
+
add_custom_target(components_QmlFiles ALL SOURCES
ubuntu/qml/cantata/main.qml ubuntu/qml/cantata/AboutPage.qml ubuntu/qml/cantata/ListViewPage.qml
ubuntu/qml/cantata/SubListViewPage.qml ubuntu/qml/cantata/CurrentlyPlayingPage.qml
@@ -752,18 +848,19 @@ if (ENABLE_UBUNTU)
ubuntu/qml/cantata/components/ControlButtonsRow.qml ubuntu/qml/cantata/components/ListItemDelegate.qml
ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml ubuntu/qml/cantata/components/LabelVisual.qml
ubuntu/qml/cantata/components/Notification.qml ubuntu/qml/cantata/backend/SettingsBackend.qml
+ ubuntu/qml/cantata/components/PageWithBottomEdge.qml ubuntu/qml/cantata/CurrentlyPlayingContent.qml
+ )
+ add_custom_target(click_files ALL SOURCES
+ ubuntu/manifest.json
+ ubuntu/cantata-ubuntu.json
+ ubuntu/cantata-ubuntu.desktop
+ )
+ add_custom_target(images ALL SOURCES #TODO: Add other icons
+ ubuntu/icons/desktop/cantata.png
)
- # click package...
- set(UBUNTU_CLICK_FOLDER ${CMAKE_BINARY_DIR}/click/)
- file(MAKE_DIRECTORY ${UBUNTU_CLICK_FOLDER})
- # Hard link target into click folder
- add_custom_command(TARGET cantata COMMAND ln ARGS -f ${CMAKE_BINARY_DIR}/cantata ${UBUNTU_CLICK_FOLDER})
- # Hard link other files required for package
- set(UBUNTU_EXTRA ubuntu/manifest.json ubuntu/cantata-ubuntu.json ubuntu/cantata-ubuntu.desktop /ubuntu/icons/desktop/cantata.png)
- foreach (extraFile ${UBUNTU_EXTRA})
- add_custom_command(TARGET cantata COMMAND ln ARGS -f ${CMAKE_SOURCE_DIR}/${extraFile} ${UBUNTU_CLICK_FOLDER})
- endforeach (extraFile ${UBUNTU_EXTRA})
+ install(TARGETS cantata RUNTIME DESTINATION .)
+ install(FILES ubuntu/manifest.json ubuntu/cantata-ubuntu.json ubuntu/cantata-ubuntu.desktop ubuntu/icons/desktop/cantata.png DESTINATION .)
else (ENABLE_UBUNTU)
if (NOT ENABLE_STREAMS OR NOT ENABLE_DYNAMIC OR NOT ENABLE_ONLINE_SERVICES OR (NOT ENABLE_DEVICES_SUPPORT AND NOT WIN32 AND NOT APPLE))
diff --git a/ChangeLog b/ChangeLog
index 644a46d..ee34156 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,165 @@
+1.5.2
+-----
+ 1. Fix Ubuntu Touch builds.
+ 2. When refreshing search menu, clear items first!
+ 3. Fix setting of cover when existing cover is embedded in music file.
+ 4. Fix OSX executable name for case-sensitive filesystems.
+ 5. Hide ratings widgets, etc, in tag editor for devices and Mopidy, etc.
+ 6. Use Control+Alt+Number as shortcut to toggle an output.
+ 7. Don't allow to set short-cuts for actions that are menus.
+ 8. Add high-dpi support to Linux and Windows Qt5.4 builds.
+ 9. When calculating ReplayGain, if peak value is less than 0.00001 then assume
+ the calculation is invalid.
+10. When parsing podcast RSS, if episode is marked as video (e.g. video/mp4) but
+ the url ends in an audio extension then it is proably an audio podcast.
+11. Correctly initialise seach category.
+12. Fix potential crashes on refresh.
+13. Fix duplicate notification when Cantata is started whilst playing, or when
+ 'Replace Play Queue' is used.
+14. Only show output change notification if outputs menu was not previously
+ empty.
+15. Construct a new config object, rather than changing group, to avoid any
+ race conditions.
+16. If fading volume on stop, then reset volume just before stopping. Some
+ outputs (e.g. pulse audio) only allow setting a volume whilst playing.
+17. If 'url' entry is empty in 'enclosure' section of podcast RSS file, then
+ use 'guid' text as url - if possible.
+18. Fix copying of covers to UMS, etc, devices if song is transcoded.
+19. Add an option for 64 bit non KDE linux builds to install helper apps to
+ lib64 instead of just lib. Pass -DCANTATA_HELPERS_LIB_DIR=lib64 to cmake.
+20. In tag editor, only mark rating as changed if it has been.
+21. For Linux non-KDE builds, use login1 interface to detect system resuming.
+22. Enable scrobble 'love' button even if scrobbling is disabled.
+23. Don't crash when detecting an audio CD with no tracks.
+24. When playing a digitally imported (or JazzRadiom, etc) stream from the
+ favourites section, then modify the URL if the user has a premium account
+ (to match what existing behaviour is stream is played from the station
+ list)
+25. Workaround build issues with SpeexDSP 1.2rc2
+26. Use correct stream icon in playqueue for streams with no song details.
+27. Fix FreeBSD build.
+28. Respect carriage returns when displaying comments in context view.
+29. Fix replaygain calculation when ffmpeg is using planar formats.
+30. Enable 'save' button when reading ratings from multiple files.
+31. Fix cantata-remote script (used for Unity launcher integration) when this
+ uses qdbus.
+32. Fix display of rating in tag dialog when only 1 file is being edited.
+33. Fix fetching of ratings in table style playqueue.
+34. Don't convert -ve track, disc, or years to unsigned - set to 0.
+35. Bundle openSSL libs with windows builds.
+
+1.5.1
+-----
+1. Show correct separators for windows builds.
+2. Supply TagLib 1.9.1 for windows builds.
+3. Convert filename to UTF16 before passing to TagLib for windows builds.
+4. When emiting signal to say cover is loaded, need to adjust size by pixel
+ ratio.
+5. Fix updating of toolbar coverwidget if cover is downloaded after song has
+ started.
+6. Fix compilation when online services disabled.
+7. Fix dynamic playlists with no include rules.
+8. Re-add option to show artist images in tree and list views.
+
+1.5.0.1
+-------
+1. Add missing libtag.dll to windows setup.
+
+1.5.0
+-----
+ 1. Remove cover size setting, set automatically.
+ 2. Artist images only shown in grid view.
+ 3. No images, or icons, shown in basic tree view.
+ 4. Remove GUI option to control saving of scaled covers. This is enabled by
+ default, and can be toggled via the config file.
+ 5. Don't re-load view when sort changes.
+ 6. Simplify view config pages.
+ 7. Use QUrl with server details to build HTTP address used to compare MPD http
+ file paths against.
+ 8. Store song ratings in MPD's sticker DB. Ratings stored using 'rating' key
+ and values 0 to 10. In the UI, ratings are show as 5 stars.
+ 9. If we fail to download a cover, don't keep trying next time song is played.
+10. Simplify toolbar cover widget, no border.
+11. Allow preference dialog to shrink smaller. If screen size is less than
+ 800px, then views page is re-arranged to allow much smaller dialog,
+ category selector uses smaller icons, and headers are removed.. You can
+ check this setting by calling cantata as follows: CANTATA_NETBOOK=1 cantata
+12. Support MPDs "find modified-since" with MPD 0.19 and newer. If a number is
+ entered it is taken to be 'modified since X days in past', otherwise a date
+ should be entered (e.g. 01/12/2001 to find all tracks since 1st Dec 2001)
+ Cantata will first try to convert from your locale date format, default
+ date format, and then ISO date format.
+13. Show covers in search results.
+14. Show performer in cover tooltip if this is set and different to album
+ artist.
+15. Always large action icons for grid view.
+16. Increase gap between add and play icons in grid view.
+17. Disable volume fade on stop by default - this is really something MPD
+ itself should implement.
+18. Remove 'Add albums in random order' from view context menus.
+19. Reorganize playqueue context menu.
+20. Use 'Metadata' and not 'Tags' as metadata/tags view in context song pane.
+21. Minor changes to song progress slider.
+22. Show covers in playlist tree and list views.
+23. Use read-only editable combo for filename in tag editor, so that text can
+ be selected.
+24. Also read /com/canonical/desktop/interface/scrollbar-mode to determine if
+ overlay scrollbars have been disabled.
+25. Add note about 'AlbumArtist' tag to initial settings wizard.
+26. Use QDesktopWidget::logicalDpiX()/96.0 to set DPI scale factor.
+27. Expand ~/ to QDir::homePath() when read from UI.
+28. Save QDir::homePath()/ as ~ in config file, and convert when read.
+29. Allow all bar title and artist columns to be hidden in playqueue.
+30. Add option to disable song info tooltips.
+31. Only show icons in message widget buttons if style uses icons for dialog
+ buttons.
+32. Add option to have separate play queue search action - enabled by default.
+33. Revert back to storing scaled covers as JPG. PNG is taking too much space,
+ especially with retina displays.
+34. Read ArtistSort, AlbumArtistSort, and AlbumSort from MPD. If found, use
+ these to sort items.
+35. Add 'Full Refresh' action - cuases caches to be removed, and models to be
+ completely refreshed.
+36. Add actions to mark podcast as episode as listened or new.
+37. Add action to cancel podcast downloads.
+38. Download podcasts sequentially.
+39. Configurable limit to auto podcast downloading.
+40. When starting, remove any previous partial podcast downloads.
+41. Don't make media keys backend configurable, auto detect the best one.
+42. Remove Gtk combo popup size hack.
+43. Fix Qt5 translations.
+44. Add button to status bar to eanble/disable playback of MPD HTTP output
+ stream.
+45. Show notification when outputs changed.
+46. Connect MPRIS stopAfterCurrent signal to correct action.
+47. Add prev/play/pause/etc actions to Unity launcher, and to windows taskbar
+ entry.
+48. Fix current track highlight in grouped view under windows for header item.
+49. Use same selection drawing for all views.
+50. Fix size of collapsed window in windows builds.
+51. If run under Unity or OSX, then place close buttons on left.
+52. Fix auto-marking of played downloaded podcasts when connected via a local
+ socket.
+53. Fix playback of local files by inbuilt HTTP server.
+54. In catata-tags.exe set unhandled exception handler, to prevent windows
+ crash dialog appearing.
+55. If a command fails to be sent to MPD, and the socket is in an error state,
+ then reconnect and update status and playqueue.
+56. For windows builds, when window is not focused, draw sidebar selection as
+ a darkened background.
+57. If MPD supports https, then there is no need to convert SoundCould URLs.
+58. If playlist is loaded and replaces playqueue, then start playback of first
+ track.
+59. Custom/thin scrollbars for context view.
+60. If fail to read a Gtk setting from DConf then try GSettings.
+61. Send a message (default to 'status') at least once every 30 seconds to keep
+ command connection alive.
+62. Fix inconsistent default cover sizes.
+63. French translation - thanks to Jaussoin Timothée.
+64. Seek 5seconds when control (or command for Mac) and lef/right arrow keys
+ are pressed. (Seek setting may be changed via config file - refer to
+ README for more details.)
+
1.4.2
-----
1. When guessing song details from filename (due to missing tags), remove any
diff --git a/INSTALL b/INSTALL
index 1479361..c16b6a2 100644
--- a/INSTALL
+++ b/INSTALL
@@ -29,7 +29,7 @@ Ubuntu
------
1. mkdir build
2. cd build
-3. cmake .. -DENABLE_UBUNTU=ON
+3. cmake .. -DENABLE_UBUNTU_COMMAND_LINE=ON
4. make
5. make install
6. click build click
@@ -49,7 +49,7 @@ The following options may be passed to CMake:
-DCANTATA_TRANSLATIONS=<list of translations to install>
Builds and installs the selected translations. Supported values are
- cs, de, en_GB, es, hu, pl, ru, ko, zh_CN, and all. Entries should be
+ cs, de, en_GB, es, fr, hu, pl, ru, ko, zh_CN, and all. Entries should be
separated with a semicolon (";") e.g. -DCANTATA_TRANSLATIONS="es;pl"
Default: all
@@ -146,6 +146,13 @@ The following options may be passed to CMake:
-DINSTALL_UBUNTU_ICONS=<ON if Ubuntu, OFF otherwise>
Install monochrome system tray icons for Ubuntu.
+ -DCANTATA_HELPERS_LIB_DIR=<subdir>
+ For non-KDE 64 bit builds, this may be used to control the lib sub-dir
+ where Cantata helper apps will be placed. e.g. setting this to lib64
+ will cause the helper apps (cantata-tags, cantata-replaygain) to be
+ install into /usr/lib64/cantata instead of /usr/lib/cantata
+ Default: <empty (which means /usr/lib will be used) >
+
Windows specific:
@@ -153,15 +160,31 @@ The following options may be passed to CMake:
Path where Inno Setpup Compiler should place the catata setup exe.
Default: z:\
- -DCANTATA_MINGW_LIBS=<path>\mingwm10.dll;<path>libgcc_s_dw2-1.dll
+ -DCANTATA_MINGW_LIBS=<path>/mingwm10.dll;<path>/libgcc_s_dw2-1.dll
Extra MinGW libraries required for install stage.
+ Qt4 builds only - not required for Qt5.
Default: <empty>
-
+
+ -DCANTATA_SSL_LIBS=<path>/libeay32.dll;<path>/ssleay32.dll
+ SSL libraries
+ Default: <empty>
+
-DCANTATA_OXYGEN_DIR=<path>
Path to Oxygen icons, required for install stage.
Default: <empty>
+ Ubuntu specific:
+
+ -DENABLE_UBUNTU=ON
+ Build for Ubuntu Touch.
+ Default: OFF
+
+ -DENABLE_UBUNTU_COMMAND_LINE=ON
+ Build for the Ubuntu SDK from the command line.
+ Default: OFF
+
+
Testing ONLY options:
-DENABLE_MODEL_TEST=ON
diff --git a/README b/README
index 5fab511..16743c1 100644
--- a/README
+++ b/README
@@ -26,7 +26,7 @@ Table of Contents
Cantata is a graphical client for MPD. It contains the following features:
- 1. Support for Qt4, Qt5, Windows, and KDE builds.
+ 1. Support for Qt4, Qt5, KDE, MacOSX, Windows, and Ubuntu Touch builds.
2. Multiple MPD collections.
3. Highly customisable layout.
4. Songs grouped by album in play queue.
@@ -37,8 +37,8 @@ Cantata is a graphical client for MPD. It contains the following features:
installed)
9. Dynamic playlists.
10. Online services; Jamendo, Magnatune, SoundCloud, and Podcasts.
-11. Radio stream support - with the ability to search for streams via TuneIn or
- ShoutCast.
+11. Radio stream support - with the ability to search for streams via TuneIn,
+ ShoutCast, or Dirble.
12. USB-Mass-Storage and MTP device support. (Linux only, and if relevant
libraries installed)
13. Audio CD ripping and playback. (Linux only, and if relevant libraries
@@ -50,11 +50,15 @@ Cantata is a graphical client for MPD. It contains the following features:
(Linux only), and standard media keys (via Qxt)
17. Ubuntu/ambiance theme integration - including dragging of window via
toolbar.
+18. Basic support for touch-style interface (views are made 'flickable')
+19. Scrobbling.
+20. Ratings support.
Cantata started off as a fork of QtMPC, mainly to provide better KDE
integration - by using KDE libraries/classes wherever possible. However, the
code (and user interface) is now *very* different to that of QtMPC, and both
-KDE and Qt (Linux) builds have the same feature set.
+KDE and Qt (Linux) builds have the same feature set. Also, as of 1.4.0, by
+default Cantata is built as a Qt-only application (with no KDE dependencies)
Unlike most other MPD clients, Cantata caches a copy of the MPD music library.
This is so that it can create a proper hierarchy of artists and albums (where
@@ -63,9 +67,7 @@ the Artist tag), to provide album counts, tracks counts, etc in the browser
views and tooltips, and also to help with copying songs to/from devices.
This cache is updated only when MPD indicates that its version of the collection
-is different to Cantata's. If you press the 'Refresh Database' button in either
-the artist, albums, folders, or playlists views, then this cache is deleted and
-recreated with the response from MPD.
+is different to Cantata's.
By default, Cantata will use the "listallinfo" command to retrieve the music
collection. However, it has been noted that MPD 0.18 requires more memory for
@@ -88,23 +90,28 @@ Cantata requires the following Qt libraries:
Cantata may also use the following optional libraries:
-1. KDElibs4
-2. TagLib - Tag edit dialog, replaygain, track organizer, and UMS device
- support.
-3. LibMTP - MTP devices.
-4. FFMPEG (libavcodec) - ReplayGain detection code.
-5. SpeexDSP - ReplayGain detection code.
-6. MPG123 - ReplayGain detection code.
-7. CDParanoia - Read/rip Audio CDs.
-8. CDDB - either this or MusicBrainz5 required for Audio CDs
-9. MusicBrainz5 - either this or CDDB required for Audio CDs
+ 1. KDElibs4
+ 2. TagLib - Tag edit dialog, replaygain, track organizer, and UMS device
+ support.
+ 3. LibMTP - MTP devices.
+ 4. FFMPEG (libavcodec) - ReplayGain detection code.
+ 5. SpeexDSP - ReplayGain detection code.
+ 6. MPG123 - ReplayGain detection code.
+ 7. CDParanoia - Read/rip Audio CDs.
+ 8. CDDB - either this or MusicBrainz5 required for Audio CDs
+ 9. MusicBrainz5 - either this or CDDB required for Audio CDs
+10. LibQJson - only for Qt4, and KDE4, builds. If this is not found on the
+ system then Cantata will use its own bundled copy.
+11. LibEbur128 - ReplayGain detection code. If this is not found on the
+ system then Cantata will use its own bundled copy.
3. Building
===========
Please refer to the INSTALL file for general build instructions. Details on how
-Cantata is build for Windows can be found in section 16.
+Cantata is build for Windows can be found in section 16, and Mac OSX in section
+17.
Some Qt4 builds still use com.trolltech.QtDBus.QtTypeName, whereas newer ones
use org.qtproject.QtDBus.QtTypeName. If you get build failures such as "fatal
@@ -433,7 +440,7 @@ menu=<Integer>
used. If set to 2 then a menu button is used. If set to 3 then both the
menubar and menu button are used - and there will be a menu item to toggle
between menubar and menu button. NOTE: This menu item is not present when
- run under Unity or MacOS - as these always have a menubar - in which case
+ run under Unity or MacOSX - as these always have a menubar - in which case
menu=3 will cause both a menubar and menu button to be present.
stopHttpStreamOnPause=<Boolean>
@@ -445,6 +452,15 @@ stopHttpStreamOnPause=<Boolean>
continue to play the 'silence' (NOTE: This will use more bandwidth).
Default is true.
+cacheScaledCovers=<Boolean>
+ Controls whether Cantata should save scaled covers into a disk based cache.
+ This speed up cover retrieval and drawing on subsequent runs.
+ Default is true.
+
+seekStep=<Integer>
+ Configure seek time when Ctrl+Arrow keys is used.
+ Default is 5. (Values 2..60 are acceptable)
+
e.g.
[General]
iconTheme=oxygen
@@ -460,6 +476,8 @@ alwaysUseHttp=true
alwaysUseLsInfo=true
menu=3
stopHttpStreamOnPause=true
+cacheScaledCovers=true
+seekStep=5
8. CUE Files
@@ -586,7 +604,7 @@ something like:
<providers>
<category type="0">
- <provider name="1.fm" url="hhttps://googledrive.com/host/0Bzghs6gQWi60RHRSa3dqeUtkNTA"/>
+ <provider name="1.fm" url="https://googledrive.com/host/0Bzghs6gQWi60RHRSa3dqeUtkNTA"/>
...
If you want to manually download a provider, use the listed URL to download the
@@ -715,7 +733,7 @@ the user the script is run as should have read/write permissions to this file.
'mpdHost', 'mpdPort', and 'mpdPassword' are the connection details of the MPD
server.
-'httpPort' if this is set to non-zero, then the script will server up a *very*
+'httpPort' if this is set to non-zero, then the script will serve up a *very*
simple HTTP control page - allowing playlists to be started and stopped.
@@ -760,7 +778,10 @@ The Cantata source folder contains the following structure:
ubuntu - Convergent Ubuntu version (requires the Ubuntu SDK);
cmake option: -DENABLE_UBUNTU=ON
widgets - Widgets that are probably Cantata specific.
- windows - Files relevant to creating the windows installer.
+ windows - Files specfic to Windows builds..
+ mac - Files specfic to MacOSX builds.
+ freecns/ - Repeat and Shuffle icons
+ cumulus https://www.iconfinder.com/iconsets/freecns-cumulus
Cantata's SVG icons have been 'cleaned' using:
scour --strip-xml-prolog --indent=none -i in.svg -o out.svg
@@ -795,6 +816,8 @@ The following debug values may be used:
Threads 16384 0x00004000
External tags 32768 0x00008000
Scrobbling 65536 0x00010000
+ Devices 131072 0x00020000
+ Other 262144 0x00040000 (e.g. MediaKeys)
These values may be combined to enable multiple output. e.g. to enable MPD and
covers logging:
@@ -807,7 +830,8 @@ for just covers logging:
As of Cantata 1.2.0, all logging output is saved to a file. On Linux systems
this will be ~/.cache/cantata/cantata.log For Windows this will be
-C:\Users\USERNAME\AppData\Local\mpd\cantata\cache\cantata.log
+C:\Users\USERNAME\AppData\Local\mpd\cantata\cache\cantata.log And for OSX it
+will be /Users/$USER/Library/Caches/cantata/cantata/cantata.log
When using the external helper to read/write tags, then there might also be
additional logging in cantata-tags.log (in the same location as cantata.log)
@@ -857,11 +881,16 @@ Cantata contains code/icons from:
ubuntu-ui-extras - https://github.com/iBeliever/ubuntu-ui-extras (Ubuntu
notification code)
QMPDClient - Last.fm scrobbling
+ address-book-app - http://bazaar.launchpad.net/~phablet-team/address-book-app/trunk/files
+ (PageWithBottomEdge)
16. Windows
===========
+Qt4 Build
+---------
+
The following steps are used to compile Cantata, and create the windows
installer.
@@ -870,45 +899,109 @@ This assumes the following folder structure:
z:\cantata\src [ Checkout of Cantata's source code ]
z:\cantata\build
z:\cantata\install [ make install will place target files here ]
- z:\cantata\oxygen [ Oxygen icons folder ]
+ z:\cantata\icons [ Oxygen icons folder ]
z:\dev\MingGW
z:\dev\Qt\4.8.4
z:\dev\taglib
z:\dev\zlib
+ z:\dev\ssl [ libeay32.dll and ssleay32.dll ]
1. Install Qt, MinGW, cmake, TagLib and zlib. TagLib and zlib will probably
need compiling.
-2. Call cmake (e.g. from build folder):
- cmake ../src -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DENABLE_TAGLIB=OFF -DTAGLIB_FOUND=1 -DTAGLIB_INCLUDES=z:/dev/taglib/include -DTAGLIB_LIBRARIES=z:/dev/taglib/lib/libtag.dll.a -DTAGLIB_MP4_FOUND=1 -DTAGLIB_ASF_FOUND=1 -DTAGLIB_CAN_SAVE_ID3VER=1 -DZLIB_INCLUDE_DIR=z:/dev/zlib/include -DZLIB_LIBRARY=z:/dev/zlib/libz.dll.a -DCMAKE_INSTALL_PREFIX=z:/cantata/install -DCANTATA_WINDOWS_INSTALLER_DEST=z:/cantata -DCANTATA_MINGW_LIBS=z:/dev/MinGW/bin/mingwm10.dll;z:/dev/MinGW/bin/libgcc_s_dw2-1.dll -DCANTATA_OXYGEN_DIR=z:/cantata/oxygen -DCMAKE_BUILD_TYPE=Release
+2. Set (or amend) the following environemnt variables:
+ QTDIR=z:\dev\Qt\4.8.4
+ PATH=z:\dev\Qt\4.8.4\bin;z:\dev\MinGW\bin;z:\dev\taglib\bin;z:\dev\cmake\bin
+
+3. Download oxygen icons required for Cantata from the following link
+ https://drive.google.com/file/d/0Bzghs6gQWi60cXlvUURjeEVRUms/edit?usp=sharing
+
+4. Unzip this *within* icons/
+
+5. Call cmake (e.g. from build folder):
+ cmake ../src -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DENABLE_TAGLIB=OFF -DTAGLIB_FOUND=1 -DTAGLIB_INCLUDES=z:/dev/taglib/include -DTAGLIB_LIBRARIES=z:/dev/taglib/lib/libtag.dll.a -DTAGLIB_MP4_FOUND=1 -DTAGLIB_ASF_FOUND=1 -DTAGLIB_CAN_SAVE_ID3VER=1 -DZLIB_INCLUDE_DIR=z:/dev/zlib/include -DZLIB_LIBRARY=z:/dev/zlib/lib/libz.dll.a -DCMAKE_INSTALL_PREFIX=z:/cantata/install -DCANTATA_WINDOWS_INSTALLER_DEST=z:/cantata -DCANTATA_MINGW_LIBS=z:/dev/MinGW/bin/mingwm10.dll;z:/dev/MinGW/bin/libgcc_s_dw2-1.dll -DCANTATA_SSL_LIBS=z:/dev/ssl/libeay32.dll;z:/dev/ssl/ssleay32.dll -DCANTATA_OXYGEN_DIR=z:/cantata/icons
+
+ (Note: -DENABLE_TAGLIB=OFF stops cmake from trying to find TagLib, as the
+ TagLib settings have been manually set)
+
+6. make
+
+7. make install
+
+
+This build is as per Qt-only, but does not have support for dbus, local dynamic
+playlists, device support, or replaygain calculation.
+
+
+Qt5 Build
+---------
+
+The following steps are used to compile Cantata, and create the windows
+installer.
+
+This assumes the following folder structure:
+
+ z:\cantata\src [ Checkout of Cantata's source code ]
+ z:\cantata\build
+ z:\cantata\install [ make install will place target files here ]
+ z:\cantata\icons [ Oxygen icons folder ]
+ z:\dev\Qt
+ z:\dev\taglib
+ z:\dev\zlib
+ z:\dev\ssl [ libeay32.dll and ssleay32.dll ]
+
+
+1. Install Qt (5.3 or later), cmake, TagLib and zlib. TagLib and zlib will probably
+ need compiling.
+
+2. Set (or amend) the following environemnt variables:
+ QTDIR=z:\dev\Qt\5.3\mingw482_32
+ PATH=z:\dev\Qt\5.3\mingw482_32\bin;z:\dev\Qt\Tools\mingw482_32\bin;z:\dev\taglib\bin;z:\dev\cmake\bin
- (Note: -DENABLE_TAGLIB=OFF stops cmake from trying to find TagLib, as the TagLib settings have been manually set)
+3. Download oxygen icons required for Cantata from the following link
+ https://drive.google.com/file/d/0Bzghs6gQWi60cXlvUURjeEVRUms/edit?usp=sharing
-3. make
+4. Unzip this *within* icons/
-4. make install
+5. Load cantata's CMakeLists.txt in QtCreator, and pass the following to cmake:
+ ../src -DCMAKE_BUILD_TYPE=Release -DENABLE_TAGLIB=OFF -DTAGLIB_FOUND=1 -DTAGLIB_INCLUDES=z:/dev/taglib/include -DTAGLIB_LIBRARIES=z:/dev/taglib/lib/libtag.dll.a -DTAGLIB_MP4_FOUND=1 -DTAGLIB_ASF_FOUND=1 -DTAGLIB_CAN_SAVE_ID3VER=1 -DZLIB_INCLUDE_DIR=z:/dev/zlib/include -DZLIB_LIBRARY=z:/dev/zlib/lib/libz.dll.a -DCMAKE_INSTALL_PREFIX=z:/cantata/install -DCANTATA_WINDOWS_INSTALLER_DEST=z:/cantata -DENABLE_QT5=ON -DCANTATA_SSL_LIBS=z:/dev/ssl/libeay32.dll;z:/dev/ssl/ssleay32.dll -DCANTATA_OXYGEN_DIR=z:/cantata/icons
-5. Run Nullsoft Scriptable Install System, and use the cantata.nsi that has
- been generated in the install folder. This will place the setup exe into
- the install folder as well.
+ (Note: -DENABLE_TAGLIB=OFF stops cmake from trying to find TagLib, as the
+ TagLib settings have been manually set)
- - OR -
+6. Build via QtCreator
- Run Inno Setup Compiler, and use the cantata.iss that has been generated in
- the build folder. This will place the setup exe in z:\cantata
+7. Create an 'install' project in QtCreator
+ - Projects
+ - Add/Clone Selected
+ - Expand Build Steps, and select install
+
+8. Build 'install' project via QtCreator
This build is as per Qt-only, but does not have support for dbus, local dynamic
playlists, device support, or replaygain calculation.
+Create Installer
+----------------
+Run Nullsoft Scriptable Install System, and use the cantata.nsi that has been
+generated in the install folder. This will place the setup exe into the install
+folder as well.
+
+ - OR (Qt4 builds only) -
+
+Run Inno Setup Compiler, and use the cantata.iss that has been generated in the
+build folder. This will place the setup exe in z:\cantata
+
+
TagLib
------
-Windows version of taglib was built from TagLib 1.8, using the following cmake
-command:
+Windows version of taglib was built from TagLib 1.9.1, using QtCreator with the
+following passed to cmake:
- cmake .. -G "MinGW Makefiles" -DWITH_ASF=1 -DWITH_MP4=1 -DCMAKE_INSTALL_PREFIX=z:\dev\taglib
+ -DCMAKE_BUILD_TYPE=Release -DWITH_ASF=1 -DWITH_MP4=1 -DCMAKE_INSTALL_PREFIX=z:\dev\taglib
17. Mac OSX
@@ -917,29 +1010,40 @@ command:
The following steps are used to compile Cantata, and create the OS X application
bundle.
-1. Install Homebrew and use it to install the packages qt, cmake, oxygen-icons,
- and ffmpeg.
-2. Open a terminal window in the source directory and run the following
- commands, replacing <user> with your local username:
+These steps assume the following structure:
+
+ src/
+ build/
+ install/
+ icons/
+
+1. Install Qt5.3.1 (or later) from https://qt-project.org/downloads
+
+2. Install HomeBrew
+
+3. brew install cmake taglib ffmpeg speex
+
+4. Download oxygen icons required for Cantata from the following link
+ https://drive.google.com/file/d/0Bzghs6gQWi60cXlvUURjeEVRUms/edit?usp=sharing
- Create the build directory:
+5. Unzip this *within* icons/
- mkdir build
- cd build
- cmake ..
- make
+6. Load cantata's CMakeLists.txt in QtCreator, and pass the following to cmake:
+ ../src -DCMAKE_PREFIX_PATH=/Users/$USER/Qt/5.3/clang_64/ -DCMAKE_BUILD_TYPE=Release -DCANTATA_OXYGEN_DIR=`pwd`/../icons -DCMAKE_INSTALL_PREFIX=`pwd`/../install
- Make the .app bundle:
+7. Build via QtCreator
- sudo make install
+8. Create an 'install' project in QtCreator
+ - Projects
+ - Add/Clone Selected
+ - Expand Build Steps, and select install
- Fix permissions on the .app bundle:
+9. Build 'install' project via QtCreator
- sudo chown -R <user>:staff cantata.app/
- Copy icons to the .app bundle (assuming oxygen-icons was installed to default
- location):
+Create Installer
+----------------
- mkdir cantata.app/Contents/Resources/icons
- cp -r /usr/local/share/icons/oxygen cantata.app/Contents/Resources/icons
+1. Go into the 'mac' folder within the build folder
+2. Run ./create-dmg.sh
diff --git a/TODO b/TODO
index 9df6716..04f9e0e 100644
--- a/TODO
+++ b/TODO
@@ -6,7 +6,6 @@
- CMake scripts not working
- Build QtNetwork with SSL support? libeay32.dll and libssl32.dll will also
need to be supplied with installer.
- - With Qt5.2 use QWinThumbnailToolButton
- Streams
- If radio stream is a playlist, Cantata currently only uses the 1st entry.
@@ -50,11 +49,6 @@
- Move code out of MainWindow class.
- General
- - Ratings (use KRatingWidget?)
- - Not sure, would need support in cantata-dynamic
- - MPD's 'stickers' could be used, but there is no way to query tag+value
- you can only query for tracks that have tag. So, could query for all
- tracks with tag=rating, but not tag=rating and value=4
- mixramp tag calculation
- mixramp MPD settings
- Does MPD need to be restarted to change settings?
diff --git a/cantata-play-audiocd.desktop b/cantata-play-audiocd.desktop
index 08d64c3..9c61450 100644
--- a/cantata-play-audiocd.desktop
+++ b/cantata-play-audiocd.desktop
@@ -7,5 +7,6 @@ X-KDE-Priority=TopLevel
[Desktop Action Play]
Name=Play Audio CD with Cantata
Name[de]=Audio CD mit Cantata abspielen
+Name[pl]=Odtwarzaj płytę audio przy użyciu Cantaty
Icon=cantata
Exec=cantata cdda://?dev=%d
diff --git a/cantata-remote.cmake b/cantata-remote.cmake
new file mode 100755
index 0000000..14dcba1
--- /dev/null
+++ b/cantata-remote.cmake
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+#
+# cantata-remote
+#
+# Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+#
+# ----
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+# ---------------------------------------------------------------------
+#
+# This shell scrpt is intended to be invoked from the Cantata badge on
+# the unity task bar.
+#
+
+if [ $# -ne 1 ] ; then
+ exit
+fi
+
+service=@PROJECT_REV_URL@
+
+# If we have qdbus use that...
+qt=`which qdbus`
+if [ "$qt" != "" ] ; then
+ $qt $service > /dev/null
+ if [ $? -ne 0 ] ; then
+ # Cantata not started? Try to start...
+ cantata &
+ sleep 1s
+ fi
+ $qt $service /org/mpris/MediaPlayer2 $1 > /dev/null
+ exit
+fi
+
+# No qdbus so try dbus-send...
+dbus=`which dbus-send`
+if [ "$dbus" != "" ] ; then
+ status=`$dbus --print-reply --reply-timeout=250 --type=method_call --session --dest=$service /org/mpris/MediaPlayer2 org.freedesktop.DBus.Peer.Ping 2>&1 | grep "org.freedesktop.DBus.Error.ServiceUnknown" | wc -l`
+ if [ "$status" != "0" ] ; then
+ # Cantata not started? Try to start...
+ cantata &
+ sleep 1s
+ fi
+ dbus-send --type=method_call --session --dest=$service /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.$1
+fi
+
diff --git a/cantata.desktop b/cantata.desktop
deleted file mode 100644
index 5a1c1ac..0000000
--- a/cantata.desktop
+++ /dev/null
@@ -1,28 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Cantata
-GenericName=Music Player Client
-GenericName[bs]=Muzički player klijent
-GenericName[da]=Musik afspiller
-GenericName[de]=Grafischer Musik Player Client
-GenericName[es]=Cliente de reproducción de música
-GenericName[fi]=Musiikkisoitinasiakas
-GenericName[fr]=Client de lecture de musique
-GenericName[gl]=Cliente de reprodución de música
-GenericName[hu]=Zenelejátszókliens
-GenericName[jv]=Musik Player Client
-GenericName[ms]=Klien Pemain Musik
-GenericName[nb]=Musikkavspiller-klient
-GenericName[oc]=Client de lectura de musica
-GenericName[pl]=Odtwarzacz muzyki
-GenericName[pt]=Um reprodutor de música
-GenericName[pt_BR]=Reprodutor Multimídia
-GenericName[ru]=Клиент музыкального проигрывателя
-GenericName[sq]=Clienti player muzike
-GenericName[tr]=Muzik Çalıcı İstemcisi
-Icon=cantata
-Exec=cantata %U
-Categories=Qt;KDE;AudioVideo;Player;
-X-DBUS-StartupType=Unique
-X-DBUS-ServiceName=com.googlecode.cantata
-Keywords=Music;MPD;
diff --git a/cantata.desktop.cmake b/cantata.desktop.cmake
new file mode 100644
index 0000000..cc6e2f8
--- /dev/null
+++ b/cantata.desktop.cmake
@@ -0,0 +1,109 @@
+[Desktop Entry]
+Type=Application
+Name=Cantata
+GenericName=Music Player Client
+GenericName[bs]=Muzički player klijent
+GenericName[da]=Musik afspiller
+GenericName[de]=Grafischer Musik Player Client
+GenericName[es]=Cliente de reproducción de música
+GenericName[fi]=Musiikkisoitinasiakas
+GenericName[fr]=Client de lecture de musique
+GenericName[gl]=Cliente de reprodución de música
+GenericName[hu]=Zenelejátszókliens
+GenericName[jv]=Musik Player Client
+GenericName[ko]=음악 플레이어 클라이언트
+GenericName[ms]=Klien Pemain Musik
+GenericName[nb]=Musikkavspiller-klient
+GenericName[oc]=Client de lectura de musica
+GenericName[pl]=Odtwarzacz muzyki
+GenericName[pt]=Um reprodutor de música
+GenericName[pt_BR]=Reprodutor Multimídia
+GenericName[ru]=Клиент музыкального проигрывателя
+GenericName[sq]=Clienti player muzike
+GenericName[tr]=Muzik Çalıcı İstemcisi
+Icon=cantata
+Exec=cantata %U
+Categories=Qt;KDE;AudioVideo;Player;
+X-DBUS-StartupType=Unique
+X-DBUS-ServiceName=com.googlecode.cantata
+Keywords=Music;MPD;
+Actions=Previous;Play;Pause;Stop;StopAfterCurrent;Next;
+
+[Desktop Action Previous]
+Name=Previous Track
+Name[cs]=Předchozí skladba
+Name[de]=Vorheriges Stück
+Name[es]=Pista anterior
+Name[hu]=Előző szám
+Name[ko]=이전 곡
+Name[pl]=Poprzedni utwór
+Name[ru]=Предыдущий трек
+Name[zh_CN]=上一个
+Exec=@CMAKE_INSTALL_PREFIX@/share/@CMAKE_PROJECT_NAME@/scripts/cantata-remote Previous
+OnlyShowIn=Unity;
+
+[Desktop Action Play]
+Name=Play
+Name[cs]=Přehrát
+Name[de]=Abspielen
+Name[es]=Reproducir
+Name[hu]=Lejátszás
+Name[ko]=연주
+Name[pl]=Odtwarzaj
+Name[ru]=Воспроизвести
+Name[zh_CN]=播放
+Exec=@CMAKE_INSTALL_PREFIX@/share/@CMAKE_PROJECT_NAME@/scripts/cantata-remote Play
+OnlyShowIn=Unity;
+
+[Desktop Action Pause]
+Name=Pause
+Name[cs]=Pozastavit
+Name[de]=Pause
+Name[es]=Pausa
+Name[hu]=Szünet
+Name[ko]=멈춤
+Name[pl]=Wstrzymaj
+Name[ru]=Пауза
+Name[zh_CN]=暂停
+Exec=@CMAKE_INSTALL_PREFIX@/share/@CMAKE_PROJECT_NAME@/scripts/cantata-remote Pause
+OnlyShowIn=Unity;
+
+[Desktop Action Stop]
+Name=Stop
+Name[cs]=Zastavit
+Name[de]=Stopp
+Name[es]=Detener
+Name[hu]=Állj
+Name[ko]=정지
+Name[pl]=Stop
+Name[ru]=Остановить
+Name[zh_CN]=停止
+Exec=@CMAKE_INSTALL_PREFIX@/share/@CMAKE_PROJECT_NAME@/scripts/cantata-remote Stop
+OnlyShowIn=Unity;
+
+[Desktop Action StopAfterCurrent]
+Name=Stop After Current Track
+Name[cs]=Zastavit po současné skladbě
+Name[de]=Stoppe nach Stück
+Name[es]=Detener después de la pista actual
+Name[hu]=A mostani szám után leáll
+Name[ko]=지금 곡 다음 정지
+Name[pl]=Zatrzymaj po obecnym utworze
+Name[ru]=Остановить после текущего трека
+Name[zh_CN]=当前音轨后停止
+Exec=@CMAKE_INSTALL_PREFIX@/share/@CMAKE_PROJECT_NAME@/scripts/cantata-remote StopAfterCurrent
+OnlyShowIn=Unity;
+
+[Desktop Action Next]
+Name=Next Track
+Name[cs]=Další skladba
+Name[de]=Nächstes Stück
+Name[es]=Pista siguiente
+Name[hu]=Következő szám
+Name[ko]=다음 곡
+Name[pl]=Następny utwór
+Name[ru]=Следующий трек
+Name[zh_CN]=下一个
+Exec=@CMAKE_INSTALL_PREFIX@/share/@CMAKE_PROJECT_NAME@/scripts/cantata-remote Next
+OnlyShowIn=Unity;
+
diff --git a/cantata.qrc b/cantata.qrc
index e23f081..19f1c1f 100644
--- a/cantata.qrc
+++ b/cantata.qrc
@@ -1,15 +1,16 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="lastfm.svg">scrobbling/lastfm.svg</file>
+<file alias="stars.svg">icons/stars.svg</file>
<file alias="repeat16.png">icons/view-media-repeat16.png</file>
<file alias="repeat22.png">icons/view-media-repeat22.png</file>
+<file alias="repeat24.png">icons/view-media-repeat24.png</file>
<file alias="repeat32.png">icons/view-media-repeat32.png</file>
-<file alias="repeat48.png">icons/view-media-repeat48.png</file>
<file alias="shuffle16.png">icons/view-media-shuffle16.png</file>
<file alias="shuffle22.png">icons/view-media-shuffle22.png</file>
+<file alias="shuffle24.png">icons/view-media-shuffle24.png</file>
<file alias="shuffle32.png">icons/view-media-shuffle32.png</file>
-<file alias="shuffle48.png">icons/view-media-shuffle48.png</file>
<file alias="sidebar-albums-dark">icons/sidebar-albums-dark.svg</file>
<file alias="sidebar-artists-dark">icons/sidebar-artists-dark.svg</file>
@@ -47,19 +48,7 @@
<file alias="tunein">streams/icons/tunein.svg</file>
<file alias="dirble">streams/icons/dirble.svg</file>
-<file alias="va16.png">icons/view-media-artist-various16.png</file>
-<file alias="va22.png">icons/view-media-artist-various22.png</file>
-<file alias="va32.png">icons/view-media-artist-various32.png</file>
-<file alias="va48.png">icons/view-media-artist-various48.png</file>
-<file alias="va64.png">icons/view-media-artist-various64.png</file>
-<file alias="va128.png">icons/view-media-artist-various128.png</file>
<file alias="va.svg">icons/view-media-artist-various.svg</file>
-<file alias="artist16.png">icons/view-media-artist16.png</file>
-<file alias="artist22.png">icons/view-media-artist22.png</file>
-<file alias="artist32.png">icons/view-media-artist32.png</file>
-<file alias="artist48.png">icons/view-media-artist48.png</file>
-<file alias="artist64.png">icons/view-media-artist64.png</file>
-<file alias="artist128.png">icons/view-media-artist128.png</file>
<file alias="artist.svg">icons/view-media-artist.svg</file>
<file alias="radio16.png">icons/view-radiostream16.png</file>
<file alias="radio22.png">icons/view-radiostream22.png</file>
diff --git a/cantata_media.qrc b/cantata_media.qrc
index 1748daf..7aafae4 100644
--- a/cantata_media.qrc
+++ b/cantata_media.qrc
@@ -1,20 +1,16 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="media-next-dark">icons/media-next-dark.svg</file>
-<file alias="media-next-rtl-dark">icons/media-next-rtl-dark.svg</file>
<file alias="media-pause-dark">icons/media-pause-dark.svg</file>
<file alias="media-play-dark">icons/media-play-dark.svg</file>
<file alias="media-play-rtl-dark">icons/media-play-rtl-dark.svg</file>
<file alias="media-prev-dark">icons/media-prev-dark.svg</file>
-<file alias="media-prev-rtl-dark">icons/media-prev-rtl-dark.svg</file>
<file alias="media-stop-dark">icons/media-stop-dark.svg</file>
<file alias="media-next-light">icons/media-next-light.svg</file>
-<file alias="media-next-rtl-light">icons/media-next-rtl-light.svg</file>
<file alias="media-pause-light">icons/media-pause-light.svg</file>
<file alias="media-play-light">icons/media-play-light.svg</file>
<file alias="media-play-rtl-light">icons/media-play-rtl-light.svg</file>
<file alias="media-prev-light">icons/media-prev-light.svg</file>
-<file alias="media-prev-rtl-light">icons/media-prev-rtl-light.svg</file>
<file alias="media-stop-light">icons/media-stop-light.svg</file>
</qresource>
</RCC>
diff --git a/cmake/DeployQt5.cmake b/cmake/DeployQt5.cmake
new file mode 100755
index 0000000..4677a7b
--- /dev/null
+++ b/cmake/DeployQt5.cmake
@@ -0,0 +1,350 @@
+# - Functions to help assemble a standalone Qt5 executable.
+# A collection of CMake utility functions useful for deploying
+# Qt5 executables.
+#
+# The following functions are provided by this module:
+# write_qt5_conf
+# resolve_qt5_paths
+# fixup_qt5_executable
+# install_qt5_plugin_path
+# install_qt5_plugin
+# install_qt5_executable
+# Requires CMake 2.6 or greater because it uses function and
+# PARENT_SCOPE. Also depends on BundleUtilities.cmake.
+#
+# WRITE_QT5_CONF(<qt_conf_dir> <qt_conf_contents>)
+# Writes a qt.conf file with the <qt_conf_contents> into <qt_conf_dir>.
+#
+# RESOLVE_QT5_PATHS(<paths_var> [<executable_path>])
+# Loop through <paths_var> list and if any don't exist resolve them
+# relative to the <executable_path> (if supplied) or the CMAKE_INSTALL_PREFIX.
+#
+# FIXUP_QT5_EXECUTABLE(<executable> [<qtplugins> <libs> <dirs> <plugins_dir> <request_qt_conf>])
+# Copies Qt plugins, writes a Qt configuration file (if needed) and fixes up a
+# Qt5 executable using BundleUtilities so it is standalone and can be
+# drag-and-drop copied to another machine as long as all of the system
+# libraries are compatible.
+#
+# <executable> should point to the executable to be fixed-up.
+#
+# <qtplugins> should contain a list of the names or paths of any Qt plugins
+# to be installed.
+#
+# <libs> will be passed to BundleUtilities and should be a list of any already
+# installed plugins, libraries or executables to also be fixed-up.
+#
+# <dirs> will be passed to BundleUtilities and should contain and directories
+# to be searched to find library dependencies.
+#
+# <plugins_dir> allows an custom plugins directory to be used.
+#
+# <request_qt_conf> will force a qt.conf file to be written even if not needed.
+#
+# INSTALL_QT5_PLUGIN_PATH(plugin executable copy installed_plugin_path_var <plugins_dir> <component> <configurations>)
+# Install (or copy) a resolved <plugin> to the default plugins directory
+# (or <plugins_dir>) relative to <executable> and store the result in
+# <installed_plugin_path_var>.
+#
+# If <copy> is set to TRUE then the plugins will be copied rather than
+# installed. This is to allow this module to be used at CMake time rather than
+# install time.
+#
+# If <component> is set then anything installed will use this COMPONENT.
+#
+# INSTALL_QT5_PLUGIN(plugin executable copy installed_plugin_path_var <plugins_dir> <component>)
+# Install (or copy) an unresolved <plugin> to the default plugins directory
+# (or <plugins_dir>) relative to <executable> and store the result in
+# <installed_plugin_path_var>. See documentation of INSTALL_QT5_PLUGIN_PATH.
+#
+# INSTALL_QT5_EXECUTABLE(<executable> [<qtplugins> <libs> <dirs> <plugins_dir> <request_qt_conf> <component>])
+# Installs Qt plugins, writes a Qt configuration file (if needed) and fixes up
+# a Qt5 executable using BundleUtilities so it is standalone and can be
+# drag-and-drop copied to another machine as long as all of the system
+# libraries are compatible. The executable will be fixed-up at install time.
+# <component> is the COMPONENT used for bundle fixup and plugin installation.
+# See documentation of FIXUP_QT5_BUNDLE.
+
+#=============================================================================
+# Copyright 2011 Mike McQuaid <mike at mikemcquaid.com>
+# Copyright 2013 Mihai Moldovan <ionic at ionic.de>
+# CMake - Cross Platform Makefile Generator
+# Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+# nor the names of their contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# The functions defined in this file depend on the fixup_bundle function
+# (and others) found in BundleUtilities.cmake
+
+cmake_policy(SET CMP0011 NEW)
+cmake_policy(SET CMP0009 NEW)
+
+include(BundleUtilities)
+set(DeployQt5_cmake_dir "${CMAKE_CURRENT_LIST_DIR}")
+set(DeployQt5_apple_plugins_dir "PlugIns")
+
+function(write_qt5_conf qt_conf_dir qt_conf_contents)
+ set(qt_conf_path "${qt_conf_dir}/qt.conf")
+ message(STATUS "Writing ${qt_conf_path}")
+ file(WRITE "${qt_conf_path}" "${qt_conf_contents}")
+endfunction()
+
+function(resolve_qt5_paths paths_var)
+ set(executable_path ${ARGV1})
+
+ set(paths_resolved)
+ foreach(path ${${paths_var}})
+ if(EXISTS "${path}")
+ list(APPEND paths_resolved "${path}")
+ else()
+ if(${executable_path})
+ list(APPEND paths_resolved "${executable_path}/${path}")
+ else()
+ list(APPEND paths_resolved "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${path}")
+ endif()
+ endif()
+ endforeach()
+ set(${paths_var} ${paths_resolved} PARENT_SCOPE)
+endfunction()
+
+function(fixup_qt5_executable executable)
+ set(qtplugins ${ARGV1})
+ set(libs ${ARGV2})
+ set(dirs ${ARGV3})
+ set(plugins_dir ${ARGV4})
+ set(request_qt_conf ${ARGV5})
+
+ message(STATUS "fixup_qt5_executable")
+ message(STATUS " executable='${executable}'")
+ message(STATUS " qtplugins='${qtplugins}'")
+ message(STATUS " libs='${libs}'")
+ message(STATUS " dirs='${dirs}'")
+ message(STATUS " plugins_dir='${plugins_dir}'")
+ message(STATUS " request_qt_conf='${request_qt_conf}'")
+
+ if(QT_LIBRARY_DIR)
+ list(APPEND dirs "${QT_LIBRARY_DIR}")
+ endif()
+ if(QT_BINARY_DIR)
+ list(APPEND dirs "${QT_BINARY_DIR}")
+ endif()
+
+ if(APPLE)
+ set(qt_conf_dir "${executable}/Contents/Resources")
+ set(executable_path "${executable}")
+ set(write_qt_conf TRUE)
+ if(NOT plugins_dir)
+ set(plugins_dir "${DeployQt5_apple_plugins_dir}")
+ endif()
+ else()
+ get_filename_component(executable_path "${executable}" PATH)
+ if(NOT executable_path)
+ set(executable_path ".")
+ endif()
+ set(qt_conf_dir "${executable_path}")
+ set(write_qt_conf ${request_qt_conf})
+ endif()
+
+ foreach(plugin ${qtplugins})
+ set(installed_plugin_path "")
+ install_qt5_plugin("${plugin}" "${executable}" 1 installed_plugin_path)
+ list(APPEND libs ${installed_plugin_path})
+ endforeach()
+
+ foreach(lib ${libs})
+ if(NOT EXISTS "${lib}")
+ message(FATAL_ERROR "Library does not exist: ${lib}")
+ endif()
+ endforeach()
+
+ resolve_qt5_paths(libs "${executable_path}")
+
+ if(write_qt_conf)
+ set(qt_conf_contents "[Paths]\nPlugins = ${plugins_dir}")
+ write_qt5_conf("${qt_conf_dir}" "${qt_conf_contents}")
+ endif()
+
+ fixup_bundle("${executable}" "${libs}" "${dirs}")
+endfunction()
+
+function(install_qt5_plugin_path plugin executable copy installed_plugin_path_var)
+ set(plugins_dir ${ARGV4})
+ set(component ${ARGV5})
+ set(configurations ${ARGV6})
+ if(EXISTS "${plugin}")
+ if(APPLE)
+ if(NOT plugins_dir)
+ set(plugins_dir "${DeployQt5_apple_plugins_dir}")
+ endif()
+ set(plugins_path "${executable}/Contents/${plugins_dir}")
+ else()
+ get_filename_component(plugins_path "${executable}" PATH)
+ if(NOT plugins_path)
+ set(plugins_path ".")
+ endif()
+ if(plugins_dir)
+ set(plugins_path "${plugins_path}/${plugins_dir}")
+ endif()
+ endif()
+
+ set(plugin_group "")
+
+ get_filename_component(plugin_path "${plugin}" PATH)
+ get_filename_component(plugin_parent_path "${plugin_path}" PATH)
+ get_filename_component(plugin_parent_dir_name "${plugin_parent_path}" NAME)
+ get_filename_component(plugin_name "${plugin}" NAME)
+ string(TOLOWER "${plugin_parent_dir_name}" plugin_parent_dir_name)
+
+ if("${plugin_parent_dir_name}" STREQUAL "plugins")
+ get_filename_component(plugin_group "${plugin_path}" NAME)
+ set(${plugin_group_var} "${plugin_group}")
+ endif()
+ set(plugins_path "${plugins_path}/${plugin_group}")
+
+ if(${copy})
+ file(MAKE_DIRECTORY "${plugins_path}")
+ file(COPY "${plugin}" DESTINATION "${plugins_path}")
+ else()
+ if(configurations AND (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE))
+ set(configurations CONFIGURATIONS ${configurations})
+ else()
+ unset(configurations)
+ endif()
+ install(FILES "${plugin}" DESTINATION "${plugins_path}" ${configurations} ${component})
+ endif()
+ set(${installed_plugin_path_var} "${plugins_path}/${plugin_name}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(install_qt5_plugin plugin executable copy installed_plugin_path_var)
+ set(plugins_dir ${ARGV4})
+ set(component ${ARGV5})
+ if(EXISTS "${plugin}")
+ install_qt5_plugin_path("${plugin}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}")
+ else()
+ #string(TOUPPER "QT_${plugin}_PLUGIN" plugin_var)
+ set(plugin_release)
+ set(plugin_debug)
+ set(plugin_tmp_path)
+ set(plugin_find_path "${Qt5Core_DIR}/../../../plugins/")
+ get_filename_component(plugin_find_path "${plugin_find_path}" REALPATH)
+ set(plugin_find_release_filename "lib${plugin}.dylib")
+ set(plugin_find_debug_filename "lib${plugin}_debug.dylib")
+ file(GLOB_RECURSE pluginlist "${plugin_find_path}" FOLLOW_SYMLINKS "${plugin_find_path}/*/lib*.dylib")
+ foreach(found_plugin ${pluginlist})
+ get_filename_component(curname "${found_plugin}" NAME)
+ if("${curname}" STREQUAL "${plugin_find_release_filename}")
+ set(plugin_tmp_release_path "${found_plugin}")
+ endif()
+ if("${curname}" STREQUAL "${plugin_find_debug_filename}")
+ set(plugin_tmp_debug_path "${found_plugin}")
+ endif()
+ endforeach()
+
+ if((NOT DEFINED plugin_tmp_release_path OR NOT EXISTS "${plugin_tmp_release_path}") AND (NOT DEFINED plugin_tmp_debug_PATH OR NOT EXISTS "${plugin_tmp_debug_path}"))
+ message(WARNING "Qt plugin \"${plugin}\" not recognized or found.")
+ endif()
+
+ if(EXISTS "${plugin_tmp_release_path}")
+ set(plugin_release "${plugin_tmp_release_path}")
+ elseif(EXISTS "${plugin_tmp_debug_path}")
+ set(plugin_release "${plugin_tmp_debug_path}")
+ endif()
+
+ if(EXISTS "${plugin_tmp_debug_path}")
+ set(plugin_debug "${plugin_tmp_debug_path}")
+ elseif(EXISTS "${plugin_tmp_release_path}")
+ set(plugin_debug "${plugin_tmp_release_path}")
+ endif()
+
+ if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
+ install_qt5_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}_release" "${plugins_dir}" "${component}" "Release|RelWithDebInfo|MinSizeRel")
+ install_qt5_plugin_path("${plugin_debug}" "${executable}" "${copy}" "${installed_plugin_path_var}_debug" "${plugins_dir}" "${component}" "Debug")
+
+ if(CMAKE_BUILD_TYPE MATCHES "^Debug$")
+ set(${installed_plugin_path_var} ${${installed_plugin_path_var}_debug})
+ else()
+ set(${installed_plugin_path_var} ${${installed_plugin_path_var}_release})
+ endif()
+ else()
+ install_qt5_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}")
+ endif()
+ endif()
+ set(${installed_plugin_path_var} ${${installed_plugin_path_var}} PARENT_SCOPE)
+endfunction()
+
+function(install_qt5_executable executable)
+ set(qtplugins ${ARGV1})
+ set(libs ${ARGV2})
+ set(dirs ${ARGV3})
+ set(plugins_dir ${ARGV4})
+ set(request_qt_conf ${ARGV5})
+ set(component ${ARGV6})
+ if(QT_LIBRARY_DIR)
+ list(APPEND dirs "${QT_LIBRARY_DIR}")
+ endif()
+ if(QT_BINARY_DIR)
+ list(APPEND dirs "${QT_BINARY_DIR}")
+ endif()
+ if(component)
+ set(component COMPONENT ${component})
+ else()
+ unset(component)
+ endif()
+
+ get_filename_component(executable_absolute "${executable}" ABSOLUTE)
+ if(EXISTS "${QT_QTCORE_LIBRARY_RELEASE}")
+ gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_RELEASE}" qtcore_type)
+ elseif(EXISTS "${QT_QTCORE_LIBRARY_DEBUG}")
+ gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_DEBUG}" qtcore_type)
+ endif()
+ if(qtcore_type STREQUAL "system")
+ set(qt_plugins_dir "")
+ endif()
+
+ if(QT_IS_STATIC)
+ message(WARNING "Qt built statically: not installing plugins.")
+ else()
+ foreach(plugin ${qtplugins})
+ message(STATUS "trying to install plugin ${plugin}")
+ set(installed_plugin_paths "")
+ install_qt5_plugin("${plugin}" "${executable}" 0 installed_plugin_paths "${plugins_dir}" "${component}")
+ list(APPEND libs ${installed_plugin_paths})
+ endforeach()
+ endif()
+
+ resolve_qt5_paths(libs "")
+
+ install(CODE
+ "include(\"${DeployQt5_cmake_dir}/DeployQt5.cmake\")
+ set(BU_CHMOD_BUNDLE_ITEMS TRUE)
+ FIXUP_QT5_EXECUTABLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${executable}\" \"\" \"${libs}\" \"${dirs}\" \"${plugins_dir}\" \"${request_qt_conf}\")"
+ ${component}
+ )
+endfunction()
diff --git a/cmake/FindFoundation.cmake b/cmake/FindFoundation.cmake
new file mode 100644
index 0000000..4639f0c
--- /dev/null
+++ b/cmake/FindFoundation.cmake
@@ -0,0 +1,22 @@
+# - Find Foundation on Mac
+#
+# FOUNDATION_LIBRARY - the library to use Foundation
+# FOUNDATION_FOUND - true if Foundation has been found
+
+# Copyright (c) 2009, Harald Fernengel <harry at kdevelop.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+include(CMakeFindFrameworks)
+
+cmake_find_frameworks(Foundation)
+
+if (Foundation_FRAMEWORKS)
+ set(FOUNDATION_LIBRARY "-framework Foundation" CACHE FILEPATH "Foundation framework" FORCE)
+ set(FOUNDATION_FOUND 1)
+endif (Foundation_FRAMEWORKS)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Foundation DEFAULT_MSG FOUNDATION_LIBRARY)
+
diff --git a/cmake/FindIOKit.cmake b/cmake/FindIOKit.cmake
new file mode 100644
index 0000000..f3e3ecb
--- /dev/null
+++ b/cmake/FindIOKit.cmake
@@ -0,0 +1,23 @@
+# - Find IOKit on Mac
+#
+# IOKIT_LIBRARY - the library to use IOKit
+# IOKIT_FOUND - true if IOKit has been found
+
+# Copyright (c) 2009, Harald Fernengel <harry at kdevelop.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+include(CMakeFindFrameworks)
+
+cmake_find_frameworks(IOKit)
+cmake_find_frameworks(CoreFoundation)
+
+if (IOKit_FRAMEWORKS)
+ set(IOKIT_LIBRARY "-framework IOKit -framework CoreFoundation" CACHE FILEPATH "IOKit framework" FORCE)
+ set(IOKIT_FOUND 1)
+endif (IOKit_FRAMEWORKS)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(IOKit DEFAULT_MSG IOKIT_LIBRARY)
+
diff --git a/config.h.cmake b/config.h.cmake
index 2e1fb08..81a5fee 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -5,15 +5,11 @@
#include "support/utils.h"
#define CANTATA_MAKE_VERSION(a, b, c) (((a) << 16) | ((b) << 8) | (c))
-/*
- NOTE: If CANTATA_REV_URL, or CANTATA_URL, are changed, then cantata-dynamac,
- CMakeLists.txt, README, and cantata.desktop will need updating.
- dbus/com.googlecode.cantata.xml will also need renaming/updating.
-*/
#define PACKAGE_NAME "@PROJECT_NAME@"
+#define ORGANIZATION_NAME "@ORGANIZATION_NAME@"
#define PACKAGE_VERSION CANTATA_MAKE_VERSION(@CPACK_PACKAGE_VERSION_MAJOR@, @CPACK_PACKAGE_VERSION_MINOR@, @CPACK_PACKAGE_VERSION_PATCH@)
#define PACKAGE_STRING PACKAGE_NAME" @CANTATA_VERSION_FULL@"
-#define PACKAGE_VERSION_STRING "@CANTATA_VERSION_FULL@"
+#define PACKAGE_VERSION_STRING "@CANTATA_VERSION_WITH_SPIN@"
#define INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
#cmakedefine ENABLE_DEVICES_SUPPORT 1
@@ -44,13 +40,16 @@
#cmakedefine ENABLE_MODEL_TEST 1
#cmakedefine USE_SYSTEM_MENU_ICON 1
#cmakedefine ENABLE_UBUNTU 1
+#cmakedefine IOKIT_FOUND 1
+#cmakedefine QT_MAC_EXTRAS_FOUND 1
+#cmakedefine UNITY_MENU_HACK 1
#ifdef ENABLE_UBUNTU
-#define CANTATA_REV_URL "com.ubuntu.developer.nikwen.cantata-touch" //Sadly, it requires the com.ubuntu.developer.nikwen prefix to be published to the click store
+#define CANTATA_REV_URL "com.ubuntu.developer.nikwen.cantata-touch-reboot" //Sadly, it requires the com.ubuntu.developer.nikwen prefix to be published to the click store
#else
-#define CANTATA_REV_URL "com.googlecode.cantata"
+#define CANTATA_REV_URL "@PROJECT_REV_URL@"
#endif
-#define CANTATA_URL "cantata.googlecode.com"
+#define CANTATA_URL "@PROJECT_URL@"
#define CANTATA_SYS_CONFIG_DIR Utils::systemDir(QLatin1String("config"))
#define CANTATA_SYS_ICONS_DIR Utils::systemDir(QLatin1String("icons"))
@@ -58,4 +57,16 @@
#define CANTATA_SYS_TRANS_DIR Utils::systemDir(QLatin1String("translations"))
#define CANTATA_SYS_SCRIPTS_DIR Utils::systemDir(QLatin1String("scripts"))
+#ifdef UNITY_MENU_HACK
+#define HIDE_MENU_ICON(A) menuIcons ? A : Icon()
+#define HIDE_MENU_ICON_NAME(A) menuIcons ? A : 0
+#define UNITY_MENU_ICON_CHECK bool menuIcons=Utils::Unity!=Utils::currentDe() && !QCoreApplication::testAttribute(Qt::AA_DontShowIconsInMenus);
+#else
+#define HIDE_MENU_ICON(A) A
+#define HIDE_MENU_ICON_NAME(A) A
+#define UNITY_MENU_ICON_CHECK
+#endif
+
+#define LINUX_LIB_DIR "@LINUX_LIB_DIR@"
+
#endif
diff --git a/context/contextwidget.cpp b/context/contextwidget.cpp
index 91fa266..de85504 100644
--- a/context/contextwidget.cpp
+++ b/context/contextwidget.cpp
@@ -209,7 +209,7 @@ ThinSplitter::ThinSplitter(QWidget *parent)
setChildrenCollapsible(true);
setOrientation(Qt::Horizontal);
resetAct=new QAction(i18n("Reset Spacing"), this);
- connect(resetAct, SIGNAL(triggered(bool)), this, SLOT(reset()));
+ connect(resetAct, SIGNAL(triggered()), this, SLOT(reset()));
setHandleWidth(0);
}
diff --git a/context/onlineview.cpp b/context/onlineview.cpp
index 9b0d7dd..5cdb58a 100644
--- a/context/onlineview.cpp
+++ b/context/onlineview.cpp
@@ -22,7 +22,7 @@
*/
#include "onlineview.h"
-#include "models/onlineservicesmodel.h"
+#include "gui/covers.h"
#include "support/localize.h"
OnlineView::OnlineView(QWidget *p)
@@ -42,7 +42,7 @@ void OnlineView::update(const Song &song, bool force)
return;
}
setHeader(song.describe(true));
- Covers::Image cImg=OnlineServicesModel::self()->readImage(song);
+ Covers::Image cImg=Covers::self()->requestImage(song, true);
if (!cImg.img.isNull()) {
setHtml(createPicTag(cImg.img, cImg.fileName));
} else {
diff --git a/context/othersettings.cpp b/context/othersettings.cpp
index 925cc16..44711e7 100644
--- a/context/othersettings.cpp
+++ b/context/othersettings.cpp
@@ -66,7 +66,7 @@ void OtherSettings::load()
contextBackdrop_custom->setChecked(bgnd==contextBackdrop_custom->property(constValueProperty).toInt());
contextBackdropOpacity->setValue(Settings::self()->contextBackdropOpacity());
contextBackdropBlur->setValue(Settings::self()->contextBackdropBlur());
- contextBackdropFile->setText(Settings::self()->contextBackdropFile());
+ contextBackdropFile->setText(Utils::convertPathForDisplay(Settings::self()->contextBackdropFile(), false));
contextSwitchTime->setValue(Settings::self()->contextSwitchTime());
toggleWikiNote();
@@ -90,7 +90,7 @@ void OtherSettings::save()
}
Settings::self()->saveContextBackdropOpacity(contextBackdropOpacity->value());
Settings::self()->saveContextBackdropBlur(contextBackdropBlur->value());
- Settings::self()->saveContextBackdropFile(contextBackdropFile->text().trimmed());
+ Settings::self()->saveContextBackdropFile(Utils::convertPathFromDisplay(contextBackdropFile->text(), false));
Settings::self()->saveContextSwitchTime(contextSwitchTime->value());
}
diff --git a/context/othersettings.ui b/context/othersettings.ui
index 9258260..c2e9dde 100644
--- a/context/othersettings.ui
+++ b/context/othersettings.ui
@@ -203,7 +203,7 @@
<string>Always collapse into a single pane</string>
</property>
<property name="toolTip">
- <string>Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show all three.</string>
+ <string>Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all three.</string>
</property>
</widget>
</item>
@@ -214,45 +214,14 @@
</property>
</widget>
</item>
- <item row="5" column="1">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>8</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="6" column="0" colspan="2">
- <widget class="StateLabel" name="wikipediaIntroOnlyNote">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <item row="5" column="0" colspan="2">
+ <widget class="NoteLabel" name="wikipediaIntroOnlyNote">
<property name="text">
- <string><i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, links, etc), instead it shows a trimmed down version. This trimming is not always 100% accurate, hence by default Cantata will only show the basic introduction to each article. If you elect to show the full article, then there may be parsing errors. You will also need to remove any currently cached articles (using the 'Cache' page).</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Cantata only shows a trimmed down version of wikipedia pages (no images, links, etc). This trimming is not always 100% accurate, which is why Cantata defaults to only showing the introduction. If you elect to show the full article, then there may be parsing errors. You will also need to remove any currently cached articles (using the 'Cache' page).</string>
</property>
</widget>
</item>
- <item row="7" column="1">
+ <item row="6" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -277,9 +246,9 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
- <class>StateLabel</class>
+ <class>NoteLabel</class>
<extends>QLabel</extends>
- <header>widgets/statelabel.h</header>
+ <header>widgets/notelabel.h</header>
</customwidget>
<customwidget>
<class>PathRequester</class>
diff --git a/context/songview.cpp b/context/songview.cpp
index 4395df7..25fc0a4 100644
--- a/context/songview.cpp
+++ b/context/songview.cpp
@@ -121,7 +121,7 @@ static QString actualFile(const Song &song)
}
SongView::SongView(QWidget *p)
- : View(p, QStringList() << i18n("Lyrics") << i18n("Information") << i18n("Tags"))
+ : View(p, QStringList() << i18n("Lyrics") << i18n("Information") << i18n("Metadata"))
, scrollTimer(0)
, songPos(0)
, currentProvider(-1)
@@ -131,7 +131,7 @@ SongView::SongView(QWidget *p)
, currentProv(0)
, lyricsNeedsUpdating(true)
, infoNeedsUpdating(true)
- , tagsNeedsUpdating(true)
+ , metadataNeedsUpdating(true)
{
scrollAction = ActionCollection::get()->createAction("scrolllyrics", i18n("Scroll Lyrics"), "go-down");
refreshAction = ActionCollection::get()->createAction("refreshlyrics", i18n("Refresh Lyrics"), "view-refresh");
@@ -361,10 +361,10 @@ void SongView::curentViewChanged()
return;
}
switch (currentView()) {
- case Page_Lyrics: loadLyrics(); break;
- case Page_Information: loadInfo(); break;
- case Page_Tags: loadTags(); break;
- default: break;
+ case Page_Lyrics: loadLyrics(); break;
+ case Page_Information: loadInfo(); break;
+ case Page_Metadata: loadMetadata(); break;
+ default: break;
}
}
@@ -450,9 +450,14 @@ void SongView::loadInfo()
searchForInfo();
}
+static inline QString fixNewLine(QString s)
+{
+ return s.replace(QLatin1String("\n"), QLatin1String("<br/>"));
+}
+
static QString createRow(const QString &key, const QString &value)
{
- return value.isEmpty() ? QString() : QString("<tr><td>%1: </td><td>%2</td></tr>").arg(key).arg(value);
+ return value.isEmpty() ? QString() : QString("<tr><td>%1: </td><td>%2</td></tr>").arg(key).arg(fixNewLine(value));
}
struct MapEntry {
@@ -461,6 +466,7 @@ struct MapEntry {
QString str;
};
+#ifdef TAGLIB_FOUND
static QString clean(QString v)
{
if (v.length()>1) {
@@ -469,13 +475,14 @@ static QString clean(QString v)
}
return v;
}
+#endif
-void SongView::loadTags()
+void SongView::loadMetadata()
{
- if (!tagsNeedsUpdating) {
+ if (!metadataNeedsUpdating) {
return;
}
- tagsNeedsUpdating=false;
+ metadataNeedsUpdating=false;
QMultiMap<int, QString> tags;
QMultiMap<int, QString> audioProperties;
@@ -553,6 +560,22 @@ void SongView::loadTags()
}
#endif
+ int audioPos=1024;
+ if (audioProperties.isEmpty()) {
+ if (MPDStatus::self()->bitrate()>0) {
+ audioProperties.insert(audioPos++, createRow(i18n("Bitrate"), i18n("%1 kb/s", MPDStatus::self()->bitrate())));
+ }
+ if (MPDStatus::self()->samplerate()>0) {
+ audioProperties.insert(audioPos++, createRow(i18n("Sample rate"), i18n("%1 Hz", MPDStatus::self()->samplerate())));
+ }
+ if (MPDStatus::self()->channels()>0) {
+ audioProperties.insert(audioPos++, createRow(i18n("Channels"), QString::number(MPDStatus::self()->channels())));
+ }
+ }
+ if (MPDStatus::self()->bits()>0) {
+ audioProperties.insert(audioPos++, createRow(i18n("Bits"), QString::number(MPDStatus::self()->bits())));
+ }
+
if (tags.isEmpty()) {
int pos=0;
tags.insert(pos++, createRow(i18n("Artist"), currentSong.artist));
@@ -564,7 +587,7 @@ void SongView::loadTags()
tags.insert(pos++, createRow(i18n("Disc number"), 0==currentSong.disc ? QString() : QString::number(currentSong.disc)));
tags.insert(pos++, createRow(i18n("Genre"), currentSong.genres().join(", ")));
tags.insert(pos++, createRow(i18n("Year"), 0==currentSong.track ? QString() : QString::number(currentSong.year)));
- tags.insert(pos++, createRow(i18n("Comment"), currentSong.comment()));
+ tags.insert(pos++, createRow(i18n("Comment"), fixNewLine(currentSong.comment())));
}
QString tagInfo;
@@ -593,11 +616,21 @@ void SongView::loadTags()
}
}
}
- if (!tagInfo.isEmpty()) {
- tagInfo+=QLatin1String("</table>");
+ if (tagInfo.isEmpty()) {
+ tagInfo=QLatin1String("<table>");
+ } else {
+ tagInfo+=QLatin1String("<tr/>");
+ }
+ if (MPDConnection::self()->getDetails().dirReadable) {
+ QString path=Utils::getDir(MPDConnection::self()->getDetails().dir+currentSong.filePath());
+ tagInfo+=createRow(i18n("Filename"), QLatin1String("<a href=\"file://")+path+QLatin1String("\">")+
+ currentSong.filePath()+QLatin1String("</a>"));
+ } else {
+ tagInfo+=createRow(i18n("Filename"), currentSong.filePath());
}
+ tagInfo+=QLatin1String("</table>");
- setHtml(tagInfo, Page_Tags);
+ setHtml(tagInfo, Page_Metadata);
}
void SongView::refreshInfo()
@@ -684,7 +717,7 @@ void SongView::update(const Song &s, bool force)
{
if (s.isEmpty() || s.title.isEmpty() || s.artist.isEmpty()) {
currentSong=s;
- infoNeedsUpdating=tagsNeedsUpdating=lyricsNeedsUpdating=false;
+ infoNeedsUpdating=metadataNeedsUpdating=lyricsNeedsUpdating=false;
clear();
abort();
return;
@@ -722,7 +755,7 @@ void SongView::update(const Song &s, bool force)
currentProvider=-1;
}
- infoNeedsUpdating=tagsNeedsUpdating=lyricsNeedsUpdating=true;
+ infoNeedsUpdating=metadataNeedsUpdating=lyricsNeedsUpdating=true;
setHeader(song.title);
curentViewChanged();
}
diff --git a/context/songview.h b/context/songview.h
index a2bc212..3bfc40f 100644
--- a/context/songview.h
+++ b/context/songview.h
@@ -47,7 +47,7 @@ class SongView : public View
enum Pages {
Page_Lyrics,
Page_Information,
- Page_Tags
+ Page_Metadata
};
public:
@@ -88,7 +88,7 @@ private Q_SLOTS:
private:
void loadLyrics();
void loadInfo();
- void loadTags();
+ void loadMetadata();
void searchForInfo();
void hideSpinner();
void abort();
@@ -128,7 +128,7 @@ private:
bool lyricsNeedsUpdating;
bool infoNeedsUpdating;
- bool tagsNeedsUpdating;
+ bool metadataNeedsUpdating;
Action *refreshInfoAction;
Action *cancelInfoJobAction;
ContextEngine *engine;
diff --git a/context/togglelist.ui b/context/togglelist.ui
index 3719e84..6767e67 100644
--- a/context/togglelist.ui
+++ b/context/togglelist.ui
@@ -66,18 +66,10 @@
</spacer>
</item>
<item row="3" column="1">
- <widget class="QToolButton" name="addButton">
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
+ <widget class="FlatToolButton" name="addButton"/>
</item>
<item row="3" column="3">
- <widget class="QToolButton" name="upButton">
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
+ <widget class="FlatToolButton" name="upButton"/>
</item>
<item row="4" column="1">
<spacer name="spacerA">
@@ -112,18 +104,10 @@
</spacer>
</item>
<item row="5" column="1">
- <widget class="QToolButton" name="removeButton">
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
+ <widget class="FlatToolButton" name="removeButton"/>
</item>
<item row="5" column="3">
- <widget class="QToolButton" name="downButton">
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- </widget>
+ <widget class="FlatToolButton" name="downButton"/>
</item>
<item row="6" column="1">
<spacer name="verticalSpacer_2">
@@ -173,4 +157,11 @@
</tabstops>
<resources/>
<connections/>
+ <customwidgets>
+ <customwidget>
+ <class>FlatToolButton</class>
+ <extends>QToolButton</extends>
+ <header>support/flattoolbutton.h</header>
+ </customwidget>
+ </customwidgets>
</ui>
diff --git a/context/view.cpp b/context/view.cpp
index 4b9a3e3..b2e66ea 100644
--- a/context/view.cpp
+++ b/context/view.cpp
@@ -31,10 +31,11 @@
#include "support/action.h"
#include "widgets/icons.h"
#include "support/localize.h"
+#include "support/touchproxystyle.h"
#include <QLabel>
#include <QScrollBar>
#include <QImage>
-#include <QGridLayout>
+#include <QVBoxLayout>
#include <QNetworkReply>
#include <QLocale>
#include <QBuffer>
@@ -44,6 +45,7 @@
#include <QMenu>
#include <QMouseEvent>
#include <QWheelEvent>
+#include <QTimer>
// Uncomment this #define to have header labels an images centered. Thsi is disabled, as the image
// centering only works if there is some text larger than 1 line to be displayed underneath :-(
@@ -87,85 +89,6 @@ static TextBrowser * createView(QWidget *parent)
return text;
}
-ViewTextSelector::ViewTextSelector(QWidget *p)
- : QLabel(p)
- , current(0)
-{
- setAttribute(Qt::WA_Hover, true);
- menu=new QMenu(this);
- setStyleSheet(QLatin1String("QLabel:hover {color:palette(highlight);}"));
- setMargin(Utils::scaleForDpi(2));
-}
-
-static QString viewText(const QString &s)
-{
- // 0x25BE is unicode for small down arrow...
- return QLatin1String("<b>")+s+QLatin1String(" ")+QChar(0x25BE)+QLatin1String("</b>");
-}
-
-void ViewTextSelector::addItem(const QString &t)
-{
- menu->addAction(t, this, SLOT(itemSelected()))->setData(items.count());
- if (text().isEmpty()) {
- setText(viewText(t));
- current=items.count();
- }
- items.append(t);
-}
-
-void ViewTextSelector::itemSelected()
-{
- QAction *act=qobject_cast<QAction *>(sender());
- if (act) {
- setCurrentIndex(act->data().toInt());
- }
-}
-
-bool ViewTextSelector::event(QEvent *e)
-{
- switch (e->type()) {
- case QEvent::MouseButtonPress:
- if (Qt::NoModifier==static_cast<QMouseEvent *>(e)->modifiers() && Qt::LeftButton==static_cast<QMouseEvent *>(e)->button()) {
- menu->exec(mapToGlobal(static_cast<QMouseEvent *>(e)->pos()));
- }
- case QEvent::Wheel: {
- int numDegrees = static_cast<QWheelEvent *>(e)->delta() / 8;
- int numSteps = numDegrees / 15;
- int newIndex = current;
- if (numSteps > 0) {
- for (int i = 0; i < numSteps; ++i) {
- newIndex++;
- if (newIndex>=items.count()) {
- newIndex=0;
- }
- }
- } else {
- for (int i = 0; i > numSteps; --i) {
- newIndex--;
- if (newIndex<0) {
- newIndex=items.count()-1;
- }
- }
- }
- setCurrentIndex(newIndex);
- break;
- }
- default:
- break;
- }
- return QLabel::event(e);
-}
-
-void ViewTextSelector::setCurrentIndex(int v)
-{
- if (v<0 || v>=items.count() || v==current) {
- return;
- }
- current=v;
- setText(viewText(items.at(current)));
- emit activated(current);
-}
-
View::View(QWidget *parent, const QStringList &views)
: QWidget(parent)
, needToUpdate(false)
@@ -173,7 +96,7 @@ View::View(QWidget *parent, const QStringList &views)
, selector(0)
, stack(0)
{
- QGridLayout *layout=new QGridLayout(this);
+ QVBoxLayout *layout=new QVBoxLayout(this);
header=new QLabel(this);
if (views.isEmpty()) {
@@ -181,10 +104,11 @@ View::View(QWidget *parent, const QStringList &views)
texts.append(t);
} else {
stack=new QStackedWidget(this);
- selector=new ViewTextSelector(this);
+ selector=new SelectorLabel(this);
+ selector->setUseArrow(true);
foreach (const QString &v, views) {
TextBrowser *t=createView(stack);
- selector->addItem(v);
+ selector->addItem(v, v);
stack->addWidget(t);
texts.append(t);
}
@@ -192,21 +116,19 @@ View::View(QWidget *parent, const QStringList &views)
connect(selector, SIGNAL(activated(int)), this, SIGNAL(viewChanged()));
}
- layout->setMargin(0);
header->setWordWrap(true);
header->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- int row=0;
- layout->addItem(new QSpacerItem(1, layout->spacing(), QSizePolicy::Fixed, QSizePolicy::Fixed), row++, 0);
- layout->addWidget(header, row++, 0, 1, 2);
+ layout->setMargin(2);
+ layout->addWidget(header);
if (views.isEmpty()) {
- layout->addWidget(texts.at(0), row++, 0, 1, 2);
+ layout->addWidget(texts.at(0));
} else {
- layout->addWidget(selector, row, 0);
- layout->addItem(new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, QSizePolicy::Fixed), row++, 1);
- layout->addWidget(stack, row++, 0, 1, 2);
+ layout->addWidget(selector);
+ layout->addItem(new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
+ layout->addWidget(stack);
}
- layout->addItem(new QSpacerItem(1, fontMetrics().height()/4, QSizePolicy::Fixed, QSizePolicy::Fixed), row++, 0);
+ layout->addItem(new QSpacerItem(1, fontMetrics().height()/4, QSizePolicy::Fixed, QSizePolicy::Fixed));
if (headerTag.isEmpty()) {
initHeaderTags();
}
@@ -215,6 +137,10 @@ View::View(QWidget *parent, const QStringList &views)
cancelJobAction->setEnabled(false);
connect(cancelJobAction, SIGNAL(triggered()), SLOT(abort()));
text=texts.at(0);
+
+ if (!Utils::touchFriendly()) {
+ QTimer::singleShot(0, this, SLOT(initStyle()));
+ }
}
View::~View()
@@ -367,3 +293,16 @@ void View::setHtml(const QString &h, int index)
void View::abort()
{
}
+
+void View::initStyle()
+{
+ if (GtkStyle::isActive() && GtkStyle::thinScrollbars()) {
+ // Already have thin style scrollbars...
+ return;
+ }
+ static TouchProxyStyle *scrollbarStyle=new TouchProxyStyle(0, false, true);
+ foreach (TextBrowser *t, texts) {
+ t->verticalScrollBar()->setStyle(scrollbarStyle);
+ t->horizontalScrollBar()->setStyle(scrollbarStyle);
+ }
+}
diff --git a/context/view.h b/context/view.h
index 28856b4..e0d054f 100644
--- a/context/view.h
+++ b/context/view.h
@@ -28,6 +28,7 @@
#include <QSize>
#include <QLabel>
#include "mpd/song.h"
+#include "widgets/selectorlabel.h"
class QImage;
class Spinner;
@@ -38,28 +39,6 @@ class Action;
class QStackedWidget;
class QMenu;
-class ViewTextSelector : public QLabel
-{
- Q_OBJECT
-public:
- ViewTextSelector(QWidget *p);
- void addItem(const QString &t);
- bool event(QEvent *e);
- int currentIndex() const { return current; }
- void setCurrentIndex(int v);
-
-Q_SIGNALS:
- void activated(int);
-
-private Q_SLOTS:
- void itemSelected();
-
-private:
- int current;
- QStringList items;
- QMenu *menu;
-};
-
class View : public QWidget
{
Q_OBJECT
@@ -98,6 +77,9 @@ Q_SIGNALS:
protected Q_SLOTS:
virtual void abort();
+private Q_SLOTS:
+ void initStyle();
+
protected:
Song currentSong;
QString stdHeader;
@@ -106,7 +88,7 @@ protected:
Spinner *spinner;
Action *cancelJobAction;
- ViewTextSelector *selector;
+ SelectorLabel *selector;
QStackedWidget *stack;
TextBrowser *text; // short-cut to first text item...
QList<TextBrowser *> texts;
diff --git a/context/wikipediasettings.cpp b/context/wikipediasettings.cpp
index 2bfa589..932d677 100644
--- a/context/wikipediasettings.cpp
+++ b/context/wikipediasettings.cpp
@@ -92,7 +92,7 @@ WikipediaSettings::WikipediaSettings(QWidget *p)
{
label->setText(i18n("Choose the wikipedia languages you want to use when searching for artist and album information."));
reload=new Action(i18n("Reload"), this);
- connect(reload, SIGNAL(triggered(bool)), this, SLOT(getLangs()));
+ connect(reload, SIGNAL(triggered()), this, SLOT(getLangs()));
available->addAction(reload);
available->setContextMenuPolicy(Qt::ActionsContextMenu);
}
diff --git a/dbus/gnomemediakeys.cpp b/dbus/gnomemediakeys.cpp
index 37c9e20..c1636ba 100644
--- a/dbus/gnomemediakeys.cpp
+++ b/dbus/gnomemediakeys.cpp
@@ -43,13 +43,21 @@ GnomeMediaKeys::GnomeMediaKeys(QObject *p)
{
}
-void GnomeMediaKeys::activate(bool a)
+bool GnomeMediaKeys::activate()
{
- if (a && !mk) {
- if (daemonIsRunning()) {
- grabKeys();
- }
- } else if (!a && mk) {
+ if (mk) {
+ return true;
+ }
+ if (daemonIsRunning()) {
+ grabKeys();
+ return true;
+ }
+ return false;
+}
+
+void GnomeMediaKeys::deactivate()
+{
+ if (mk) {
releaseKeys();
disconnectDaemon();
if (watcher) {
diff --git a/dbus/gnomemediakeys.h b/dbus/gnomemediakeys.h
index 6fdb8e6..be43ee9 100644
--- a/dbus/gnomemediakeys.h
+++ b/dbus/gnomemediakeys.h
@@ -38,7 +38,8 @@ class GnomeMediaKeys : public MultiMediaKeysInterface
public:
GnomeMediaKeys(QObject *p);
- void activate(bool a);
+ bool activate();
+ void deactivate();
private:
bool daemonIsRunning();
diff --git a/dbus/mpris.h b/dbus/mpris.h
index 2205525..1903d7c 100644
--- a/dbus/mpris.h
+++ b/dbus/mpris.h
@@ -79,7 +79,7 @@ public:
void PlayPause() { StdActions::self()->playPauseTrackAction->trigger(); }
void Stop() { StdActions::self()->stopPlaybackAction->trigger(); }
- void StopAfterCurrent() { StdActions::self()->stopAfterTrackAction->trigger(); }
+ void StopAfterCurrent() { StdActions::self()->stopAfterCurrentTrackAction->trigger(); }
void Play() {
MPDStatus * const status = MPDStatus::self();
diff --git a/dbus/notify.cpp b/dbus/notify.cpp
index cc8403b..877c22d 100644
--- a/dbus/notify.cpp
+++ b/dbus/notify.cpp
@@ -75,7 +75,7 @@ const QDBusArgument& operator>> (const QDBusArgument &arg, QImage &image)
{
// This is needed to link but shouldn't be called.
Q_ASSERT(0);
- Q_UNUSED(image);
+ Q_UNUSED(image)
return arg;
}
diff --git a/dbus/org.freedesktop.login1.xml b/dbus/org.freedesktop.login1.xml
new file mode 100644
index 0000000..a155b8f
--- /dev/null
+++ b/dbus/org.freedesktop.login1.xml
@@ -0,0 +1,198 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.freedesktop.login1.Manager">
+ <method name="GetSession">
+ <arg name="id" type="s" direction="in"/>
+ <arg name="session" type="o" direction="out"/>
+ </method>
+ <method name="GetSessionByPID">
+ <arg name="pid" type="u" direction="in"/>
+ <arg name="session" type="o" direction="out"/>
+ </method>
+ <method name="GetUser">
+ <arg name="uid" type="u" direction="in"/>
+ <arg name="user" type="o" direction="out"/>
+ </method>
+ <method name="GetUserByPID">
+ <arg name="pid" type="u" direction="in"/>
+ <arg name="user" type="o" direction="out"/>
+ </method>
+ <method name="GetSeat">
+ <arg name="id" type="s" direction="in"/>
+ <arg name="seat" type="o" direction="out"/>
+ </method>
+<!--
+ <method name="ListSessions">
+ <arg name="sessions" type="a(susso)" direction="out"/>
+ </method>
+ <method name="ListUsers">
+ <arg name="users" type="a(uso)" direction="out"/>
+ </method>
+ <method name="ListSeats">
+ <arg name="seats" type="a(so)" direction="out"/>
+ </method>
+ <method name="CreateSession">
+ <arg name="uid" type="u" direction="in"/>
+ <arg name="leader" type="u" direction="in"/>
+ <arg name="service" type="s" direction="in"/>
+ <arg name="type" type="s" direction="in"/>
+ <arg name="class" type="s" direction="in"/>
+ <arg name="seat" type="s" direction="in"/>
+ <arg name="vtnr" type="u" direction="in"/>
+ <arg name="tty" type="s" direction="in"/>
+ <arg name="display" type="s" direction="in"/>
+ <arg name="remote" type="b" direction="in"/>
+ <arg name="remote_user" type="s" direction="in"/>
+ <arg name="remote_host" type="s" direction="in"/>
+ <arg name="scope_properties" type="a(sv)" direction="in"/>
+ <arg name="id" type="s" direction="out"/>
+ <arg name="path" type="o" direction="out"/>
+ <arg name="runtime_path" type="o" direction="out"/>
+ <arg name="fd" type="h" direction="out"/>
+ <arg name="seat" type="s" direction="out"/>
+ <arg name="vtnr" type="u" direction="out"/>
+ <arg name="existing" type="b" direction="out"/>
+ </method>
+-->
+ <method name="ReleaseSession">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ <method name="ActivateSession">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ <method name="ActivateSessionOnSeat">
+ <arg name="id" type="s" direction="in"/>
+ <arg name="seat" type="s" direction="in"/>
+ </method>
+ <method name="LockSession">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ <method name="UnlockSession">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ <method name="LockSessions"/>
+ <method name="UnlockSessions"/>
+ <method name="KillSession">
+ <arg name="id" type="s" direction="in"/>
+ <arg name="who" type="s" direction="in"/>
+ <arg name="signal" type="s" direction="in"/>
+ </method>
+ <method name="KillUser">
+ <arg name="uid" type="u" direction="in"/>
+ <arg name="signal" type="s" direction="in"/>
+ </method>
+ <method name="TerminateSession">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ <method name="TerminateUser">
+ <arg name="uid" type="u" direction="in"/>
+ </method>
+ <method name="TerminateSeat">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ <method name="SetUserLinger">
+ <arg name="uid" type="u" direction="in"/>
+ <arg name="b" type="b" direction="in"/>
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="AttachDevice">
+ <arg name="seat" type="s" direction="in"/>
+ <arg name="sysfs" type="s" direction="in"/>
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="FlushDevices">
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="PowerOff">
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="Reboot">
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="Suspend">
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="Hibernate">
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="HybridSleep">
+ <arg name="interactive" type="b" direction="in"/>
+ </method>
+ <method name="CanPowerOff">
+ <arg name="result" type="s" direction="out"/>
+ </method>
+ <method name="CanReboot">
+ <arg name="result" type="s" direction="out"/>
+ </method>
+ <method name="CanSuspend">
+ <arg name="result" type="s" direction="out"/>
+ </method>
+ <method name="CanHibernate">
+ <arg name="result" type="s" direction="out"/>
+ </method>
+ <method name="CanHybridSleep">
+ <arg name="result" type="s" direction="out"/>
+ </method>
+ <method name="Inhibit">
+ <arg name="what" type="s" direction="in"/>
+ <arg name="who" type="s" direction="in"/>
+ <arg name="why" type="s" direction="in"/>
+ <arg name="mode" type="s" direction="in"/>
+ <arg name="fd" type="h" direction="out"/>
+ </method>
+<!--
+ <method name="ListInhibitors">
+ <arg name="inhibitors" type="a(ssssuu)" direction="out"/>
+ </method>
+-->
+ <signal name="SessionNew">
+ <arg name="id" type="s"/>
+ <arg name="path" type="o"/>
+ </signal>
+ <signal name="SessionRemoved">
+ <arg name="id" type="s"/>
+ <arg name="path" type="o"/>
+ </signal>
+ <signal name="UserNew">
+ <arg name="uid" type="u"/>
+ <arg name="path" type="o"/>
+ </signal>
+ <signal name="UserRemoved">
+ <arg name="uid" type="u"/>
+ <arg name="path" type="o"/>
+ </signal>
+ <signal name="SeatNew">
+ <arg name="id" type="s"/>
+ <arg name="path" type="o"/>
+ </signal>
+ <signal name="SeatRemoved">
+ <arg name="id" type="s"/>
+ <arg name="path" type="o"/>
+ </signal>
+ <signal name="PrepareForShutdown">
+ <arg name="active" type="b"/>
+ </signal>
+ <signal name="PrepareForSleep">
+ <arg name="active" type="b"/>
+ </signal>
+ <property name="NAutoVTs" type="u" access="read"/>
+ <property name="KillOnlyUsers" type="as" access="read"/>
+ <property name="KillExcludeUsers" type="as" access="read"/>
+ <property name="KillUserProcesses" type="b" access="read"/>
+ <property name="IdleHint" type="b" access="read"/>
+ <property name="IdleSinceHint" type="t" access="read"/>
+ <property name="IdleSinceHintMonotonic" type="t" access="read"/>
+ <property name="BlockInhibited" type="s" access="read"/>
+ <property name="DelayInhibited" type="s" access="read"/>
+ <property name="InhibitDelayMaxUSec" type="t" access="read"/>
+ <property name="HandlePowerKey" type="s" access="read"/>
+ <property name="HandleSuspendKey" type="s" access="read"/>
+ <property name="HandleHibernateKey" type="s" access="read"/>
+ <property name="HandleLidSwitch" type="s" access="read"/>
+ <property name="IdleAction" type="s" access="read"/>
+ <property name="IdleActionUSec" type="t" access="read"/>
+ <property name="PreparingForShutdown" type="b" access="read"/>
+ <property name="PreparingForSleep" type="b" access="read"/>
+ </interface>
+</node>
diff --git a/dbus/powermanagement.cpp b/dbus/powermanagement.cpp
index 1c711b3..7db3308 100644
--- a/dbus/powermanagement.cpp
+++ b/dbus/powermanagement.cpp
@@ -30,6 +30,7 @@
#include "inhibitinterface.h"
#include "policyagentinterface.h"
#include "upowerinterface.h"
+#include "login1interface.h"
#endif
#include "support/localize.h"
#include "mpd/mpdstatus.h"
@@ -53,7 +54,10 @@ PowerManagement::PowerManagement()
QDBusConnection::sessionBus(), this);
upower = new OrgFreedesktopUPowerInterface(OrgFreedesktopUPowerInterface::staticInterfaceName(),
QLatin1String("/org/freedesktop/UPower"), QDBusConnection::systemBus(), this);
+ login1 = new OrgFreedesktopLogin1ManagerInterface("org.freedesktop.login1",
+ QLatin1String("/org/freedesktop/login1"), QDBusConnection::systemBus(), this);
connect(upower, SIGNAL(Resuming()), this, SIGNAL(resuming()));
+ connect(login1, SIGNAL(PrepareForSleep(bool)), this, SLOT(prepareForSleep(bool)));
#endif
}
@@ -124,3 +128,14 @@ void PowerManagement::mpdStatusUpdated()
}
}
}
+
+void PowerManagement::prepareForSleep(bool s)
+{
+ #ifdef ENABLE_KDE_SUPPORT
+ Q_UNUSED(s)
+ #else
+ if (!s) {
+ emit resuming();
+ }
+ #endif
+}
diff --git a/dbus/powermanagement.h b/dbus/powermanagement.h
index b39e0c8..ab3877e 100644
--- a/dbus/powermanagement.h
+++ b/dbus/powermanagement.h
@@ -31,6 +31,7 @@
class OrgKdeSolidPowerManagementPolicyAgentInterface;
class OrgFreedesktopPowerManagementInhibitInterface;
class OrgFreedesktopUPowerInterface;
+class OrgFreedesktopLogin1ManagerInterface;
#endif
class PowerManagement : public QObject
@@ -50,6 +51,7 @@ Q_SIGNALS:
private Q_SLOTS:
void mpdStatusUpdated();
+ void prepareForSleep(bool s);
private:
bool inhibitSuspendWhilstPlaying;
@@ -58,6 +60,7 @@ private:
OrgKdeSolidPowerManagementPolicyAgentInterface *policy;
OrgFreedesktopPowerManagementInhibitInterface *inhibit;
OrgFreedesktopUPowerInterface *upower;
+ OrgFreedesktopLogin1ManagerInterface *login1;
#endif
};
diff --git a/devices/actiondialog.cpp b/devices/actiondialog.cpp
index 9e7f549..14864ef 100644
--- a/devices/actiondialog.cpp
+++ b/devices/actiondialog.cpp
@@ -85,8 +85,6 @@ public:
MusicLibraryModel *model=new MusicLibraryModel(this, false);
MusicLibraryProxyModel *proxy=new MusicLibraryProxyModel(this);
proxy->setSourceModel(model);
- model->setUseAlbumImages(false);
- model->setUseArtistImages(false);
model->setSupportsAlbumArtistTag(true);
TreeView *view=new TreeView(this);
view->setPageDefaults();
@@ -322,14 +320,14 @@ void ActionDialog::copy(const QString &srcUdi, const QString &dstUdi, const QLis
}
show();
if (!enoughSpace) {
- MessageBox::information(this, i18n("There is insufficient space left on the destination device.\n"
+ MessageBox::information(this, i18n("There is insufficient space left on the destination device.\n\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be successfully copied.",
Utils::formatByteSize(spaceRequired),
Utils::formatByteSize(spaceAvailable)));
}
} else {
- MessageBox::error(parentWidget(), i18n("There is insufficient space left on the destination.\n"
+ MessageBox::error(parentWidget(), i18n("There is insufficient space left on the destination.\n\n"
"The selected songs consume %1, but there is only %2 left.",
Utils::formatByteSize(spaceRequired),
Utils::formatByteSize(spaceAvailable)));
@@ -415,12 +413,12 @@ void ActionDialog::slotButtonClicked(int button)
case Ok:
if (haveVariousArtists &&
((configureDestLabel->isVisible() && sourceUdi.isEmpty() && // Only warn if copying FROM library
- MessageBox::No==MessageBox::warningYesNo(this, i18n("<p>You have not configured the destination device.<br/>"
- "Continue with the default settings?</p>"), i18n("Not Configured"),
+ MessageBox::No==MessageBox::warningYesNo(this, i18n("You have not configured the destination device.\n\n"
+ "Continue with the default settings?"), i18n("Not Configured"),
GuiItem(i18n("Use Defaults")), StdGuiItem::cancel())) ||
(configureSourceLabel->isVisible() && !sourceUdi.isEmpty() && // Only warn if copying TO library
- MessageBox::No==MessageBox::warningYesNo(this, i18n("<p>You have not configured the source device.<br/>"
- "Continue with the default settings?</p>"), i18n("Not Configured"),
+ MessageBox::No==MessageBox::warningYesNo(this, i18n("You have not configured the source device.\n\n"
+ "Continue with the default settings?"), i18n("Not Configured"),
GuiItem(i18n("Use Defaults")), StdGuiItem::cancel())) ) ) {
return;
}
@@ -614,7 +612,7 @@ void ActionDialog::doNext()
#ifdef ENABLE_REPLAYGAIN_SUPPORT
if (Copy==mode && !albumsWithoutRgTags.isEmpty() && sourceIsAudioCd) {
QWidget *pw=parentWidget();
- if (MessageBox::Yes==MessageBox::questionYesNo(pw, i18n("Calculate ReplayGain for ripped tracks?"), i18n("ReplyGain"),
+ if (MessageBox::Yes==MessageBox::questionYesNo(pw, i18n("Calculate ReplayGain for ripped tracks?"), i18n("ReplayGain"),
GuiItem(i18n("Calculate")), StdGuiItem::no())) {
RgDialog *dlg=new RgDialog(pw);
QList<Song> songs;
diff --git a/devices/actiondialog.ui b/devices/actiondialog.ui
index bff4f61..7ab31bc 100644
--- a/devices/actiondialog.ui
+++ b/devices/actiondialog.ui
@@ -200,12 +200,9 @@
</widget>
</item>
<item row="6" column="0" colspan="2">
- <widget class="UrlLabel" name="mopidyNote">
+ <widget class="UrlNoteLabel" name="mopidyNote">
<property name="text">
- <string><i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i></string>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Connected to a Mopidy server (manual update required).</string>
</property>
</widget>
</item>
@@ -410,6 +407,11 @@
<header>support/urllabel.h</header>
</customwidget>
<customwidget>
+ <class>UrlNoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
<class>SplitLabelWidget</class>
<extends>QLabel</extends>
<header>devices/splitlabelwidget.h</header>
diff --git a/devices/albumdetailsdialog.cpp b/devices/albumdetailsdialog.cpp
index bc3405b..48329e4 100644
--- a/devices/albumdetailsdialog.cpp
+++ b/devices/albumdetailsdialog.cpp
@@ -51,7 +51,7 @@ public:
EditorDelegate(QObject *parent=0) : BasicItemDelegate(parent) { }
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
- Q_UNUSED(option);
+ Q_UNUSED(option)
if (COL_TRACK==index.column()) {
QSpinBox *editor = new QSpinBox(parent);
editor->setMinimum(0);
@@ -83,7 +83,7 @@ public:
}
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const {
- Q_UNUSED(index);
+ Q_UNUSED(index)
editor->setGeometry(option.rect);
}
};
@@ -230,10 +230,10 @@ void AlbumDetailsDialog::hideArtistColumn(bool hide)
void AlbumDetailsDialog::applyVa()
{
if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Apply \"Various Artists\" workaround?")+
- QLatin1String("<br/><hr/><br/>")+
- i18n("<i>This will set 'Album artist' and 'Artist' to "
+ QLatin1String("\n\n")+
+ i18n("This will set 'Album artist' and 'Artist' to "
"\"Various Artists\", and set 'Title' to "
- "\"TrackArtist - TrackTitle\"</i>"), i18n("Apply \"Various Artists\" Workaround"),
+ "\"TrackArtist - TrackTitle\""), i18n("Apply \"Various Artists\" Workaround"),
StdGuiItem::apply(), StdGuiItem::cancel())) {
return;
}
@@ -250,14 +250,14 @@ void AlbumDetailsDialog::applyVa()
void AlbumDetailsDialog::revertVa()
{
- if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Revert \"Various Artists\" workaround")+
- QLatin1String("<br/><hr/><br/>")+
- i18n("<i>Where the 'Album artist' is the same as 'Artist' "
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Revert \"Various Artists\" workaround?")+
+ QLatin1String("\n\n")+
+ i18n("Where the 'Album artist' is the same as 'Artist' "
"and the 'Title' is of the format \"TrackArtist - TrackTitle\", "
"'Artist' will be taken from 'Title' and 'Title' itself will be "
- "set to just the title. e.g. <br/><br/>"
+ "set to just the title. e.g. \n"
"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to "
- "\"Wibble\" and 'Title' will be set to \"Wobble\"</i>"), i18n("Revert \"Various Artists\" Workaround"),
+ "\"Wibble\" and 'Title' will be set to \"Wobble\""), i18n("Revert \"Various Artists\" Workaround"),
GuiItem(i18n("Revert")), StdGuiItem::cancel())) {
return;
}
@@ -274,7 +274,7 @@ void AlbumDetailsDialog::revertVa()
void AlbumDetailsDialog::capitalise()
{
- if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"),
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'?"),
i18n("Capitalize"), GuiItem(i18n("Capitalize")), StdGuiItem::cancel())) {
return;
}
diff --git a/devices/audiocddevice.cpp b/devices/audiocddevice.cpp
index 27135f3..02346fa 100644
--- a/devices/audiocddevice.cpp
+++ b/devices/audiocddevice.cpp
@@ -182,7 +182,7 @@ void AudioCdDevice::connectService(bool useCddb)
mb=0;
}
#else
- Q_UNUSED(useCddb);
+ Q_UNUSED(useCddb)
#endif
#ifdef CDDB_FOUND
diff --git a/devices/cdparanoia.cpp b/devices/cdparanoia.cpp
index 305616a..aed5450 100644
--- a/devices/cdparanoia.cpp
+++ b/devices/cdparanoia.cpp
@@ -37,8 +37,6 @@ CdParanoia::CdParanoia(const QString &device, bool full, bool noSkip, bool playb
, neverSkip(noSkip)
, maxRetries(20)
{
- paranoia = 0;
- drive = 0;
QMutexLocker locker(&mutex);
if (!lockedDevices.contains(device)) {
dev = device;
@@ -125,11 +123,6 @@ int CdParanoia::lastSectorOfTrack(int track)
// return paranoia ? cdda_disc_lastsector(drive) : -1;
//}
-void CdParanoia::reset()
-{
- init();
-}
-
bool CdParanoia::init()
{
free();
@@ -148,7 +141,8 @@ bool CdParanoia::init()
return true;
}
-void CdParanoia::free() {
+void CdParanoia::free()
+{
if (paranoia) {
paranoia_free(paranoia);
paranoia = 0;
diff --git a/devices/cdparanoia.h b/devices/cdparanoia.h
index 99dfeb7..5e177cb 100644
--- a/devices/cdparanoia.h
+++ b/devices/cdparanoia.h
@@ -58,7 +58,7 @@ public:
double sizeOfTrack(int n); //in MiB
int frameOffsetOfTrack(int n);
bool isAudioTrack(int n);
- void reset();
+ void reset() { init(); }
private:
bool init();
diff --git a/devices/device.h b/devices/device.h
index 38c5486..c042bfa 100644
--- a/devices/device.h
+++ b/devices/device.h
@@ -26,6 +26,7 @@
#include "models/musiclibraryitemroot.h"
#include "mpd/song.h"
+#include "gui/covers.h"
#include "config.h"
#ifdef ENABLE_DEVICES_SUPPORT
#include "deviceoptions.h"
@@ -100,9 +101,6 @@ public:
, needToFixVa(false)
, jobAbortRequested(false)
, transcoding(false) {
- setUseArtistImages(false);
- setUseAlbumImages(true);
- setLargeImages(false);
Q_UNUSED(m)
Q_UNUSED(id)
}
@@ -117,9 +115,6 @@ public:
, jobAbortRequested(false)
, transcoding(false) {
m_model=m;
- setUseArtistImages(false);
- setUseAlbumImages(true);
- setLargeImages(false);
icn=Icon(solidDev.isValid() ? solidDev.icon() : QLatin1String("inode-directory"));
}
Device(MusicModel *m, const QString &name, const QString &id)
@@ -131,8 +126,6 @@ public:
, jobAbortRequested(false)
, transcoding(false) {
m_model=m;
- setUseArtistImages(false);
- setUseAlbumImages(true);
icn=Icon(solidDev.isValid() ? solidDev.icon() : QLatin1String("inode-directory"));
}
#endif
@@ -155,7 +148,7 @@ public:
virtual void copySongTo(const Song &s, const QString &musicPath, bool overwrite, bool copyCover)=0;
virtual void removeSong(const Song &s)=0;
virtual void cleanDirs(const QSet<QString> &dirs)=0;
- virtual void requestCover(const Song &) { }
+ virtual Covers::Image requestCover(const Song &) { return Covers::Image(); }
virtual double usedCapacity()=0;
virtual QString capacityString()=0;
virtual qint64 freeSpace()=0;
diff --git a/devices/devicepropertieswidget.cpp b/devices/devicepropertieswidget.cpp
index a39f426..a300650 100644
--- a/devices/devicepropertieswidget.cpp
+++ b/devices/devicepropertieswidget.cpp
@@ -29,7 +29,6 @@
#include "support/utils.h"
#include <QValidator>
#include <QTabWidget>
-#include <QApplication>
class CoverNameValidator : public QValidator
{
@@ -149,7 +148,7 @@ void DevicePropertiesWidget::update(const QString &path, const DeviceOptions &op
origOpts=opts;
if (props&Prop_Folder) {
- musicFolder->setText(Utils::convertDirForDisplay(path));
+ musicFolder->setText(Utils::convertPathForDisplay(path));
connect(musicFolder, SIGNAL(textChanged(const QString &)), this, SLOT(checkSaveable()));
if (disabledProps&Prop_Folder) {
musicFolder->setDisabled(true);
@@ -321,17 +320,7 @@ void DevicePropertiesWidget::transcoderChanged()
}
}
- QWidget *win=window();
- if (win) {
- QSize was=win->size();
- QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
- win->setMinimumSize(QSize(0, 0));
- win->adjustSize();
- QSize now=win->size();
- win->setMinimumSize(now);
- win->resize(qMax(was.width(), now.width()), now.height());
- }
-
+ Utils::resizeWindow(this, true, false);
checkSaveable();
}
diff --git a/devices/devicepropertieswidget.h b/devices/devicepropertieswidget.h
index e917426..f154e5b 100644
--- a/devices/devicepropertieswidget.h
+++ b/devices/devicepropertieswidget.h
@@ -57,7 +57,7 @@ public:
DeviceOptions settings();
bool isModified() const { return modified; }
bool isSaveable() const { return saveable; }
- QString music() const { return musicFolder && musicFolder->isEnabled() ? Utils::convertDirFromDisplay(musicFolder->text()) : origMusicFolder; }
+ QString music() const { return musicFolder && musicFolder->isEnabled() ? Utils::convertPathFromDisplay(musicFolder->text()) : origMusicFolder; }
QString cover() const;
void showRemoteConnectionNote(bool v) { remoteDeviceNote->setVisible(v); }
diff --git a/devices/devicepropertieswidget.ui b/devices/devicepropertieswidget.ui
index 3ac7943..ccc679a 100644
--- a/devices/devicepropertieswidget.ui
+++ b/devices/devicepropertieswidget.ui
@@ -15,15 +15,9 @@
<number>0</number>
</property>
<item>
- <widget class="QLabel" name="remoteDeviceNote">
+ <widget class="PlainNoteLabel" name="remoteDeviceNote">
<property name="text">
- <string><i><b>NOTE:</b> These settings are only valid, and editable, when the device is connected.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>These settings are only valid, and editable, when the device is connected.</string>
</property>
</widget>
</item>
@@ -195,7 +189,7 @@
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="ignoreThe">
<property name="text">
- <string>Ignore 'The' in artist names</string>
+ <string>Append 'The' to artist names</string>
</property>
</widget>
</item>
@@ -261,6 +255,11 @@
<extends>QSlider</extends>
<header>devices/valueslider.h</header>
</customwidget>
+ <customwidget>
+ <class>PlainNoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>musicFolder</tabstop>
diff --git a/devices/devicespage.cpp b/devices/devicespage.cpp
index 551cffc..1d98f8f 100644
--- a/devices/devicespage.cpp
+++ b/devices/devicespage.cpp
@@ -79,14 +79,10 @@ DevicesPage::DevicesPage(QWidget *p)
view->addAction(StdActions::self()->replaygainAction);
#endif
#ifdef ENABLE_REMOTE_DEVICES
- QAction *sepA=new QAction(this);
- sepA->setSeparator(true);
- view->addAction(sepA);
+ view->addSeparator();
view->addAction(forgetDeviceAction);
#endif
- QAction *sep=new QAction(this);
- sep->setSeparator(true);
- view->addAction(sep);
+ view->addSeparator();
view->addAction(StdActions::self()->deleteSongsAction);
connect(this, SIGNAL(add(const QStringList &, bool, quint8)), MPDConnection::self(), SLOT(add(const QStringList &, bool, quint8)));
connect(this, SIGNAL(addSongsToPlaylist(const QString &, const QStringList &)), MPDConnection::self(), SLOT(addToPlaylist(const QString &, const QStringList &)));
@@ -230,11 +226,9 @@ QList<Song> DevicesPage::selectedSongs(bool allowPlaylists) const
return DevicesModel::self()->songs(proxy.mapToSource(selected, proxy.enabled() && Settings::self()->filteredOnly()));
}
-void DevicesPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void DevicesPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- Q_UNUSED(randomAlbums)
QStringList files=playableUrls();
-
if (!files.isEmpty()) {
if (name.isEmpty()) {
emit add(files, replace, priorty);
@@ -445,9 +439,11 @@ void DevicesPage::refreshDevice()
dev=DevicesModel::self()->device(udi);
} else {
if (dev->childCount() && Device::Mtp!=dev->devType()) {
- switch (MessageBox::questionYesNoCancel(this, i18n("<p>Which type of refresh do you wish to perform?<ul>"
- "<li>Partial - Only new songs are scanned <i>(quick)</i></li>"
- "<li>Full - All songs are rescanned <i>(slow)</i></li></ul></p>"),
+ static const QChar constBullet(0x2022);
+
+ switch (MessageBox::questionYesNoCancel(this, i18n("Which type of refresh do you wish to perform?")+QLatin1String("\n\n")+
+ constBullet+QLatin1Char(' ')+i18n("Partial - Only new songs are scanned (quick)")+QLatin1Char('\n')+
+ constBullet+QLatin1Char(' ')+i18n("Full - All songs are rescanned (slow)"),
i18n("Refresh"), GuiItem(i18n("Partial")), GuiItem(i18n("Full")))) {
case MessageBox::Yes:
full=false;
@@ -495,7 +491,7 @@ void DevicesPage::deleteSongs()
QList<Song> songs=DevicesModel::self()->songs(mapped);
if (!songs.isEmpty()) {
- if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\nThis cannot be undone."),
+ if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\n\nThis cannot be undone."),
i18n("Delete Songs"), StdGuiItem::del(), StdGuiItem::cancel())) {
emit deleteSongs(udi, songs);
}
@@ -522,7 +518,7 @@ void DevicesPage::forgetRemoteDevice()
}
QString udi=dev->id();
QString devName=dev->data();
- if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to forget <b>%1</b>?", devName))) {
+ if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to forget '%1'?", devName))) {
DevicesModel::self()->removeRemoteDevice(udi);
}
#endif
@@ -541,9 +537,9 @@ void DevicesPage::toggleDevice()
Device *dev=static_cast<Device *>(item);
if (dev->isConnected() &&
(Device::AudioCd==dev->devType()
- ? MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to eject Audio CD <b>%1 - %2</b>?", dev->data(), dev->subText()),
+ ? MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to eject Audio CD '%1 - %2'?", dev->data(), dev->subText()),
i18n("Eject"), GuiItem(i18n("Eject")), StdGuiItem::cancel())
- : MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to disconnect <b>%1</b>?", dev->data()),
+ : MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to disconnect '%1'?", dev->data()),
i18n("Disconnect"), GuiItem(i18n("Disconnect")), StdGuiItem::cancel()))) {
return;
}
diff --git a/devices/devicespage.h b/devices/devicespage.h
index c73c6a0..f65642a 100644
--- a/devices/devicespage.h
+++ b/devices/devicespage.h
@@ -47,11 +47,12 @@ public:
QString activeFsDeviceUdi() const;
QStringList playableUrls() const;
QList<Song> selectedSongs(bool allowPlaylists=false) const;
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
void setView(int v) { view->setMode((ItemView::Mode)v); }
void focusSearch() { view->focusSearch(); }
void refresh();
void showEvent(QShowEvent *e);
+ void resort() { proxy.sort(); }
public Q_SLOTS:
void itemDoubleClicked(const QModelIndex &);
diff --git a/devices/encoders.cpp b/devices/encoders.cpp
index eb1f9a3..3bbc94a 100644
--- a/devices/encoders.cpp
+++ b/devices/encoders.cpp
@@ -46,7 +46,7 @@ static void insertCodec(const QString &cmd, const QString ¶m,const QString &
enc.outputParam=outputParam;
if (-1!=index) {
Encoder orig=installedEncoders.takeAt(index);
- orig.name+=QLatin1String(" (ffmpeg)");
+ orig.name+=usingAvconv ? QLatin1String(" (avconv)") : QLatin1String(" (ffmpeg)");
installedEncoders.insert(index, orig);
enc.name+=QLatin1String(" (")+cmd+QChar(')');
installedEncoders.insert(index+1, enc);
diff --git a/devices/filenameschemedialog.cpp b/devices/filenameschemedialog.cpp
index eb223ce..450f835 100644
--- a/devices/filenameschemedialog.cpp
+++ b/devices/filenameschemedialog.cpp
@@ -118,13 +118,21 @@ static QString tableEntry(const QAbstractButton *widget)
void FilenameSchemeDialog::showHelp()
{
MessageBox::information(this,
- i18n("<p>The following variables will be replaced with their corresponding meaning for each track name.</p>")+
- QLatin1String("<p><table border=\"1\">")+
+ i18n("The following variables will be replaced with their corresponding meaning for each track name.")+
+ QLatin1String("<br/><br/>")+
+ #ifdef Q_OS_MAC
+ QLatin1String("<small>")+
+ #endif
+ QLatin1String("<table border=\"1\">")+
i18n("<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</em></th></tr>")+
tableEntry(albumArtist)+tableEntry(albumTitle)+tableEntry(composer)+tableEntry(trackArtist)+
tableEntry(trackTitle)+tableEntry(trackArtistAndTitle)+tableEntry(trackNo)+tableEntry(cdNo)+
tableEntry(year)+tableEntry(genre)+
- QLatin1String("</table></p>"));
+ QLatin1String("</table>")
+ #ifdef Q_OS_MAC
+ +QLatin1String("</small>")
+ #endif
+ );
}
void FilenameSchemeDialog::enableOkButton()
diff --git a/devices/fsdevice.cpp b/devices/fsdevice.cpp
index c7c3488..a3aa745 100644
--- a/devices/fsdevice.cpp
+++ b/devices/fsdevice.cpp
@@ -422,7 +422,8 @@ void FsDevice::addSong(const Song &s, bool overwrite, bool copyCover)
transcoding=true;
TranscodingJob *job=new TranscodingJob(encoder, opts.transcoderValue, s.file, currentDestFile, copyCover ? opts : DeviceOptions(Device::constNoCover),
(needToFixVa ? CopyJob::OptsApplyVaFix : CopyJob::OptsNone)|
- (Device::RemoteFs==devType() ? CopyJob::OptsFixLocal : CopyJob::OptsNone));
+ (Device::RemoteFs==devType() ? CopyJob::OptsFixLocal : CopyJob::OptsNone),
+ currentSong);
connect(job, SIGNAL(result(int)), SLOT(addSongResult(int)));
connect(job, SIGNAL(percent(int)), SLOT(percent(int)));
job->start();
@@ -507,8 +508,9 @@ void FsDevice::cleanDirs(const QSet<QString> &dirs)
job->start();
}
-void FsDevice::requestCover(const Song &s)
+Covers::Image FsDevice::requestCover(const Song &s)
{
+ Covers::Image i;
QString songFile=audioFolder+s.file;
QString dirName=Utils::getDir(songFile);
@@ -516,7 +518,7 @@ void FsDevice::requestCover(const Song &s)
QImage img(dirName+opts.coverName);
if (!img.isNull()) {
emit cover(s, img);
- return;
+ return Covers::Image(img, dirName+opts.coverName);
}
}
@@ -526,9 +528,10 @@ void FsDevice::requestCover(const Song &s)
if (!img.isNull()) {
emit cover(s, img);
- return;
+ return Covers::Image(img, dirName+fileName);
}
}
+ return Covers::Image();
}
void FsDevice::percent(int pc)
diff --git a/devices/fsdevice.h b/devices/fsdevice.h
index d54f93b..99b84f3 100644
--- a/devices/fsdevice.h
+++ b/devices/fsdevice.h
@@ -123,7 +123,7 @@ public:
void copySongTo(const Song &s, const QString &musicPath, bool overwrite, bool copyCover);
void removeSong(const Song &s);
void cleanDirs(const QSet<QString> &dirs);
- void requestCover(const Song &s);
+ Covers::Image requestCover(const Song &s);
QString cacheFileName() const;
virtual void setAudioFolder() const { }
void saveCache();
diff --git a/devices/mtpdevice.cpp b/devices/mtpdevice.cpp
index 2c18d2f..8057a3c 100644
--- a/devices/mtpdevice.cpp
+++ b/devices/mtpdevice.cpp
@@ -55,9 +55,11 @@
#include <unistd.h>
//#define TIME_MTP_OPERATIONS
#ifdef TIME_MTP_OPERATIONS
-#include <QDebug>
#include <QElapsedTimer>
#endif
+#include <QDebug>
+
+#define DBUG(CLASS) if (Covers::debugEnabled()) qWarning() << CLASS << __FUNCTION__
// Enable the following #define to have Cantata attempt to ascertain the AlbumArtist tag by
// looking at the file path
@@ -1208,11 +1210,14 @@ void MtpConnection::getCover(const Song &song)
{
File c=getCoverDetils(song);
+ DBUG("MtpConnection") << c.name << c.id;
+
if (0!=c.id) {
QByteArray data;
if (0==LIBMTP_Get_File_To_Handler(device, c.id, fileReceiver, &data, 0, 0)) {
QImage img;
if (img.loadFromData(data)) {
+ DBUG("MtpConnection") << "loaded cover";
emit cover(song, img);
}
}
@@ -1555,12 +1560,15 @@ void MtpDevice::cleanDirs(const QSet<QString> &dirs)
emit cleanMusicDirs(dirs);
}
-void MtpDevice::requestCover(const Song &song)
+Covers::Image MtpDevice::requestCover(const Song &song)
{
+ DBUG("MtpDevice") << song.file;
requestAbort(false);
if (isConnected()) {
+ DBUG("MtpDevice") << "Get cover from connection";
emit getCover(song);
}
+ return Covers::Image();
}
void MtpDevice::putSongStatus(int status, const QString &file, bool fixedVa, bool copiedCover)
diff --git a/devices/mtpdevice.h b/devices/mtpdevice.h
index c6a052e..76daca9 100644
--- a/devices/mtpdevice.h
+++ b/devices/mtpdevice.h
@@ -171,7 +171,7 @@ public:
void copySongTo(const Song &s, const QString &musicPath, bool overwrite, bool copyCover);
void removeSong(const Song &s);
void cleanDirs(const QSet<QString> &dirs);
- void requestCover(const Song &song);
+ Covers::Image requestCover(const Song &song);
double usedCapacity();
QString capacityString();
qint64 freeSpace();
diff --git a/devices/musicbrainz.cpp b/devices/musicbrainz.cpp
index bfeb671..e02d070 100644
--- a/devices/musicbrainz.cpp
+++ b/devices/musicbrainz.cpp
@@ -77,6 +77,10 @@ struct Track {
static QString calculateDiscId(const QList<Track> &tracks)
{
+ if (tracks.isEmpty()) {
+ return QString();
+ }
+
// Code based on libmusicbrainz/lib/diskid.cpp
int numTracks = tracks.count()-1;
QCryptographicHash sha(QCryptographicHash::Sha1);
@@ -369,23 +373,17 @@ void MusicBrainz::lookup(bool full)
}
}
}
- }
- catch (MusicBrainz5::CConnectionError &e) {
+ } catch (MusicBrainz5::CConnectionError &e) {
DBUG << "MusicBrainz error" << e.what();
- }
- catch (MusicBrainz5::CTimeoutError &e) {
+ } catch (MusicBrainz5::CTimeoutError &e) {
DBUG << "MusicBrainz error - %1" << e.what();
- }
- catch (MusicBrainz5::CAuthenticationError &e) {
+ } catch (MusicBrainz5::CAuthenticationError &e) {
DBUG << "MusicBrainz error - %1" << e.what();
- }
- catch (MusicBrainz5::CFetchError &e) {
+ } catch (MusicBrainz5::CFetchError &e) {
DBUG << "MusicBrainz error - %1" << e.what();
- }
- catch (MusicBrainz5::CRequestError &e) {
+ } catch (MusicBrainz5::CRequestError &e) {
DBUG << "MusicBrainz error - %1" << e.what();
- }
- catch (MusicBrainz5::CResourceNotFoundError &e) {
+ } catch (MusicBrainz5::CResourceNotFoundError &e) {
DBUG << "MusicBrainz error - %1" << e.what();
}
diff --git a/devices/remotedevicepropertiesdialog.cpp b/devices/remotedevicepropertiesdialog.cpp
index d409084..dc4e6d1 100644
--- a/devices/remotedevicepropertiesdialog.cpp
+++ b/devices/remotedevicepropertiesdialog.cpp
@@ -88,7 +88,7 @@ void RemoteDevicePropertiesDialog::slotButtonClicked(int button)
case Ok: {
RemoteFsDevice::Details d=remoteProp->details();
if (d.name!=remoteProp->origDetails().name && DevicesModel::self()->device(RemoteFsDevice::createUdi(d.name))) {
- MessageBox::error(this, i18n("A remote device named \"%1\" already exists!\nPlease choose a different name", d.name));
+ MessageBox::error(this, i18n("A remote device named '%1' already exists!\n\nPlease choose a different name.", d.name));
} else {
emit updatedSettings(devProp->settings(), remoteProp->details());
accept();
diff --git a/devices/remotedevicepropertieswidget.ui b/devices/remotedevicepropertieswidget.ui
index 30e42db..6a6fc39 100644
--- a/devices/remotedevicepropertieswidget.ui
+++ b/devices/remotedevicepropertieswidget.ui
@@ -12,15 +12,9 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QLabel" name="connectionNote">
+ <widget class="PlainNoteLabel" name="connectionNote">
<property name="text">
- <string><i><b>NOTE:</b> These settings are only editable when the device is not connected.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>These settings are only editable when the device is not connected.</string>
</property>
</widget>
</item>
@@ -161,15 +155,9 @@
</layout>
</item>
<item>
- <widget class="QLabel" name="label_4">
+ <widget class="PlainNoteLabel" name="label_4">
<property name="text">
- <string><i><b>NOTE:</b> If you enter a password here, it will be stored <b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the password before accessing the share, set the password to '-'</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you enter a password here, it will be stored <b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the password before accessing the share, set the password to '-'</string>
</property>
</widget>
</item>
@@ -264,9 +252,9 @@
</layout>
</item>
<item>
- <widget class="QLabel" name="label_4x">
+ <widget class="PlainNoteLabel" name="label_4x">
<property name="text">
- <string><i><b>NOTE:</b> If you enter a password here, it will be stored <b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the password before accessing the share, set the password to '-'</i></string>
+ <string>If you enter a password here, it will be stored <b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the password before accessing the share, set the password to '-'</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@@ -367,9 +355,9 @@
</layout>
</item>
<item>
- <widget class="QLabel" name="label_5">
+ <widget class="PlainNoteLabel" name="label_5">
<property name="text">
- <string><i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter the password.</i></string>
+ <string>Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter the password.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@@ -417,24 +405,9 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="infoLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <widget class="PlainNoteLabel" name="infoLabel">
<property name="text">
- <string><i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via Samba), or to access locally mounted folders. For normal media players, attached via USB, Cantata will automatically display the device when it is attached.</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>This dialog is only used to add remote devices (e.g. via Samba), or to access locally mounted folders. For normal media players, attached via USB, Cantata will automatically display the device when it is attached.</string>
</property>
</widget>
</item>
@@ -456,6 +429,11 @@
<extends>QLabel</extends>
<header>support/buddylabel.h</header>
</customwidget>
+ <customwidget>
+ <class>PlainNoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>type</tabstop>
diff --git a/devices/synccollectionwidget.cpp b/devices/synccollectionwidget.cpp
index d44490d..5e7c660 100644
--- a/devices/synccollectionwidget.cpp
+++ b/devices/synccollectionwidget.cpp
@@ -33,7 +33,7 @@
#include <QTimer>
#include <QAction>
-SyncCollectionWidget::SyncCollectionWidget(QWidget *parent, const QString &title, const QString &action, bool showCovers)
+SyncCollectionWidget::SyncCollectionWidget(QWidget *parent, const QString &title, const QString &action)
: QWidget(parent)
, performedSearch(false)
, searchTimer(0)
@@ -45,7 +45,6 @@ SyncCollectionWidget::SyncCollectionWidget(QWidget *parent, const QString &title
model=new MusicLibraryModel(this, false, true);
proxy=new MusicLibraryProxyModel(this);
- model->setUseAlbumImages(showCovers);
proxy->setSourceModel(model);
tree->setModel(proxy);
tree->setPageDefaults();
@@ -59,11 +58,11 @@ SyncCollectionWidget::SyncCollectionWidget(QWidget *parent, const QString &title
connect(search, SIGNAL(textChanged(const QString)), this, SLOT(delaySearchItems()));
copyAction=new Action(action, this);
- connect(copyAction, SIGNAL(triggered(bool)), SLOT(copySongs()));
+ connect(copyAction, SIGNAL(triggered()), SLOT(copySongs()));
checkAction=new Action(i18n("Check Items"), this);
- connect(checkAction, SIGNAL(triggered(bool)), SLOT(checkItems()));
+ connect(checkAction, SIGNAL(triggered()), SLOT(checkItems()));
unCheckAction=new Action(i18n("Uncheck Items"), this);
- connect(unCheckAction, SIGNAL(triggered(bool)), SLOT(unCheckItems()));
+ connect(unCheckAction, SIGNAL(triggered()), SLOT(unCheckItems()));
tree->addAction(copyAction);
QAction *sep=new QAction(this);
sep->setSeparator(true);
@@ -82,8 +81,8 @@ SyncCollectionWidget::SyncCollectionWidget(QWidget *parent, const QString &title
tree->addAction(collapse);
addAction(expand);
addAction(collapse);
- connect(expand, SIGNAL(triggered(bool)), this, SLOT(expandAll()));
- connect(collapse, SIGNAL(triggered(bool)), this, SLOT(collapseAll()));
+ connect(expand, SIGNAL(triggered()), this, SLOT(expandAll()));
+ connect(collapse, SIGNAL(triggered()), this, SLOT(collapseAll()));
}
connect(tree, SIGNAL(itemsSelected(bool)), checkAction, SLOT(setEnabled(bool)));
diff --git a/devices/synccollectionwidget.h b/devices/synccollectionwidget.h
index 604b176..2a45907 100644
--- a/devices/synccollectionwidget.h
+++ b/devices/synccollectionwidget.h
@@ -39,7 +39,7 @@ class SyncCollectionWidget : public QWidget, Ui::SyncCollectionWidget
Q_OBJECT
public:
- SyncCollectionWidget(QWidget *parent, const QString &title, const QString &action, bool showCovers=true);
+ SyncCollectionWidget(QWidget *parent, const QString &title, const QString &action);
virtual ~SyncCollectionWidget();
void update(const QSet<Song> &songs) { model->update(songs); }
diff --git a/devices/syncdialog.cpp b/devices/syncdialog.cpp
index a5c7812..1acd44e 100644
--- a/devices/syncdialog.cpp
+++ b/devices/syncdialog.cpp
@@ -99,8 +99,8 @@ SyncDialog::SyncDialog(QWidget *parent)
iCount++;
QSplitter *splitter=new QSplitter(this);
- libWidget=new SyncCollectionWidget(splitter, i18n("Songs Only In Library:"), i18n("Copy To Device"), false);
- devWidget=new SyncCollectionWidget(splitter, i18n("Songs Only On Device:"), i18n("Copy To Library"), false);
+ libWidget=new SyncCollectionWidget(splitter, i18n("Songs Only In Library:"), i18n("Copy To Device"));
+ devWidget=new SyncCollectionWidget(splitter, i18n("Songs Only On Device:"), i18n("Copy To Library"));
setMainWidget(splitter);
setButtons(Close);
setAttribute(Qt::WA_DeleteOnClose);
diff --git a/devices/transcodingjob.cpp b/devices/transcodingjob.cpp
index 0ede588..5a5f47e 100644
--- a/devices/transcodingjob.cpp
+++ b/devices/transcodingjob.cpp
@@ -71,7 +71,7 @@ void TranscodingJob::stop()
void TranscodingJob::finished(int exitCode, QProcess::ExitStatus exitStatus)
{
- Q_UNUSED(exitStatus);
+ Q_UNUSED(exitStatus)
if (!process) {
return;
}
diff --git a/dynamic/cantata-dynamic b/dynamic/cantata-dynamic
index abcf82a..eca1bca 100755
--- a/dynamic/cantata-dynamic
+++ b/dynamic/cantata-dynamic
@@ -198,6 +198,12 @@ sub getEntries() {
}
sub baseDir() {
+ if ($^O eq "darwin") {
+ # MacOSX
+ return "$ENV{'HOME'}/Library/Caches/cantata/cantata/dynamic";
+ }
+
+ # Linux
my $cacheDir=$ENV{'XDG_CACHE_HOME'};
if (!$cacheDir) {
$cacheDir="$ENV{'HOME'}/.cache";
@@ -249,12 +255,24 @@ $lastIncludeRules;
$lastExcludeRules;
$initialRead=1;
$rulesTimestamp=0;
+$numMpdSongs=0;
+
+$ratingFrom=0;
+$ratingTo=0;
+# If we have no include rules, then song list is taken from tracks with ratings
+# Therefore, there is no need to subsequently filter - and ratingFilter woudl be
+# set to 0
+$ratingFilter=1;
+$lastRatingFrom=0;
+$lastRatingTo=0;
# Determine if rules file has been updated
sub checkRulesChanged() {
if ($initialRead==1) { # Always changed on first run...
$rulesChanged=1;
$initialRead=0;
+ } elsif ($lastRatingFrom!=$ratingFrom || $lastRatingTo!=$ratingTo) {
+ $rulesChanged=1;
} elsif ( scalar(@lastIncludeRules)!=scalar(@includeRules) ||
scalar(@lastExcludeRules)!=scalar(@excludeRules)) { # Different number of rules
$rulesChanged=1;
@@ -339,6 +357,7 @@ sub saveRule() {
#
# File format:
#
+# Rating:<Range>
# Rule
# <Tag>:<Value>
# <Tag>:<Value>
@@ -346,6 +365,7 @@ sub saveRule() {
#
# e.g.
#
+# Rating:1-5
# Rule
# AlbumArtist:Various Artists
# Genre:Dance
@@ -390,6 +410,8 @@ sub readRules() {
my $currentRule="";
@includeRules=();
@excludeRules=();
+ $ratingFrom=0;
+ $ratingTo=0;
close($fileHandle);
foreach my $line (@lines) {
if (! ($line=~ m/^(#)/)) {
@@ -411,12 +433,23 @@ sub readRules() {
@dates=();
@similarArtists=();
@genres=();
+ } elsif ($key=~ m/^(Rating)/) {
+ my @vals = split("-", $val);
+ if (scalar(@vals)==2) {
+ $ratingFrom=int($vals[0]);
+ $ratingTo=int($vals[1]);
+ if ($ratingFrom > $ratingTo) {
+ my $tmp=$ratingFrom;
+ $ratingFrom=$ratingTo;
+ $ratingTo=$tmp;
+ }
+ }
} else {
if ($key eq "Date") {
my @dateVals = split("-", $val);
if (scalar(@dateVals)==2) {
- my $fromDate=scalar($dateVals[0]);
- my $toDate=scalar($dateVals[1]);
+ my $fromDate=int($dateVals[0]);
+ my $toDate=int($dateVals[1]);
if ($fromDate > $toDate) { # Fix dates if from>to!!!
my $tmp=$fromDate;
$fromDate=$toDate;
@@ -461,7 +494,7 @@ sub readRules() {
@mpdArtists=uniq(@mpdArtists);
- # Now chec which last.fm artists MPD actually has...
+ # Now check which last.fm artists MPD actually has...
my $pos=0;
foreach my $artist (@artistSearchResults) {
my @match = grep(/^$artist/i, @mpdArtists);
@@ -494,7 +527,8 @@ sub readRules() {
foreach my $rule (@excludeRules) {
print "${rule}\n";
}
- print "---------------------\n"
+ print "---------------------\n";
+ print "RATING: ${ratingFrom} -> ${ratingTo}\n";
}
&checkRulesChanged();
@@ -515,10 +549,16 @@ sub sendMessage() {
my $method=shift;
my $argument=shift;
if (0==$isServerMode) {
- system("qdbus com.googlecode.cantata /cantata ${method} ${argument}");
- if ( $? == -1 ) {
- # Maybe qdbus is not installed? Try dbus-send...
- system("dbus-send --type=method_call --session --dest=com.googlecode.cantata /cantata com.googlecode.cantata.${method} string:${argument}");
+ if ($^O eq "darwin") {
+ # MacOSX
+ # TODO: How to send a dbus (or other) message to Cantata application????
+ } else {
+ # Linux
+ system("qdbus com.googlecode.cantata /cantata ${method} ${argument}");
+ if ( $? == -1 ) {
+ # Maybe qdbus is not installed? Try dbus-send...
+ system("dbus-send --type=method_call --session --dest=com.googlecode.cantata /cantata com.googlecode.cantata.${method} string:${argument}");
+ }
}
} else {
my $clientId=shift;
@@ -533,10 +573,81 @@ sub sendMessage() {
}
}
+# Parse sticker value, and check that its in range.
+sub songRatingInRange() {
+ my $stickerEntry=shift;
+ my @parts = split("=", $stickerEntry);
+ if (2==scalar(@parts)) {
+ my $rating=scalar($parts[1]);
+ if ($rating >= $ratingFrom && $rating <= $ratingTo) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+# Get all songs with a rating between ratingFrom & ratingTo
+sub getRatedSongs() {
+ my @entries = ();
+ my $data=&sendCommand("sticker find song / rating");
+ if (defined($data)) {
+ my @lines=split('\n', $data);
+ my $file="";
+ foreach my $line (@lines) {
+ if ($line=~ m/^(file\:)/) {
+ my $sep = index($line, ':');
+ if ($sep>0) {
+ $file=substr($line, $sep+2, length($line)-($sep+1));
+ }
+ } elsif ($line=~ m/^(sticker\:)/) {
+ my $sep = index($line, ':');
+ if ($sep>0) {
+ my $entry=substr($line, $sep+2, length($line)-($sep+1));
+ if (1==&songRatingInRange($entry)) {
+ push (@entries, $file);
+ }
+ }
+ }
+ }
+ }
+ return @entries;
+}
+
+# Is a file with rating from .. rating to?
+sub checkSongRatingInRange() {
+ if ($ratingFilter = 0) {
+ # Rating filter disabled - i,e. had no include rule, so song list is
+ # taken from those with a rating...
+ return 1;
+ }
+ if ($ratingFrom<=0 && $ratingTo<=0) { # No filter, so must be in range!
+ return 1;
+ }
+ if ($numMpdSongs<1) { # No songs!
+ return 0;
+ }
+ my $file=shift;
+ my @entries = &getEntries("sticker get song \"${file}\" rating", 'sticker');
+ foreach my $entry (@entries) {
+ if (1==&songRatingInRange($entry)) {
+ return 1;
+ }
+ }
+ # Song is not within range, so 'blank' its name out of list
+ my $pos=shift;
+ if (1==$testMode) {
+ print "$file is NOT in rating range - remove:${pos} total:${numMpdSongs}!\n";
+ }
+ splice @mpdSongs, $pos, 1;
+ $numMpdSongs--;
+ return 0;
+}
+
# Use rules to obtain a list of songs from MPD...
sub getSongs() {
# If we have no current songs, or rules have changed, or MPD has been updated - then we need to run the rules against MPD to get song list...
if (scalar(@mpdSongs)<1 || $rulesChanged==1 || $mpdDbUpdated==1) {
+ $numMpdSongs=0;
my @excludeSongs=();
if (scalar(@excludeRules)>0) {
# Get list of songs that should be removed from the song list...
@@ -566,6 +677,15 @@ sub getSongs() {
}
@mpdSongs=uniq(@mpdSongs);
}
+ } elsif ($ratingTo>=1 && $ratingFrom>=0) {
+ if (1==$testMode) { print "No include rules, so get all songs in rating range ${ratingFrom}..${ratingTo}...\n"; }
+ my @songs = &getRatedSongs();
+ foreach my $song (@songs) {
+ if (! $excludeSongSet{$song}) {
+ $mpdSongs[$mpdSong]=$song;
+ $mpdSong++;
+ }
+ }
} else {
if (1==$testMode) { print "No include rules, so get all songs...\n"; }
# No 'include' rules => get all songs! Do this by getting all Artists, and then all songs by each...
@@ -601,6 +721,7 @@ sub getSongs() {
}
print "---------------------\n"
}
+ $numMpdSongs=scalar(@mpdSongs);
}
}
@@ -738,33 +859,48 @@ sub populatePlayQueue() {
&readRules();
&getSongs();
- my $numMpdSongs=scalar(@mpdSongs);
if ($numMpdSongs>0) {
# fill up playlist to 10 random tunes
my $failues=0;
my $added=0;
- while ($playQueueLength < $PLAY_QUEUE_DESIRED_LENGTH) {
+ while ($playQueueLength < $PLAY_QUEUE_DESIRED_LENGTH && $numMpdSongs>0) {
my $pos=int(rand($numMpdSongs));
- if ($failues > 100 || &canAdd(${mpdSongs[$pos]}, $numMpdSongs)) {
- my $file=${mpdSongs[$pos]};
- $file =~ s/\\/\\\\/g;
- $file =~ s/\"/\\\"/g;
- if (&sendCommand("add \"${file}\"") ne '') {
- &storeSong(${mpdSongs[$pos]});
- $playQueueLength++;
- $failues=0;
- $added++;
+ my $origFile=${mpdSongs[$pos]};
+ my $file=$origFile;
+ $file =~ s/\\/\\\\/g;
+ $file =~ s/\"/\\\"/g;
+
+ if (&checkSongRatingInRange($file, $pos)) {
+ if ($failues > 100 || &canAdd($origFile, $numMpdSongs)) {
+ if (&sendCommand("add \"${file}\"") ne '') {
+ &storeSong($origFile);
+ $playQueueLength++;
+ $failues=0;
+ $added++;
+ }
+ } else { # Song is already in playqueue history...
+ $failues++;
}
- } else { # Song is already in playqueue history...
- $failues++;
}
}
# If we are not currently playing and we filled playqueue - then play first!
- if ($isPlaying==0 && $added==$PLAY_QUEUE_DESIRED_LENGTH) {
+ if ($numMpdSongs>0 && $isPlaying==0 && $added==$PLAY_QUEUE_DESIRED_LENGTH) {
&sendCommand("play 0")
}
}
- &waitForEvent();
+
+ if ($numMpdSongs>0) {
+ &waitForEvent();
+ } else {
+ if (1==$isServerMode) {
+ $currentStatus="NO_SONGS";
+ $dynamicIsActive=0;
+ &sendStatus();
+ } else {
+ &sendMessage("showError", "NO_SONGS");
+ exit(0);
+ }
+ }
} elsif (0==$isServerMode) {
sleep 2;
}
diff --git a/dynamic/dynamic.cpp b/dynamic/dynamic.cpp
index bf7d390..c6f640c 100644
--- a/dynamic/dynamic.cpp
+++ b/dynamic/dynamic.cpp
@@ -141,9 +141,12 @@ const QString Dynamic::constAlbumKey=QLatin1String("Album");
const QString Dynamic::constTitleKey=QLatin1String("Title");
const QString Dynamic::constGenreKey=QLatin1String("Genre");
const QString Dynamic::constDateKey=QLatin1String("Date");
+const QString Dynamic::constRatingKey=QLatin1String("Rating");
const QString Dynamic::constExactKey=QLatin1String("Exact");
const QString Dynamic::constExcludeKey=QLatin1String("Exclude");
+const QChar Dynamic::constRangeSep=QLatin1Char('-');
+const QChar constKeyValSep=QLatin1Char(':');
const QString constOk=QLatin1String("0");
const QString constFilename=QLatin1String("FILENAME:");
@@ -206,13 +209,17 @@ QVariant Dynamic::data(const QModelIndex &index, int role) const
}
switch (role) {
- case Qt::DisplayRole:
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
+ case Qt::DisplayRole:
return entryList.at(index.row()).name;
case Qt::DecorationRole:
return IS_ACTIVE(entryList.at(index.row()).name) ? QIcon::fromTheme("media-playback-start") : Icons::self()->dynamicRuleIcon;
case Cantata::Role_SubText: {
- return Plurals::rules(entryList.at(index.row()).rules.count());
+ const Entry &e=entryList.at(index.row());
+ return Plurals::rules(e.rules.count())+(e.haveRating() ? i18n(" - Rating: %1..%2", (double)e.ratingFrom/Song::Rating_Step, (double)e.ratingTo/Song::Rating_Step) : QString());
}
case Cantata::Role_Actions: {
QVariant v;
@@ -252,13 +259,16 @@ bool Dynamic::save(const Entry &e)
QString string;
QTextStream str(&string);
+ if (e.ratingFrom!=0 || e.ratingTo!=0) {
+ str << constRatingKey << constKeyValSep << e.ratingFrom << constRangeSep << e.ratingTo<< '\n';
+ }
foreach (const Rule &rule, e.rules) {
if (!rule.isEmpty()) {
str << constRuleKey << '\n';
Rule::ConstIterator it(rule.constBegin());
Rule::ConstIterator end(rule.constEnd());
for (; it!=end; ++it) {
- str << it.key() << ':' << it.value() << '\n';
+ str << it.key() << constKeyValSep << it.value() << '\n';
}
}
}
@@ -529,8 +539,8 @@ void Dynamic::loadLocal()
foreach (const QString &rf, rulesFiles) {
QFile f(dirName+rf);
if (f.open(QIODevice::ReadOnly|QIODevice::Text)) {
- QStringList keys=QStringList() << constArtistKey << constSimilarArtistsKey << constAlbumArtistKey << constDateKey << constExactKey
- << constAlbumKey << constTitleKey << constGenreKey << constExcludeKey;
+ QStringList keys=QStringList() << constArtistKey << constSimilarArtistsKey << constAlbumArtistKey << constDateKey
+ << constExactKey << constAlbumKey << constTitleKey << constGenreKey << constExcludeKey;
Entry e;
e.name=rf.left(rf.length()-constExtension.length());
@@ -550,9 +560,15 @@ void Dynamic::loadLocal()
e.rules.append(r);
r.clear();
}
+ } else if (str.startsWith(constRatingKey+constKeyValSep)) {
+ QStringList vals=str.mid(constRatingKey.length()+1).split(constRangeSep);
+ if (2==vals.count()) {
+ e.ratingFrom=vals.at(0).toUInt();
+ e.ratingTo=vals.at(1).toUInt();
+ }
} else {
foreach (const QString &k, keys) {
- if (str.startsWith(k+':')) {
+ if (str.startsWith(k+constKeyValSep)) {
r.insert(k, str.mid(k.length()+1));
}
}
@@ -575,8 +591,8 @@ void Dynamic::parseRemote(const QStringList &response)
beginResetModel();
entryList.clear();
currentEntry=QString();
- QStringList keys=QStringList() << constArtistKey << constSimilarArtistsKey << constAlbumArtistKey << constDateKey << constExactKey
- << constAlbumKey << constTitleKey << constGenreKey << constExcludeKey;
+ QStringList keys=QStringList() << constArtistKey << constSimilarArtistsKey << constAlbumArtistKey << constDateKey
+ << constExactKey << constAlbumKey << constTitleKey << constGenreKey << constExcludeKey;
Entry e;
Rule r;
@@ -595,6 +611,7 @@ void Dynamic::parseRemote(const QStringList &response)
entryList.append(e);
}
e.name=str.mid(9, str.length()-15); // Remove extension...
+ e.ratingFrom=e.ratingTo=0;
e.rules.clear();
r.clear();
} else if (str==constRuleKey) {
@@ -602,9 +619,15 @@ void Dynamic::parseRemote(const QStringList &response)
e.rules.append(r);
r.clear();
}
+ } else if (str.startsWith(constRatingKey+constKeyValSep)) {
+ QStringList vals=str.mid(constRatingKey.length()+1).split(constRangeSep);
+ if (2==vals.count()) {
+ e.ratingFrom=vals.at(0).toUInt();
+ e.ratingTo=vals.at(1).toUInt();
+ }
} else {
foreach (const QString &k, keys) {
- if (str.startsWith(k+':')) {
+ if (str.startsWith(k+constKeyValSep)) {
r.insert(k, str.mid(k.length()+1));
}
}
diff --git a/dynamic/dynamic.h b/dynamic/dynamic.h
index 9a4be54..92061e0 100644
--- a/dynamic/dynamic.h
+++ b/dynamic/dynamic.h
@@ -56,10 +56,13 @@ public:
typedef QMap<QString, QString> Rule;
struct Entry {
- Entry(const QString &n=QString()) : name(n) { }
+ Entry(const QString &n=QString()) : name(n), ratingFrom(0), ratingTo(0) { }
bool operator==(const Entry &o) const { return name==o.name; }
+ bool haveRating() const { return ratingFrom>=0 && ratingTo>0; }
QString name;
QList<Rule> rules;
+ int ratingFrom;
+ int ratingTo;
};
static Dynamic * self();
@@ -74,8 +77,10 @@ public:
static const QString constTitleKey;
static const QString constGenreKey;
static const QString constDateKey;
+ static const QString constRatingKey;
static const QString constExactKey;
static const QString constExcludeKey;
+ static const QChar constRangeSep;
Dynamic();
virtual ~Dynamic() { }
diff --git a/dynamic/dynamicpage.cpp b/dynamic/dynamicpage.cpp
index 20f4fc4..a74f69c 100644
--- a/dynamic/dynamicpage.cpp
+++ b/dynamic/dynamicpage.cpp
@@ -136,7 +136,7 @@ void DynamicPage::remove()
QModelIndexList selected=view->selectedIndexes();
if (selected.isEmpty() ||
- MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove the selected rules?\nThis cannot be undone."),
+ MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove the selected rules?\n\nThis cannot be undone."),
i18n("Remove Dynamic Rules"), StdGuiItem::remove(), StdGuiItem::cancel())) {
return;
}
diff --git a/dynamic/dynamicrule.ui b/dynamic/dynamicrule.ui
index 5dba317..dfb1610 100644
--- a/dynamic/dynamicrule.ui
+++ b/dynamic/dynamicrule.ui
@@ -223,66 +223,16 @@
<widget class="QLabel" name="errorLabel"/>
</item>
<item>
- <spacer name="verticalSpacer_3xz">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label_7">
+ <widget class="NoteLabel" name="label_7">
<property name="text">
- <string><i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Only enter values for the tags you wish to be search on.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_3x">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label_7x">
+ <widget class="NoteLabel" name="label_7x">
<property name="text">
- <string><i><b>NOTE</b> For genre, end string with an asterisk to match various genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>For genre, end string with an asterisk to match various genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'.</string>
</property>
</widget>
</item>
@@ -311,6 +261,11 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
+ <class>NoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
<class>LineEdit</class>
<extends>QLineEdit</extends>
<header>support/lineedit.h</header>
diff --git a/dynamic/dynamicruledialog.cpp b/dynamic/dynamicruledialog.cpp
index de3226f..460224c 100644
--- a/dynamic/dynamicruledialog.cpp
+++ b/dynamic/dynamicruledialog.cpp
@@ -27,7 +27,6 @@
static const int constMinDate=1800;
static const int constMaxDate=2100;
-static const QChar constDateSep('-');
DynamicRuleDialog::DynamicRuleDialog(QWidget *parent)
: Dialog(parent)
@@ -125,7 +124,7 @@ bool DynamicRuleDialog::edit(const Dynamic::Rule &rule, bool isAdd)
int dateFrom=0;
int dateTo=0;
if (!date.isEmpty()) {
- int idx=date.indexOf(constDateSep);
+ int idx=date.indexOf(Dynamic::constRangeSep);
if (-1==idx) {
dateFrom=date.toInt();
} else {
@@ -184,7 +183,7 @@ Dynamic::Rule DynamicRuleDialog::rule() const
bool haveTo=dateTo>=constMinDate && dateTo<=constMaxDate && dateTo!=dateFrom;
if (haveFrom && haveTo) {
- r.insert(Dynamic::constDateKey, QString::number(dateFrom)+constDateSep+QString::number(dateTo));
+ r.insert(Dynamic::constDateKey, QString::number(dateFrom)+Dynamic::constRangeSep+QString::number(dateTo));
} else if (haveFrom) {
r.insert(Dynamic::constDateKey, QString::number(dateFrom));
} else if (haveTo) {
diff --git a/dynamic/dynamicrules.ui b/dynamic/dynamicrules.ui
index 798cbf3..6c432d3 100644
--- a/dynamic/dynamicrules.ui
+++ b/dynamic/dynamicrules.ui
@@ -81,7 +81,44 @@
</property>
</spacer>
</item>
- <item row="4" column="0">
+ <item row="4" column="0" rowspan="1" colspan="2">
+ <layout class="QHBoxLayout" name="ratingsGroupBoxLayout">
+ <item>
+ <widget class="QLabel" name="ratingRangeLabel">
+ <property name="text">
+ <string>Song with ratings between:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="RatingWidget" name="ratingFrom"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="ratingToLabel">
+ <property name="text">
+ <string> - </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="RatingWidget" name="ratingTo"/>
+ </item>
+ <item>
+ <spacer name="ratingSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>2</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="5" column="0">
<widget class="UrlLabel" name="aboutLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
@@ -94,7 +131,7 @@
</property>
</widget>
</item>
- <item row="4" column="1" colspan="2">
+ <item row="5" column="1" colspan="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -134,6 +171,11 @@
<header>support/messagewidget.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>RatingWidget</class>
+ <extends>QWidget</extends>
+ <header>widgets/ratingwidget.h</header>
+ </customwidget>
</customwidgets>
<resources/>
<connections/>
diff --git a/dynamic/dynamicrulesdialog.cpp b/dynamic/dynamicrulesdialog.cpp
index ad42824..508daa4 100644
--- a/dynamic/dynamicrulesdialog.cpp
+++ b/dynamic/dynamicrulesdialog.cpp
@@ -188,6 +188,8 @@ void DynamicRulesDialog::edit(const QString &name)
model->setItem(model->rowCount(), 0, item);
}
origName=name;
+ ratingFrom->setValue(e.ratingFrom);
+ ratingTo->setValue(e.ratingTo);
show();
}
@@ -289,16 +291,20 @@ void DynamicRulesDialog::remove()
void DynamicRulesDialog::showAbout()
{
MessageBox::information(this,
+ #ifdef Q_OS_MAC
+ i18n("About dynamic rules")+QLatin1String("<br/><br/>")+
+ #endif
i18n("<p>Cantata will query your library using all of the rules listed. "
"The list of <i>Include</i> rules will be used to build a set of songs that can be used. "
"The list of <i>Exclude</i> rules will be used to build a set of songs that cannot be used. "
- "If there are no <i>Include</i> rules, Cantata will assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>"
- "e.g. to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', you would need the following: "
+ "If there are no <i>Include</i> rules, Cantata will assume that all songs (bar those from <i>Exclude</i>) can be used.</p>"
+ "<p>e.g. to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', you would need the following: "
"<ul><li>Include AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> "
"To have Cantata look for 'Songs by Wibble but not from album Abc', you would need the following: "
- "<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>"
+ "<ul><li>Include AlbumArtist=Wibble</li><li>Exclude AlbumArtist=Wibble Album=Abc</li></ul>"
"After the set of usable songs has been created, Cantata will randomly select songs to "
- "keep the play queue filled with 10 entries.</p>")
+ "keep the play queue filled with 10 entries. If a range of ratings has been specified, then "
+ "only songs with a rating within this range will be used.</p>")
);
}
@@ -326,13 +332,18 @@ bool DynamicRulesDialog::save()
}
if (name!=origName && Dynamic::self()->exists(name) &&
- MessageBox::No==MessageBox::warningYesNo(this, i18n("A set of rules named \'%1\' already exists!\nOverwrite?", name),
+ MessageBox::No==MessageBox::warningYesNo(this, i18n("A set of rules named '%1' already exists!\n\nOverwrite?", name),
i18n("Overwrite Rules"), StdGuiItem::overwrite(), StdGuiItem::cancel())) {
return false;
}
Dynamic::Entry entry;
entry.name=name;
+ int from=ratingFrom->value();
+ int to=ratingTo->value();
+ entry.ratingFrom=qMin(from, to);
+ entry.ratingTo=qMax(from, to);
+
for (int i=0; i<model->rowCount(); ++i) {
QStandardItem *itm=model->item(i);
if (itm) {
@@ -347,7 +358,6 @@ bool DynamicRulesDialog::save()
}
}
-
bool saved=Dynamic::self()->save(entry);
if (Dynamic::self()->isRemote()) {
diff --git a/dynamic/init/cantata-dynamic.systemd b/dynamic/init/cantata-dynamic.systemd
index 8e607fe..53ebc41 100755
--- a/dynamic/init/cantata-dynamic.systemd
+++ b/dynamic/init/cantata-dynamic.systemd
@@ -1,12 +1,16 @@
[Unit]
Description=Cantata Dynamic Server
+Wants=mpd.service
+After=mpd.service
[Service]
-User=root
+User=mpd
+Group=audio
Type=forking
ExecStart=/usr/share/cantata/scripts/cantata-dynamic server /etc/cantata-dynamic.conf
ExecStop=/usr/share/cantata/scripts/cantata-dynamic stopserver /etc/cantata-dynamic.conf
-PIDFile=/var/run/cantata-dynamic/pid
+RuntimeDirectory=cantata-dynamic
+PIDFile=/run/cantata-dynamic/pid
[Install]
WantedBy=multi-user.target
diff --git a/gui/albumspage.cpp b/gui/albumspage.cpp
index 887dfa6..dc333bd 100644
--- a/gui/albumspage.cpp
+++ b/gui/albumspage.cpp
@@ -41,7 +41,6 @@ AlbumsPage::AlbumsPage(QWidget *p)
replacePlayQueue->setDefaultAction(StdActions::self()->replacePlayQueueAction);
view->addAction(StdActions::self()->addToPlayQueueAction);
- view->addAction(StdActions::self()->addRandomToPlayQueueAction);
view->addAction(StdActions::self()->replacePlayQueueAction);
view->addAction(StdActions::self()->addWithPriorityAction);
view->addAction(StdActions::self()->addToStoredPlaylistAction);
@@ -56,9 +55,7 @@ AlbumsPage::AlbumsPage(QWidget *p)
#endif
view->addAction(StdActions::self()->setCoverAction);
#ifdef ENABLE_DEVICES_SUPPORT
- QAction *sep=new QAction(this);
- sep->setSeparator(true);
- view->addAction(sep);
+ view->addSeparator();
view->addAction(StdActions::self()->deleteSongsAction);
#endif
#endif // TAGLIB_FOUND
@@ -74,10 +71,10 @@ AlbumsPage::AlbumsPage(QWidget *p)
connect(view, SIGNAL(itemsSelected(bool)), this, SLOT(controlActions()));
connect(view, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(itemDoubleClicked(const QModelIndex &)));
connect(view, SIGNAL(rootIndexSet(QModelIndex)), this, SLOT(updateGenres(QModelIndex)));
- connect(MPDConnection::self(), SIGNAL(updatingLibrary()), this, SLOT(showSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatedLibrary()), this, SLOT(hideSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatingDatabase()), this, SLOT(showSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatedDatabase()), this, SLOT(hideSpinner()));
+ connect(MPDConnection::self(), SIGNAL(updatingLibrary()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatedLibrary()), view, SLOT(updated()));
+ connect(MPDConnection::self(), SIGNAL(updatingDatabase()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatedDatabase()), view, SLOT(updated()));
view->load(metaObject()->className());
}
@@ -86,13 +83,6 @@ AlbumsPage::~AlbumsPage()
view->save(metaObject()->className());
}
-void AlbumsPage::setView(int v)
-{
- setItemSize(v);
- view->setMode((ItemView::Mode)v);
- AlbumsModel::self()->setIconMode(ItemView::Mode_IconTop==v);
-}
-
void AlbumsPage::showEvent(QShowEvent *e)
{
view->focusView();
@@ -105,70 +95,13 @@ void AlbumsPage::clear()
view->update();
}
-void AlbumsPage::setItemSize(int v)
-{
- if (ItemView::Mode_IconTop!=v) {
- AlbumsModel::setItemSize(QSize(0, 0));
- } else {
- QFontMetrics fm(font());
-
- int size=AlbumsModel::iconSize();
- QSize grid(size+8, size+(fm.height()*2.5));
- view->setGridSize(grid);
- AlbumsModel::setItemSize(grid-QSize(4, 4));
- }
-}
-
-QStringList AlbumsPage::selectedFiles(bool allowPlaylists, bool randomAlbums) const
+QStringList AlbumsPage::selectedFiles(bool allowPlaylists) const
{
QModelIndexList selected = view->selectedIndexes();
if (selected.isEmpty()) {
return QStringList();
}
- bool filteredOnly=proxy.enabled() && Settings::self()->filteredOnly();
- QModelIndexList mapped=proxy.mapToSource(selected, filteredOnly);
- if (randomAlbums) {
- if (filteredOnly) {
- QMap<quint32, QModelIndexList> albums;
- foreach (const QModelIndex &idx, mapped) {
- if (idx.parent().isValid()) {
- albums[idx.parent().row()].append(idx);
- }
- }
- QList<quint32> keys=albums.keys();
- if (keys.isEmpty()) {
- return QStringList();
- } else if (1==keys.count()) {
- mapped=albums.begin().value();
- } else {
- mapped.clear();
- while (!keys.isEmpty()) {
- mapped.append(albums[keys.takeAt(Utils::random(keys.count()))]);
- }
- }
- } else {
- QModelIndexList albumIndexes;
- foreach (const QModelIndex &idx, mapped) {
- if (static_cast<AlbumsModel::Item *>(idx.internalPointer())->isAlbum()) {
- albumIndexes.append(idx);
- }
- }
-
- if (albumIndexes.isEmpty()) {
- return QStringList();
- }
-
- if (1==albumIndexes.count()) {
- mapped=albumIndexes;
- } else {
- mapped.clear();
- while (!albumIndexes.isEmpty()) {
- mapped.append(albumIndexes.takeAt(Utils::random(albumIndexes.count())));
- }
- }
- }
- }
- return AlbumsModel::self()->filenames(mapped, allowPlaylists);
+ return AlbumsModel::self()->filenames(proxy.mapToSource(selected, proxy.enabled() && Settings::self()->filteredOnly()), allowPlaylists);
}
QList<Song> AlbumsPage::selectedSongs(bool allowPlaylists) const
@@ -193,9 +126,9 @@ Song AlbumsPage::coverRequest() const
return Song();
}
-void AlbumsPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void AlbumsPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- QStringList files=selectedFiles(name.isEmpty(), randomAlbums);
+ QStringList files=selectedFiles(name.isEmpty());
if (!files.isEmpty()) {
if (name.isEmpty()) {
@@ -223,7 +156,7 @@ void AlbumsPage::deleteSongs()
QList<Song> songs=selectedSongs();
if (!songs.isEmpty()) {
- if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\nThis cannot be undone."),
+ if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\n\nThis cannot be undone."),
i18n("Delete Songs"), StdGuiItem::del(), StdGuiItem::cancel())) {
emit deleteSongs(QString(), songs);
}
@@ -281,27 +214,4 @@ void AlbumsPage::controlActions()
#endif
#endif // TAGLIB_FOUND
StdActions::self()->setCoverAction->setEnabled(1==selected.count() && static_cast<AlbumsModel::Item *>(proxy.mapToSource(selected.at(0)).internalPointer())->isAlbum());
-
- bool allowRandomAlbum=!selected.isEmpty();
- if (allowRandomAlbum) {
- foreach (const QModelIndex &idx, selected) {
- if (!static_cast<AlbumsModel::Item *>(proxy.mapToSource(idx).internalPointer())->isAlbum()) {
- allowRandomAlbum=false;
- break;
- }
- }
- }
- StdActions::self()->addRandomToPlayQueueAction->setEnabled(allowRandomAlbum);
-}
-
-void AlbumsPage::showSpinner()
-{
- view->showSpinner();
- view->showMessage(i18n("Updating..."), -1);
-}
-
-void AlbumsPage::hideSpinner()
-{
- view->hideSpinner();
- view->showMessage(QString(), 0);
}
diff --git a/gui/albumspage.h b/gui/albumspage.h
index 630f3da..6ba9563 100644
--- a/gui/albumspage.h
+++ b/gui/albumspage.h
@@ -40,19 +40,20 @@ public:
virtual ~AlbumsPage();
void clear();
- QStringList selectedFiles(bool allowPlaylists=false, bool randomAlbums=false) const;
+ QStringList selectedFiles(bool allowPlaylists=false) const;
QList<Song> selectedSongs(bool allowPlaylists=false) const;
Song coverRequest() const;
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
#ifdef ENABLE_DEVICES_SUPPORT
void addSelectionToDevice(const QString &udi);
void deleteSongs();
#endif
- void setView(int v);
+ void setView(int v) { view->setMode((ItemView::Mode)v); }
ItemView::Mode viewMode() const { return view->viewMode(); }
void focusSearch() { view->focusSearch(); }
void goTop() { view->goToTop(); }
void showEvent(QShowEvent *e);
+ void resort() { proxy.resort(); }
private:
void setItemSize(int v);
@@ -70,8 +71,6 @@ public Q_SLOTS:
void controlActions();
void searchItems();
void updateGenres(const QModelIndex &);
- void showSpinner();
- void hideSpinner();
private:
AlbumsProxyModel proxy;
diff --git a/gui/application.cpp b/gui/application.cpp
index dbfe4dd..6cf6301 100644
--- a/gui/application.cpp
+++ b/gui/application.cpp
@@ -35,7 +35,6 @@
#include "widgets/itemview.h"
#include "widgets/groupedview.h"
#include "widgets/actionitemdelegate.h"
-#include "models/musiclibraryitemalbum.h"
void Application::initObjects()
{
@@ -57,5 +56,4 @@ void Application::initObjects()
FancyTabWidget::setup();
GroupedView::setup();
ActionItemDelegate::setup();
- MusicLibraryItemAlbum::setup();
}
diff --git a/gui/application_kde.cpp b/gui/application_kde.cpp
index 1630dfe..6e62945 100644
--- a/gui/application_kde.cpp
+++ b/gui/application_kde.cpp
@@ -33,6 +33,11 @@ Application::Application(Display *display, Qt::HANDLE visual, Qt::HANDLE colorma
: KUniqueApplication(display, visual, colormap)
, w(0)
{
+ #if QT_VERSION >= 0x050400
+ if (Settings::self()->retinaSupport()) {
+ setAttribute(Qt::AA_UseHighDpiPixmaps);
+ }
+ #endif
}
#endif
@@ -40,6 +45,11 @@ Application::Application()
: KUniqueApplication()
, w(0)
{
+ #if QT_VERSION >= 0x050400
+ if (Settings::self()->retinaSupport()) {
+ setAttribute(Qt::AA_UseHighDpiPixmaps);
+ }
+ #endif
}
Application::~Application() {
diff --git a/gui/application_mac.cpp b/gui/application_mac.cpp
index cb752af..136cbfb 100644
--- a/gui/application_mac.cpp
+++ b/gui/application_mac.cpp
@@ -22,13 +22,19 @@
*/
#include "application_mac.h"
+#include "settings.h"
#include "support/utils.h"
#include <QIcon>
Application::Application(int &argc, char **argv)
: SingleApplication(argc, argv)
{
- QCoreApplication::setAttribute(Qt::AA_DontShowIconsInMenus, true);
+ setAttribute(Qt::AA_DontShowIconsInMenus, true);
+ #if QT_VERSION >= 0x050100
+ if (Settings::self()->retinaSupport()) {
+ setAttribute(Qt::AA_UseHighDpiPixmaps);
+ }
+ #endif
// Setup icon path...
QStringList paths=QIcon::themeSearchPaths();
@@ -39,4 +45,3 @@ Application::Application(int &argc, char **argv)
QIcon::setThemeName(QLatin1String("oxygen"));
}
-
diff --git a/gui/application_qt.cpp b/gui/application_qt.cpp
index fef0a5b..c70146e 100644
--- a/gui/application_qt.cpp
+++ b/gui/application_qt.cpp
@@ -58,6 +58,11 @@ static void setupIconTheme()
Application::Application(int &argc, char **argv)
: QApplication(argc, argv)
{
+ #if QT_VERSION >= 0x050400
+ if (Settings::self()->retinaSupport()) {
+ setAttribute(Qt::AA_UseHighDpiPixmaps);
+ }
+ #endif
}
bool Application::start()
diff --git a/gui/application_win.cpp b/gui/application_win.cpp
index c367c4c..e965320 100644
--- a/gui/application_win.cpp
+++ b/gui/application_win.cpp
@@ -22,6 +22,7 @@
*/
#include "application_win.h"
+#include "settings.h"
#include <QIcon>
#include <windows.h>
@@ -32,6 +33,11 @@ Application::Application(int &argc, char **argv)
installNativeEventFilter(this);
#endif
QIcon::setThemeName(QLatin1String("oxygen"));
+ #if QT_VERSION >= 0x050400
+ if (Settings::self()->retinaSupport()) {
+ setAttribute(Qt::AA_UseHighDpiPixmaps);
+ }
+ #endif
}
#if QT_VERSION >= 0x050000
diff --git a/gui/cachesettings.cpp b/gui/cachesettings.cpp
index e9964c3..e9e9231 100644
--- a/gui/cachesettings.cpp
+++ b/gui/cachesettings.cpp
@@ -337,12 +337,14 @@ void CacheSettings::deleteAll()
toDelete.first()->clean();
}
} else if (toDelete.count()>1) {
+ static const QChar constBullet(0x2022);
+
QString items;
foreach (CacheItem *i, toDelete) {
- items+="<li>"+i->name()+"</li>";
+ items+=constBullet+QLatin1Char(' ')+i->name()+QLatin1Char('\n');
}
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("<p>Delete all from the following?<ul>%1</ul></p>", items),
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Delete items from all selected categories?")+QLatin1String("\n\n")+items,
i18n("Delete Cache Items"), StdGuiItem::del(), StdGuiItem::cancel())) {
return;
}
diff --git a/gui/coverdialog.cpp b/gui/coverdialog.cpp
index 4e1c66d..eb5181f 100644
--- a/gui/coverdialog.cpp
+++ b/gui/coverdialog.cpp
@@ -356,7 +356,7 @@ CoverDialog::CoverDialog(QWidget *parent)
, showAction(0)
, removeAction(0)
{
- Configuration cfg("CoverDialog");
+ Configuration cfg(objectName());
enabledProviders=cfg.get("enabledProviders", (int)Prov_All);
iCount++;
@@ -395,7 +395,7 @@ CoverDialog::CoverDialog(QWidget *parent)
list->setSpacing(spacing);
list->setViewMode(QListView::IconMode);
list->setResizeMode(QListView::Adjust);
- list->setMinimumSize((list->gridSize().width()*4)+(spacing*5), list->gridSize().height()*3);
+ list->setMinimumSize((list->gridSize().width()*3)+style()->pixelMetric(QStyle::PM_ScrollBarExtent)+spacing, list->gridSize().height()*2);
list->setSortingEnabled(false);
addFileButton->setIcon(Icon("document-open"));
@@ -419,7 +419,7 @@ CoverDialog::CoverDialog(QWidget *parent)
CoverDialog::~CoverDialog()
{
- Configuration cfg("CoverDialog");
+ Configuration cfg(objectName());
cfg.set("enabledProviders", enabledProviders);
iCount--;
@@ -433,7 +433,7 @@ void CoverDialog::show(const Song &s, const Covers::Image ¤t)
isArtist=song.isArtistImageRequest();
Covers::Image img=current.img.isNull() ? Covers::locateImage(song) : current;
- if (!img.fileName.isEmpty() && !QFileInfo(img.fileName).isWritable()) {
+ if (img.validFileName() && !QFileInfo(img.fileName).isWritable()) {
MessageBox::error(parentWidget(),
(isArtist
? i18n("An image already exists for this artist, and the file is not writeable.")
@@ -452,7 +452,6 @@ void CoverDialog::show(const Song &s, const Covers::Image ¤t)
list->addItem(existing);
}
query->setText(isArtist ? song.albumArtist() : QString(song.albumArtist()+QLatin1String(" ")+song.album));
- adjustSize();
Dialog::show();
sendQuery();
}
@@ -574,7 +573,7 @@ void CoverDialog::downloadJobFinished()
previewDialog()->showImage(cropImage(img, isArtist), reply->property(constLargeProperty).toString());
} else if (DL_LargeSave==dlType) {
if (!temp) {
- MessageBox::error(this, i18n("Failed to set cover!\nCould not download to temporary file!"));
+ MessageBox::error(this, i18n("Failed to set cover!\n\nCould not download to temporary file!"));
} else if (saveCover(temp->fileName(), img)) {
accept();
}
@@ -886,8 +885,8 @@ void CoverDialog::menuRequested(const QPoint &pos)
menu=new QMenu(list);
showAction=menu->addAction(Icon("zoom-original"), i18n("Display"));
removeAction=menu->addAction(Icon("list-remove"), i18n("Remove"));
- connect(showAction, SIGNAL(triggered(bool)), SLOT(showImage()));
- connect(removeAction, SIGNAL(triggered(bool)), SLOT(removeImages()));
+ connect(showAction, SIGNAL(triggered()), SLOT(showImage()));
+ connect(removeAction, SIGNAL(triggered()), SLOT(removeImages()));
}
QList<QListWidgetItem*> items=list->selectedItems();
@@ -1348,16 +1347,16 @@ bool CoverDialog::saveCover(const QString &src, const QImage &img)
return true;
}
}
- MessageBox::error(this, i18n("Failed to set cover!\nCould not make copy!"));
+ MessageBox::error(this, i18n("Failed to set cover!\n\nCould not make copy!"));
return false;
}
QString existingBackup;
- if (existing && !existing->url().isEmpty()) {
+ if (existing && !existing->url().isEmpty() && !existing->url().startsWith(Covers::constCoverInTagPrefix)) {
static const QLatin1String constBakExt(".bak");
existingBackup=existing->url()+constBakExt;
if (!QFile::rename(existing->url(), existingBackup)) {
- MessageBox::error(this, i18n("Failed to set cover!\nCould not backup original!"));
+ MessageBox::error(this, i18n("Failed to set cover!\n\nCould not backup original!"));
return false;
}
}
@@ -1398,13 +1397,13 @@ bool CoverDialog::saveCover(const QString &src, const QImage &img)
if (!existingBackup.isEmpty() && QFile::exists(existingBackup)) {
QFile::remove(existingBackup);
}
- Covers::self()->emitCoverUpdated(song, img, destName);
+ Covers::self()->updateCover(song, img, destName);
return true;
} else {
if (existing && !existingBackup.isEmpty()) {
QFile::rename(existingBackup, existing->url());
}
- MessageBox::error(this, i18n("Failed to set cover!\nCould not copy file to '%1'!", destName));
+ MessageBox::error(this, i18n("Failed to set cover!\n\nCould not copy file to '%1'!", destName));
return false;
}
}
diff --git a/gui/coverdialog.ui b/gui/coverdialog.ui
index b070bdc..c4190f7 100644
--- a/gui/coverdialog.ui
+++ b/gui/coverdialog.ui
@@ -25,14 +25,14 @@
</widget>
</item>
<item row="0" column="2">
- <widget class="QToolButton" name="addFileButton">
+ <widget class="FlatToolButton" name="addFileButton">
<property name="toolTip">
<string>Add a local file</string>
</property>
</widget>
</item>
<item row="0" column="3">
- <widget class="QToolButton" name="configureButton">
+ <widget class="FlatToolButton" name="configureButton">
<property name="toolTip">
<string>Configure</string>
</property>
@@ -45,6 +45,11 @@
</widget>
<customwidgets>
<customwidget>
+ <class>FlatToolButton</class>
+ <extends>QToolButton</extends>
+ <header>support/flattoolbutton.h</header>
+ </customwidget>
+ <customwidget>
<class>LineEdit</class>
<extends>QLineEdit</extends>
<header>support/lineedit.h</header>
diff --git a/gui/covers.cpp b/gui/covers.cpp
index 5657809..9731483 100644
--- a/gui/covers.cpp
+++ b/gui/covers.cpp
@@ -33,12 +33,18 @@
#ifdef ENABLE_ONLINE_SERVICES
#include "online/soundcloudservice.h"
#include "online/podcastservice.h"
+#include "online/jamendoservice.h"
#include "models/onlineservicesmodel.h"
#endif
+#ifdef ENABLE_DEVICES_SUPPORT
+#include "devices/device.h"
+#include "models/devicesmodel.h"
+#endif
#ifdef TAGLIB_FOUND
#include "tags/tags.h"
#endif
#include "support/globalstatic.h"
+#include "widgets/icons.h"
#include <QFile>
#include <QDir>
#include <QUrl>
@@ -54,10 +60,9 @@
#include <QFont>
#include <QXmlStreamReader>
#include <QTimer>
-#include <QCoreApplication>
+#include <QApplication>
#ifdef ENABLE_KDE_SUPPORT
#include <KDE/KStandardDirs>
-#include <QApplication>
#endif
GLOBAL_STATIC(Covers, instance)
@@ -82,11 +87,18 @@ const QLatin1String Covers::constScaledCoverDir("covers-scaled/");
const QLatin1String Covers::constCddaCoverDir("cdda/");
const QLatin1String Covers::constFileName("cover");
const QLatin1String Covers::constArtistImage("artist");
+const QString Covers::constCoverInTagPrefix=QLatin1String("{tag}");
static const char * constExtensions[]={".jpg", ".png", 0};
static bool saveInMpdDir=true;
static bool fetchCovers=true;
-static QString constCoverInTagPrefix=QLatin1String("{tag}");
+static QString constNoCover=QLatin1String("{nocover}");
+
+#if QT_VERSION >= 0x050100
+static double devicePixelRatio=1.0;
+// Only scale images to device pixel ratio if un-scaled size is less then 300pixels.
+static const int constRetinaScaleMaxSize=300;
+#endif
static QImage scale(const Song &song, const QImage &img, int size)
{
@@ -168,6 +180,7 @@ static QImage loadImage(const QString &fileName)
return img;
}
+
static inline bool isOnlineServiceImage(const Song &s)
{
#ifdef ENABLE_ONLINE_SERVICES
@@ -199,6 +212,12 @@ static Covers::Image serviceImage(const Song &s)
static inline QString albumKey(const Song &s)
{
+ if (Song::SingleTracks==s.type) {
+ return QLatin1String("-single-tracks-");
+ }
+ if (s.isStandardStream()) {
+ return QLatin1String("-stream-");
+ }
#ifdef ENABLE_ONLINE_SERVICES
if (isOnlineServiceImage(s)) {
return s.onlineService();
@@ -214,10 +233,23 @@ static inline QString artistKey(const Song &s)
static inline QString cacheKey(const Song &song, int size)
{
+ if (song.isArtistImageRequest() && song.isVariousArtists()) {
+ return QLatin1String("va")+QString::number(size);
+ } else if (Song::SingleTracks==song.type) {
+ return QLatin1String("single")+QString::number(size);
+ } else if (song.isStandardStream()) {
+ return QLatin1String("str")+QString::number(size);
+ }
+ #ifdef ENABLE_ONLINE_SERVICES
+ else if (isOnlineServiceImage(song)) {
+ return song.onlineService()+QString::number(size);
+ }
+ #endif
+
return (song.isArtistImageRequest() ? artistKey(song) : albumKey(song))+QString::number(size);
}
-static const QLatin1String constScaledFormat(".png");
+static const QLatin1String constScaledFormat(".jpg");
static bool cacheScaledCovers=true;
static QString getScaledCoverName(const Song &song, int size, bool createDir)
@@ -244,6 +276,7 @@ static void clearScaledCache(const Song &song)
return;
}
+ DBUG_CLASS("Covers") << song.file << song.artist << song.albumartist << song.album;
QStringList sizeDirNames=d.entryList(QStringList() << "*", QDir::Dirs|QDir::NoDotAndDotDot);
if (artistImage) {
@@ -275,13 +308,13 @@ static QImage loadScaledCover(const Song &song, int size)
QString fileName=getScaledCoverName(song, size, false);
if (!fileName.isEmpty()) {
if (QFile::exists(fileName)) {
- QImage img(fileName, "PNG");
+ QImage img(fileName, "JPG");
if (!img.isNull() && (img.width()==size || img.height()==size)) {
DBUG_CLASS("Covers") << song.albumArtist() << song.albumId() << size << "scaled cover found" << fileName;
return img;
}
- } else { // Remove any previous JPG scaled cover...
- fileName=Utils::changeExtension(fileName, ".jpg");
+ } else { // Remove any previous PNG scaled cover...
+ fileName=Utils::changeExtension(fileName, ".png");
if (QFile::exists(fileName)) {
QFile::remove(fileName);
}
@@ -307,21 +340,34 @@ const char * Covers::imageFormat(const QByteArray &data)
QString Covers::encodeName(QString name)
{
- name.replace("/", "_");
+ name.replace(QLatin1Char('/'), QLatin1Char('_'));
+ #if defined Q_OS_WIN
+ name.replace(QLatin1Char('?'), QLatin1Char('_'));
+ name.replace(QLatin1Char(':'), QLatin1Char('_'));
+ name.replace(QLatin1Char('<'), QLatin1Char('_'));
+ name.replace(QLatin1Char('>'), QLatin1Char('_'));
+ name.replace(QLatin1Char('\\'), QLatin1Char('_'));
+ name.replace(QLatin1Char('*'), QLatin1Char('_'));
+ name.replace(QLatin1Char('|'), QLatin1Char('_'));
+ name.replace(QLatin1Char('\"'), QLatin1Char('_'));
+ #elif defined Q_OS_MAC
+ name.replace(QLatin1Char(':'), QLatin1Char('_'));
+ if (name.startsWith(QLatin1Char('.'))) {
+ name[0]=QLatin1Char('_');
+ }
+ if (name.length()>255) {
+ name=name.left(255);
+ }
+ #else // Linux
#ifdef ENABLE_UBUNTU
// qrc:/ does not seem to like ?
- name.replace("?", "_");
- name.replace(":", "_");
- name.replace("%", "_");
- #elif defined Q_OS_WIN
- name.replace("?", "_");
- name.replace(":", "_");
- name.replace("<", "_");
- name.replace(">", "_");
- name.replace("\\", "_");
- name.replace("*", "_");
- name.replace("|", "_");
- name.replace("\"", "_");
+ name.replace(QLatin1Char('?'), QLatin1Char('_'));
+ name.replace(QLatin1Char(':'), QLatin1Char('_'));
+ name.replace(QLatin1Char('%'), QLatin1Char('_'));
+ #endif // ENABLE_UBUNTU
+ if (name.startsWith(QLatin1Char('.'))) {
+ name[0]=QLatin1Char('_');
+ }
#endif
return name;
}
@@ -333,11 +379,11 @@ QString Covers::albumFileName(const Song &song)
coverName=Covers::constFileName;
}
#ifndef ENABLE_UBUNTU
- else if (coverName.contains("%")) {
+ else if (coverName.contains(QLatin1Char('%'))) {
coverName.replace(DeviceOptions::constAlbumArtist, encodeName(song.albumArtist()));
coverName.replace(DeviceOptions::constTrackArtist, encodeName(song.albumArtist()));
coverName.replace(DeviceOptions::constAlbumTitle, encodeName(song.album));
- coverName.replace("%", "");
+ coverName.replace(QLatin1String("%"), QLatin1String(""));
}
#endif
return coverName;
@@ -346,7 +392,7 @@ QString Covers::albumFileName(const Song &song)
QString Covers::artistFileName(const Song &song)
{
QString coverName=MPDConnection::self()->getDetails().coverName;
- if (coverName.contains("%")){
+ if (coverName.contains(QLatin1Char('%'))) {
return encodeName(song.albumArtist());
}
return constArtistImage;
@@ -515,6 +561,29 @@ void CoverDownloader::stop()
void CoverDownloader::download(const Song &song)
{
DBUG << song.file << song.artist << song.albumartist << song.album;
+ #ifdef ENABLE_ONLINE_SERVICES
+ if (song.isFromOnlineService()) {
+ QString serviceName=song.onlineService();
+ QString imageUrl=song.extraField(Song::OnlineImageUrl);
+ // Jamendo image URL is just the album ID!
+ if (!imageUrl.isEmpty() && !imageUrl.startsWith("http:/") && imageUrl.length()<15 && serviceName==JamendoService::constName) {
+ imageUrl=JamendoService::imageUrl(imageUrl);
+ }
+
+ Job job(song, QString(), false);
+ job.type=JobHttpJpg;
+ DBUG << "Online image url" << imageUrl;
+ if (!imageUrl.isEmpty()) {
+ NetworkJob *j=network()->get(imageUrl);
+ jobs.insert(j, job);
+ connect(j, SIGNAL(finished()), this, SLOT(onlineJobFinished()));
+ } else {
+ failed(job);
+ }
+ return;
+ }
+ #endif
+
bool isArtistImage=song.isArtistImageRequest();
if (jobs.end()!=findJob(Job(song, QString(), isArtistImage))) {
@@ -728,13 +797,62 @@ void CoverDownloader::jobFinished()
reply->deleteLater();
}
+void CoverDownloader::onlineJobFinished()
+{
+ #ifdef ENABLE_ONLINE_SERVICES
+ NetworkJob *reply=qobject_cast<NetworkJob *>(sender());
+
+ if (!reply) {
+ return;
+ }
+ reply->deleteLater();
+
+ DBUG << "status" << reply->error() << reply->errorString();
+
+ QHash<NetworkJob *, Job>::Iterator it(jobs.find(reply));
+ QHash<NetworkJob *, Job>::Iterator end(jobs.end());
+
+ if (it!=end) {
+ QByteArray data=QNetworkReply::NoError==reply->error() ? reply->readAll() : QByteArray();
+ if (data.isEmpty()) {
+ DBUG << reply->url().toString() << "empty!";
+ return;
+ }
+
+ Job job=it.value();
+ const Song &song=job.song;
+ QString id=song.onlineService();
+ QString fileName;
+ QImage img=data.isEmpty() ? QImage() : QImage::fromData(data, Covers::imageFormat(data));
+
+ bool png=Covers::isPng(data);
+ DBUG << "Got image" << id << song.artist << song.album << png;
+ if (!img.isNull()) {
+ if (img.size().width()>Covers::constMaxSize.width() || img.size().height()>Covers::constMaxSize.height()) {
+ img=img.scaled(Covers::constMaxSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ }
+ QString cacheName=song.extraField(Song::OnlineImageCacheName);
+ fileName=cacheName.isEmpty()
+ ? Utils::cacheDir(id.toLower(), true)+Covers::encodeName(song.album.isEmpty() ? song.artist : (song.artist+" - "+song.album))+(png ? ".png" : ".jpg")
+ : cacheName;
+ QFile f(fileName);
+ if (f.open(QIODevice::WriteOnly)) {
+ DBUG << "Saved image to" << fileName;
+ f.write(data);
+ }
+ }
+ emit cover(job.song, img, fileName);
+ }
+ #endif
+}
+
void CoverDownloader::failed(const Job &job)
{
if (job.isArtist) {
- DBUG << "failed to download artist image";
+ DBUG << "artist image" << job.song.artist;
emit artistImage(job.song, QImage(), QString());
} else {
- DBUG << "Failed to download cover image";
+ DBUG << "cover image" << job.song.artist << job.song.album;
emit cover(job.song, QImage(), QString());
}
}
@@ -926,7 +1044,13 @@ void CoverLoader::load()
QList<LoadedCover> covers;
foreach (const LoadedCover &s, toDo) {
DBUG << s.song.artist << s.song.albumId() << s.song.size;
- covers.append(LoadedCover(s.song, loadScaledCover(s.song, s.song.size)));
+ int size=s.song.size;
+ #if QT_VERSION >= 0x050100
+ if (size<constRetinaScaleMaxSize) {
+ size*=devicePixelRatio;
+ }
+ #endif
+ covers.append(LoadedCover(s.song, loadScaledCover(s.song, size)));
}
if (!covers.isEmpty()) {
DBUG << "loaded" << covers.count();
@@ -943,6 +1067,11 @@ Covers::Covers()
, locator(0)
, loader(0)
{
+ #if QT_VERSION >= 0x050100
+ if (Settings::self()->retinaSupport()) {
+ devicePixelRatio=qApp->devicePixelRatio();
+ }
+ #endif
#ifdef ENABLE_UBUNTU
cache.setMaxCost(20*1024*1024); // Not used?
cacheScaledCovers=false;
@@ -1037,7 +1166,7 @@ QPixmap * Covers::saveScaledCover(const QImage &img, const Song &song, int size)
if (cacheScaledCovers && !isOnlineServiceImage(song)) {
QString fileName=getScaledCoverName(song, size, true);
- bool status=img.save(fileName, "PNG");
+ bool status=img.save(fileName, "JPG");
DBUG_CLASS("Covers") << song.albumArtist() << song.album << song.mbAlbumId() << size << fileName << status;
}
QPixmap *pix=new QPixmap(QPixmap::fromImage(img));
@@ -1046,47 +1175,151 @@ QPixmap * Covers::saveScaledCover(const QImage &img, const Song &song, int size)
return pix;
}
-QPixmap * Covers::get(const Song &song, int size)
+QPixmap * Covers::defaultPix(const Song &song, int size, int origSize)
{
- if (song.isUnknown()) {
- return 0;
+ #if QT_VERSION < 0x050100
+ Q_UNUSED(origSize)
+ #endif
+ #ifdef ENABLE_ONLINE_SERVICES
+ bool podcast=!song.isArtistImageRequest() && song.isFromOnlineService() && PodcastService::constName==song.onlineService();
+ QString key=song.isArtistImageRequest()
+ ? QLatin1String("artist-")
+ : podcast
+ ? QLatin1String("podcast-")
+ : QLatin1String("album-");
+ #else
+ bool podcast=false;
+ QString key=song.isArtistImageRequest() ? QLatin1String("artist-") : QLatin1String("album-");
+ #endif
+ key+=QString::number(size);
+ QPixmap *pix=cache.object(key);
+ #ifndef ENABLE_UBUNTU
+ if (!pix) {
+ Icon &icn=song.isArtistImageRequest()
+ ? Icons::self()->artistIcon
+ : podcast
+ ? Icons::self()->podcastIcon
+ : Icons::self()->albumIcon;
+ pix=new QPixmap(icn.pixmap(size, size).scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ #if QT_VERSION >= 0x050100
+ if (size!=origSize) {
+ pix->setDevicePixelRatio(devicePixelRatio);
+ DBUG << "Set pixel ratio of dummy pixmap" << devicePixelRatio;
+ }
+ #endif
+ cache.insert(key, pix, 1);
+ cacheSizes.insert(size);
}
+ #endif
+ return pix;
+}
- QString key=cacheKey(song, size);
- QPixmap *pix(cache.object(key));
+QPixmap * Covers::get(const Song &song, int size, bool urgent)
+{
+ // DBUG_CLASS("Covers") << song.albumArtist() << song.album << song.mbAlbumId() << size << urgent;
+ QString key;
+ QPixmap *pix=0;
+ if (0==size) {
+ size=22;
+ }
- if (!pix) {
- #ifdef ENABLE_ONLINE_SERVICES
- if (isOnlineServiceImage(song)) {
- Covers::Image img=serviceImage(song);
- if (!img.img.isNull()) {
- pix=new QPixmap(QPixmap::fromImage(img.img.scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)));
- cache.insert(key, pix);
+ int origSize=size;
+ #if QT_VERSION >= 0x050100
+ if (size<constRetinaScaleMaxSize) {
+ size*=devicePixelRatio;
+ }
+ #endif
+ if (!song.isUnknown() || song.isStandardStream()) {
+ key=cacheKey(song, size);
+ pix=cache.object(key);
+
+ #ifndef ENABLE_UBUNTU
+ if (!pix) {
+ if (song.isArtistImageRequest() && song.isVariousArtists()) {
+ // Load VA image...
+ pix=new QPixmap(Icons::self()->variousArtistsIcon.pixmap(size, size).scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ } else if (Song::SingleTracks==song.type) {
+ pix=new QPixmap(Icons::self()->albumIcon.pixmap(size, size).scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ } else if (song.isStandardStream()) {
+ pix=new QPixmap(Icons::self()->streamIcon.pixmap(size, size).scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ }
+ #ifdef ENABLE_ONLINE_SERVICES
+ else if (isOnlineServiceImage(song)) {
+ Covers::Image img=serviceImage(song);
+ if (!img.img.isNull()) {
+ pix=new QPixmap(QPixmap::fromImage(img.img.scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)));
+ }
+ }
+ #endif
+ if (pix) {
+ #if QT_VERSION >= 0x050100
+ if (size!=origSize) {
+ pix->setDevicePixelRatio(devicePixelRatio);
+ DBUG << "Set pixel ratio of cover" << devicePixelRatio;
+ }
+ #endif
+ cache.insert(key, pix, 1);
cacheSizes.insert(size);
}
}
#endif
+ if (!pix) {
+ if (urgent) {
+ QImage cached=loadScaledCover(song, size);
+ if (cached.isNull()) {
+ Image img=findImage(song, false);
+ if (!img.img.isNull()) {
+ pix=saveScaledCover(scale(song, img.img, size), song, size);
+ #if QT_VERSION >= 0x050100
+ if (size!=origSize) {
+ pix->setDevicePixelRatio(devicePixelRatio);
+ DBUG << "Set pixel ratio of saved scaled cover" << devicePixelRatio;
+ }
+ #endif
+ return pix;
+ } else if (constNoCover==img.fileName) {
+ return defaultPix(song, size, origSize);
+ }
+ } else {
+ pix=new QPixmap(QPixmap::fromImage(cached));
+ #if QT_VERSION >= 0x050100
+ if (size!=origSize) {
+ pix->setDevicePixelRatio(devicePixelRatio);
+ DBUG << "Set pixel ratio of loaded scaled cover" << devicePixelRatio;
+ }
+ #endif
+ cache.insert(key, pix);
+ cacheSizes.insert(size);
+ return pix;
+ }
+ }
+ if (cacheScaledCovers) {
+ tryToLoad(setSizeRequest(song, origSize));
+ } else {
+ tryToLocate(setSizeRequest(song, origSize));
+ }
- if (cacheScaledCovers) {
- tryToLoad(setSizeRequest(song, size));
- } else {
- tryToLocate(setSizeRequest(song, size));
+ // Create a dummy image so that we dont keep on locating/loading/downloading files that do not exist!
+ pix=new QPixmap(1, 1);
+ #if QT_VERSION >= 0x050100
+ if (size!=origSize) {
+ pix->setDevicePixelRatio(devicePixelRatio);
+ DBUG << "Set pixel ratio of dummy cover" << devicePixelRatio;
+ }
+ #endif
+ cache.insert(key, pix, 1);
+ cacheSizes.insert(size);
}
- // Create a dummy image so that we dont keep on locating/loading/downloading files that do not exist!
- pix=new QPixmap(1, 1);
- cache.insert(key, pix, 1);
- cacheSizes.insert(size);
+ if (pix && pix->width()>1) {
+ return pix;
+ }
}
-
- return pix && pix->width()>1 ? pix : 0;
+ return defaultPix(song, size, origSize);
}
void Covers::coverDownloaded(const Song &song, const QImage &img, const QString &file)
{
- if (!img.isNull()) {
- updateCache(song, img, true);
- }
gotAlbumCover(song, img, file);
}
@@ -1095,7 +1328,7 @@ void Covers::artistImageDownloaded(const Song &song, const QImage &img, const QS
gotArtistImage(song, img, file);
}
-void Covers::updateCache(const Song &song, const QImage &img, bool dummyEntriesOnly)
+bool Covers::updateCache(const Song &song, const QImage &img, bool dummyEntriesOnly)
{
// Only remove all scaled entries from disk if the cover has been set by the CoverDialog
// This is the only case where dummyEntriesOnly==false
@@ -1103,19 +1336,45 @@ void Covers::updateCache(const Song &song, const QImage &img, bool dummyEntriesO
if (!dummyEntriesOnly) {
clearScaledCache(song);
}
+ #ifdef ENABLE_DEVICES_SUPPORT
+ bool emitLoaded=!song.isFromDevice();
+ #else
+ bool emitLoaded=true;
+ #endif
+ bool updated=false;
+
foreach (int s, cacheSizes) {
QString key=cacheKey(song, s);
QPixmap *pix(cache.object(key));
if (pix && (!dummyEntriesOnly || pix->width()<2)) {
+ #if QT_VERSION >= 0x050100
+ double pixRatio=pix->devicePixelRatio();
+ #endif
cache.remove(key);
if (!img.isNull()) {
- if (saveScaledCover(scale(song, img, s), song, s)) {
+ DBUG_CLASS("Covers");
+ QPixmap *p=saveScaledCover(scale(song, img, s), song, s);
+ #if QT_VERSION >= 0x050100
+ if (p) {
+ p->setDevicePixelRatio(pixRatio);
+ DBUG << "Set pixel ratio of updated cached pixmap" << devicePixelRatio;
+ }
+ #endif
+ if (p && emitLoaded) {
+ #if QT_VERSION >= 0x050100
+ if (pixRatio>1.00001) {
+ s/=pixRatio;
+ }
+ #endif
emit loaded(song, s);
+ updated=true;
}
}
}
}
+
+ return updated;
}
void Covers::tryToLocate(const Song &song)
@@ -1132,6 +1391,11 @@ void Covers::tryToLocate(const Song &song)
void Covers::tryToDownload(const Song &song)
{
+ #ifdef ENABLE_DEVICES_SUPPORT
+ if (song.isFromDevice()) {
+ return;
+ }
+ #endif
if (!downloader) {
downloader=new CoverDownloader();
connect(this, SIGNAL(download(Song)), downloader, SLOT(download(Song)), Qt::QueuedConnection);
@@ -1170,19 +1434,57 @@ Covers::Image Covers::locateImage(const Song &song)
{
DBUG_CLASS("Covers") << song.file << song.artist << song.albumartist << song.album << song.type;
#ifdef ENABLE_ONLINE_SERVICES
- if (isOnlineServiceImage(song)) {
- Covers::Image img=serviceImage(song);
- if (!img.img.isNull()) {
- return img;
+ if (song.isFromOnlineService()) {
+ QString id=song.onlineService();
+ Covers::Image img;
+
+ if (isOnlineServiceImage(song)) {
+ img=serviceImage(song);
+ if (!img.img.isNull()) {
+ DBUG_CLASS("Covers") << "Got cover online image" << QString(img.fileName) << "for" << id;
+ return img;
+ }
}
+
+ img.fileName=song.extraField(Song::OnlineImageCacheName);
+ if (img.fileName.isEmpty()) {
+ img.fileName=Utils::cacheDir(id.toLower(), true)+Covers::encodeName(song.album.isEmpty() ? song.artist : (song.artist+" - "+song.album))+".jpg";
+ if (!QFile::exists(img.fileName)) {
+ img.fileName=Utils::changeExtension(img.fileName, ".png");
+ }
+ }
+ if (!img.fileName.isEmpty()) {
+ img.img=loadImage(img.fileName);
+ if (!img.img.isNull()) {
+ DBUG_CLASS("Covers") << "Got cover online image" << QString(img.fileName) << "for" << id;
+ return img;
+ }
+ }
+ DBUG_CLASS("Covers") << "Failed to locate online image for" << id;
+ return Image();
}
- if (Song::OnlineSvrTrack==song.type) {
- return OnlineServicesModel::self()->readImage(song);
+ #endif
+ #ifdef ENABLE_DEVICES_SUPPORT
+ if (song.isFromDevice()) {
+ Device *dev=DevicesModel::self()->device(song.deviceId());
+ Image img;
+ if (dev) {
+ img=dev->requestCover(song);
+ }
+ if (img.img.isNull()) {
+ DBUG_CLASS("Covers") << "Failed to locate device image for" << song.deviceId();
+ }
+ return img;
}
#endif
+
bool isArtistImage=song.isArtistImageRequest();
QString prevFileName=Covers::self()->getFilename(song, isArtistImage);
if (!prevFileName.isEmpty()) {
+ if (constNoCover==prevFileName) {
+ DBUG_CLASS("Covers") << "No cover";
+ return Image(QImage(), constNoCover);
+ }
#ifdef TAGLIB_FOUND
QImage img;
if (prevFileName.startsWith(constCoverInTagPrefix)) {
@@ -1386,13 +1688,18 @@ Covers::Image Covers::locateImage(const Song &song)
}
DBUG_CLASS("Covers") << "Failed to locate image";
- return Image(QImage(), QString());
+ return Image();
}
// Dont return song files as cover files!
static Covers::Image fix(const Covers::Image &img)
{
- return Covers::Image(img.img, img.fileName.startsWith(constCoverInTagPrefix) ? QString() : img.fileName);
+ return Covers::Image(img.img, img.validFileName() ? img.fileName : QString());
+}
+
+bool Covers::Image::validFileName() const
+{
+ return !fileName.isEmpty() && !fileName.startsWith(constCoverInTagPrefix) && constNoCover!=fileName;
}
Covers::Image Covers::requestImage(const Song &song, bool urgent)
@@ -1407,20 +1714,29 @@ Covers::Image Covers::requestImage(const Song &song, bool urgent)
}
}
#endif
+ #ifdef ENABLE_DEVICES_SUPPORT
+ if (song.isFromDevice()) {
+ Device *dev=DevicesModel::self()->device(song.deviceId());
+ if (dev) {
+ return dev->requestCover(song);
+ }
+ return Image();
+ }
+ #endif
QString key=song.isArtistImageRequest() ? artistKey(song) : albumKey(song);
if (currentImageRequests.contains(key)) {
- return Covers::Image();
+ return Image();
}
if (!urgent) {
currentImageRequests.insert(key);
tryToLocate(song);
- return Covers::Image();
+ return Image();
}
Image img=findImage(song, false);
- if (img.img.isNull() && Song::OnlineSvrTrack!=song.type) {
+ if (img.img.isNull() && Song::OnlineSvrTrack!=song.type && constNoCover!=img.fileName) {
DBUG << song.file << song.artist << song.albumartist << song.album << "Need to download";
currentImageRequests.insert(key);
tryToDownload(song);
@@ -1448,8 +1764,22 @@ void Covers::loaded(const QList<LoadedCover> &covers)
{
foreach (const LoadedCover &cvr, covers) {
if (!cvr.img.isNull()) {
- cache.insert(cacheKey(cvr.song, cvr.song.size), new QPixmap(QPixmap::fromImage(cvr.img)));
- cacheSizes.insert(cvr.song.size);
+ int size=cvr.song.size;
+ #if QT_VERSION >= 0x050100
+ int origSize=size;
+ if (size<constRetinaScaleMaxSize) {
+ size*=devicePixelRatio;
+ }
+ #endif
+ QPixmap *pix=new QPixmap(QPixmap::fromImage(cvr.img));
+ #if QT_VERSION >= 0x050100
+ if (size!=origSize) {
+ pix->setDevicePixelRatio(devicePixelRatio);
+ DBUG << "Set pixel ratio of loaded pixmap" << devicePixelRatio;
+ }
+ #endif
+ cache.insert(cacheKey(cvr.song, size), pix);
+ cacheSizes.insert(size);
emit loaded(cvr.song, cvr.song.size);
} else { // Failed to load a scaled cover, try locating non-scaled cover...
tryToLocate(cvr.song);
@@ -1457,10 +1787,15 @@ void Covers::loaded(const QList<LoadedCover> &covers)
}
}
-void Covers::emitCoverUpdated(const Song &song, const QImage &img, const QString &file)
+void Covers::updateCover(const Song &song, const QImage &img, const QString &file)
{
updateCache(song, img, false);
- filenames[song.isArtistImageRequest() ? artistKey(song) : albumKey(song)]=file;
+ if (!file.isEmpty()) {
+ filenames[song.isArtistImageRequest() ? artistKey(song) : albumKey(song)]=file;
+ }
+ #ifdef ENABLE_DEVICES_SUPPORT
+ if (!song.isFromDevice())
+ #endif
emit coverUpdated(song, img, file);
}
@@ -1487,18 +1822,17 @@ void Covers::gotAlbumCover(const Song &song, const QImage &img, const QString &f
{
QString key=albumKey(song);
currentImageRequests.remove(key);
- if (!img.isNull() && !fileName.isEmpty() && !fileName.startsWith("http:/")) {
+// if (!img.isNull() && !fileName.isEmpty() && !fileName.startsWith("http:/")) {
mutex.lock();
- filenames.insert(key, fileName);
+ filenames.insert(key, fileName.isEmpty() ? constNoCover : fileName);
mutex.unlock();
- }
+// }
if (emitResult) {
- if (song.isSpecificSizeRequest()) {
- if (!img.isNull() && saveScaledCover(scale(song, img, song.size), song, song.size)) {
- DBUG << "loaded cover" << song.file << song.artist << song.albumartist << song.album << song.mbAlbumId() << img.width() << img.height() << fileName << song.size;
- emit loaded(song, song.size);
- }
- } else {
+ bool updatedCover=false;
+ if (!img.isNull()) {
+ updatedCover=updateCache(song, img, true);
+ }
+ if (updatedCover || !song.isSpecificSizeRequest()) {
DBUG << "emit cover" << song.file << song.artist << song.albumartist << song.album << song.mbAlbumId() << img.width() << img.height() << fileName;
emit cover(song, img, fileName.startsWith(constCoverInTagPrefix) ? QString() : fileName);
}
@@ -1509,18 +1843,16 @@ void Covers::gotArtistImage(const Song &song, const QImage &img, const QString &
{
QString key=artistKey(song);
currentImageRequests.remove(key);
- if (!img.isNull() && !fileName.isEmpty() && !fileName.startsWith("http:/")) {
+// if (!img.isNull() && !fileName.isEmpty() && !fileName.startsWith("http:/")) {
mutex.lock();
- filenames.insert(key, fileName);
+ filenames.insert(key, fileName.isEmpty() ? constNoCover : fileName);
mutex.unlock();
- }
+// }
if (emitResult) {
- if (song.isSpecificSizeRequest()) {
- if (!img.isNull() && saveScaledCover(scale(song, img, song.size), song, song.size)) {
- DBUG << "loaded artistImage" << song.file << song.artist << song.albumartist << song.album << img.width() << img.height() << fileName << song.size;
- emit loaded(song, song.size);
- }
- } else {
+ if (!img.isNull()) {
+ updateCache(song, img, true);
+ }
+ if (!song.isSpecificSizeRequest()) {
DBUG << "emit artistImage" << song.file << song.artist << song.albumartist << song.album << img.width() << img.height() << fileName;
emit artistImage(song, img, fileName.startsWith(constCoverInTagPrefix) ? QString() : fileName);
}
diff --git a/gui/covers.h b/gui/covers.h
index 5389e70..856881d 100644
--- a/gui/covers.h
+++ b/gui/covers.h
@@ -87,6 +87,7 @@ private:
private Q_SLOTS:
void lastFmCallFinished();
void jobFinished();
+ void onlineJobFinished();
private:
void failed(const Job &job);
@@ -180,7 +181,7 @@ public:
: img(i)
, fileName(f) {
}
-
+ bool validFileName() const;
QImage img;
QString fileName;
};
@@ -195,6 +196,7 @@ public:
static const QLatin1String constFileName;
static const QLatin1String constCddaCoverDir;
static const QLatin1String constArtistImage;
+ static const QString constCoverInTagPrefix;
static Covers * self();
// static bool isCoverFile(const QString &file);
@@ -223,7 +225,7 @@ public:
QPixmap * saveScaledCover(const QImage &img, const Song &song, int size);
// Get cover image of specified size. If this is not found 0 will be returned, and the cover
// will be downloaded.
- QPixmap * get(const Song &song, int size);
+ QPixmap * get(const Song &song, int size, bool urgent=false);
// Get QImage and filename associated with Song request. If this is not found, then the cover
// will NOT be downloaded. 'emitResult' controls whether 'cover()/artistImage()' is emitted if
// a cover is found.
@@ -232,7 +234,7 @@ public:
// will be downloaded. If more than 5 covers have been requested in an event-loop iteration, then
// the cover requests are placed on a queue.
Image requestImage(const Song &song, bool urgent=false);
- void emitCoverUpdated(const Song &song, const QImage &img, const QString &file);
+ void updateCover(const Song &song, const QImage &img, const QString &file);
#if defined CDDB_FOUND || defined MUSICBRAINZ5_FOUND
void cleanCdda();
@@ -257,11 +259,12 @@ private Q_SLOTS:
void artistImageDownloaded(const Song &song, const QImage &img, const QString &file);
private:
+ QPixmap * defaultPix(const Song &song, int size, int origSize);
void tryToLocate(const Song &song);
void tryToDownload(const Song &song);
void tryToLoad(const Song &song);
Image findImage(const Song &song, bool emitResult);
- void updateCache(const Song &song, const QImage &img, bool dummyEntriesOnly);
+ bool updateCache(const Song &song, const QImage &img, bool dummyEntriesOnly);
void gotAlbumCover(const Song &song, const QImage &img, const QString &fileName, bool emitResult=true);
void gotArtistImage(const Song &song, const QImage &img, const QString &fileName, bool emitResult=true);
QString getFilename(const Song &s, bool isArtist);
diff --git a/gui/currentcover.cpp b/gui/currentcover.cpp
index c80233e..838cc89 100644
--- a/gui/currentcover.cpp
+++ b/gui/currentcover.cpp
@@ -216,14 +216,15 @@ void CurrentCover::update(const Song &s)
}
}
-void CurrentCover::coverRetrieved(const Song &s, const QImage &img, const QString &file)
+void CurrentCover::coverRetrieved(const Song &s, const QImage &newImage, const QString &file)
{
if (!s.isArtistImageRequest() && s.albumArtist()==current.albumArtist() && s.album==current.album) {
- valid=!img.isNull();
+ valid=!newImage.isNull();
if (valid) {
coverFileName=file;
+ img=newImage;
emit coverFile(file);
- emit coverImage(img);
+ emit coverImage(newImage);
} else {
coverFileName=current.isStandardStream() ? noStreamCoverFileName : noCoverFileName;
emit coverFile(coverFileName);
diff --git a/gui/filesettings.cpp b/gui/filesettings.cpp
index 90003bf..5403360 100644
--- a/gui/filesettings.cpp
+++ b/gui/filesettings.cpp
@@ -28,6 +28,10 @@ FileSettings::FileSettings(QWidget *p)
: QWidget(p)
{
setupUi(this);
+
+ #ifdef Q_OS_MAC
+ expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
+ #endif
}
void FileSettings::load()
diff --git a/gui/filesettings.ui b/gui/filesettings.ui
index 7e7760c..56f28c5 100644
--- a/gui/filesettings.ui
+++ b/gui/filesettings.ui
@@ -45,74 +45,21 @@
</widget>
</item>
<item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>8</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <widget class="NoteLabel" name="label_2">
<property name="text">
- <string><i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or backdrops, within the music folder, and you do not have write access to this folder, then Cantata will revert to saving the files in your personal cache folder.</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you elect to have Cantata store covers, lyrics, or backdrops, within the music folder, and you do not have write access to this folder, then Cantata will revert to saving the files in your personal cache folder.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>8</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="persNote_2">
+ <widget class="NoteLabel" name="persNote_2">
<property name="text">
- <string><i><b>NOTE:</b> Cantata can only save backdrops and artist images within the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Cantata can only save backdrops and artist images within the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_2">
+ <spacer name="expandingSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@@ -122,13 +69,20 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>8</height>
+ <height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>NoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections/>
</ui>
diff --git a/gui/folderpage.cpp b/gui/folderpage.cpp
index 0604ca6..28441ba 100644
--- a/gui/folderpage.cpp
+++ b/gui/folderpage.cpp
@@ -58,9 +58,7 @@ FolderPage::FolderPage(QWidget *p)
#endif
view->addAction(browseAction);
#ifdef ENABLE_DEVICES_SUPPORT
- QAction *sep=new QAction(this);
- sep->setSeparator(true);
- view->addAction(sep);
+ view->addSeparator();
view->addAction(StdActions::self()->deleteSongsAction);
#endif
@@ -72,11 +70,11 @@ FolderPage::FolderPage(QWidget *p)
connect(view, SIGNAL(searchItems()), this, SLOT(searchItems()));
connect(view, SIGNAL(itemsSelected(bool)), this, SLOT(controlActions()));
connect(view, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(itemDoubleClicked(const QModelIndex &)));
- connect(browseAction, SIGNAL(triggered(bool)), this, SLOT(openFileManager()));
- connect(MPDConnection::self(), SIGNAL(updatingFileList()), this, SLOT(showSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatedFileList()), this, SLOT(hideSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatingDatabase()), this, SLOT(showSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatedDatabase()), this, SLOT(hideSpinner()));
+ connect(browseAction, SIGNAL(triggered()), this, SLOT(openFileManager()));
+ connect(MPDConnection::self(), SIGNAL(updatingFileList()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatedFileList()), view, SLOT(updated()));
+ connect(MPDConnection::self(), SIGNAL(updatingDatabase()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatedDatabase()), view, SLOT(updated()));
view->load(metaObject()->className());
}
@@ -222,9 +220,8 @@ QStringList FolderPage::selectedFiles(bool allowPlaylists) const
return DirViewModel::self()->filenames(proxy.mapToSource(selected, proxy.enabled() && Settings::self()->filteredOnly()), allowPlaylists);
}
-void FolderPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void FolderPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- Q_UNUSED(randomAlbums)
QStringList files=selectedFiles(name.isEmpty());
if (!files.isEmpty()) {
@@ -253,7 +250,7 @@ void FolderPage::deleteSongs()
QList<Song> songs=selectedSongs(ES_GuessTags);
if (!songs.isEmpty()) {
- if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\nThis cannot be undone."),
+ if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\n\nThis cannot be undone."),
i18n("Delete Songs"), StdGuiItem::del(), StdGuiItem::cancel())) {
emit deleteSongs(QString(), songs);
}
@@ -284,15 +281,3 @@ QStringList FolderPage::walk(QModelIndex rootItem)
}
return files;
}
-
-void FolderPage::showSpinner()
-{
- view->showSpinner();
- view->showMessage(i18n("Updating..."), -1);
-}
-
-void FolderPage::hideSpinner()
-{
- view->hideSpinner();
- view->showMessage(QString(), 0);
-}
diff --git a/gui/folderpage.h b/gui/folderpage.h
index 77ec0b8..c3927b3 100644
--- a/gui/folderpage.h
+++ b/gui/folderpage.h
@@ -53,7 +53,7 @@ public:
QStringList selectedFiles(bool allowPlaylists=false) const;
QList<Song> selectedSongs(EmptySongMod esMod, bool allowPlaylists=false) const;
QList<Song> selectedSongs(bool allowPlaylists=false) const { return selectedSongs(ES_None, allowPlaylists); }
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
#ifdef ENABLE_DEVICES_SUPPORT
void addSelectionToDevice(const QString &udi);
void deleteSongs();
@@ -76,8 +76,6 @@ public Q_SLOTS:
void controlActions();
void itemDoubleClicked(const QModelIndex &);
void openFileManager();
- void showSpinner();
- void hideSpinner();
private:
QStringList walk(QModelIndex rootItem);
diff --git a/gui/initialsettingswizard.cpp b/gui/initialsettingswizard.cpp
index 0796101..6e4e11f 100644
--- a/gui/initialsettingswizard.cpp
+++ b/gui/initialsettingswizard.cpp
@@ -222,7 +222,7 @@ void InitialSettingsWizard::accept()
} else {
MPDUser::self()->cleanup();
}
- Settings::self()->save(true);
+ Settings::self()->save();
QDialog::accept();
}
@@ -232,4 +232,3 @@ void InitialSettingsWizard::reject()
Settings::self()->clearVersion();
QDialog::reject();
}
-
diff --git a/gui/initialsettingswizard.ui b/gui/initialsettingswizard.ui
index 0db7ca8..c1bdfa0 100644
--- a/gui/initialsettingswizard.ui
+++ b/gui/initialsettingswizard.ui
@@ -66,7 +66,7 @@
<item>
<widget class="QLabel" name="label_2">
<property name="text">
- <string><html><head/><body><p>Cantata is a feature-rich and user friendly client for Music Player Daemon (MPD). MPD is a background application that can be used to play music.</p><p>For more information on MPD itself, please refer to the MPD website <a href="http://www.musicpd.org"><span style=" text-decoration: underline; color:#0000ff;">http://www.musicpd.org</span></a></p><p>This 'wizard' will guide you through the basic settings required for Cantata to function correctly.</p></body></html></string>
+ <string><html><head/><body><p>Cantata is a feature-rich and user friendly client for Music Player Daemon (MPD). MPD is a flexible, powerful, server-side application for playing music.</p><p>For more information on MPD itself, please refer to the MPD website <a href="http://www.musicpd.org"><span style=" text-decoration: underline; color:#0000ff;">http://www.musicpd.org</span></a></p><p>This 'wizard' will guide you through the basic settings required for Cantata to function correctly.</p></body></html></string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
@@ -131,7 +131,7 @@
<item>
<widget class="QLabel" name="label_8">
<property name="text">
- <string><html><head/><body><p>Cantata is a feature-rich and user friendly client for Music Player Daemon (MPD). MPD is a background application that can be used to play music. MPD may be started either system-wide, or on a per-user basis. Please select how you would like to have Cantata initially connect to (or startup) MPD:</p></body></html></string>
+ <string><html><head/><body><p>Cantata is a feature-rich and user friendly client for Music Player Daemon (MPD). MPD is a flexible, powerful, server-side application for playing music. MPD may be started either system-wide, or on a per-user basis. Please select how you would like to have Cantata initially connect to (or startup) MPD:</p></body></html></string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
@@ -378,6 +378,9 @@
</item>
<item>
<layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
<item row="0" column="0">
<widget class="BuddyLabel" name="hostLabel">
<property name="text">
@@ -485,60 +488,16 @@
</layout>
</item>
<item>
- <spacer name="verticalSpacer_5">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="musicFolderNoteLabel">
+ <widget class="NoteLabel" name="musicFolderNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If you're MPD instance is on a remote host, you may set this to a HTTP URL.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your MPD instance is on a remote host, you may set this to a HTTP URL.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_6">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="socketNoteLabel">
+ <widget class="NoteLabel" name="socketNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> When using a local socket the full absolute path to the socket needs to be set. (Port number is not required.)</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>When using a local socket the full absolute path to the socket needs to be set. (Port number is not required.)</string>
</property>
</widget>
</item>
@@ -751,89 +710,23 @@
</widget>
</item>
<item>
- <spacer name="verticalSpacer_5x">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>8</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="persNote">
+ <widget class="NoteLabel" name="persNote">
<property name="text">
- <string><i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or backdrops, within the music folder, and you do not have write access to this folder, then Cantata will revert to saving the files in your personal cache folder.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you elect to have Cantata store covers, lyrics, or backdrops, within the music folder, and you do not have write access to this folder, then Cantata will revert to saving the files in your personal cache folder.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_7f2_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>8</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="persNote_2">
+ <widget class="NoteLabel" name="persNote_2">
<property name="text">
- <string><i><b>NOTE:</b> Cantata can only save backdrops and artist images within the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Cantata can only save backdrops and artist images within the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_7f2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>8</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="StateLabel" name="httpNote">
+ <widget class="NoteLabel" name="httpNote">
<property name="text">
- <string><i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata currently cannot upload files to external HTTP servers. Therefore, the above settings should be left un-checked.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>The 'Music folder' is set to a HTTP address, and Cantata currently cannot upload files to external HTTP servers. Therefore, the above settings should be left un-checked.</string>
</property>
</widget>
</item>
@@ -915,10 +808,33 @@
</property>
</spacer>
</item>
- <item row="4" column="0">
+ <item row="4" column="0" colspan="2">
+ <widget class="NoteLabel" name="albumArtistsNoteLabel">
+ <property name="text">
+ <string>Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it is set, otherwise it will fallback to the 'Artist' tag. If you have albums with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the grouping to function correctly. It is suggested to use 'Various Artists' in this scenario.</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <spacer name="verticalSpacer_6y">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="6" column="0">
<widget class="QLabel" name="groupWarningIcon"/>
</item>
- <item row="4" column="1">
+ <item row="6" column="1">
<widget class="QLabel" name="groupWarningLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
@@ -937,7 +853,7 @@
</property>
</widget>
</item>
- <item row="5" column="0" colspan="2">
+ <item row="7" column="0" colspan="2">
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -977,9 +893,9 @@
<container>1</container>
</customwidget>
<customwidget>
- <class>StateLabel</class>
+ <class>NoteLabel</class>
<extends>QLabel</extends>
- <header>widgets/statelabel.h</header>
+ <header>widgets/notelabel.h</header>
</customwidget>
</customwidgets>
<resources/>
diff --git a/gui/interfacesettings.cpp b/gui/interfacesettings.cpp
index dd7f154..1d5cbc3 100644
--- a/gui/interfacesettings.cpp
+++ b/gui/interfacesettings.cpp
@@ -23,14 +23,15 @@
#include "interfacesettings.h"
#include "settings.h"
-#include "widgets/itemview.h"
-#include "support/localize.h"
#include "models/musiclibraryitemalbum.h"
#include "models/albumsmodel.h"
+#include "support/localize.h"
+#include "support/utils.h"
#include "support/fancytabwidget.h"
+#include "support/pathrequester.h"
#include "widgets/basicitemdelegate.h"
#include "widgets/playqueueview.h"
-#include "support/pathrequester.h"
+#include "widgets/itemview.h"
#include <QComboBox>
#ifndef ENABLE_KDE_SUPPORT
#include <QDir>
@@ -45,6 +46,7 @@
#ifndef ENABLE_KDE_SUPPORT
#include <QSystemTrayIcon>
#endif
+#include <QSysInfo>
#define REMOVE(w) \
w->setVisible(false); \
@@ -61,15 +63,6 @@ static void addAlbumSorts(QComboBox *box)
box->addItem(i18n("Year, Artist, Album"), AlbumsModel::Sort_YearArtist);
}
-static void addImageSizes(QComboBox *box)
-{
- box->addItem(i18n("None"), MusicLibraryItemAlbum::CoverNone);
- box->addItem(i18n("Small"), MusicLibraryItemAlbum::CoverSmall);
- box->addItem(i18n("Medium"), MusicLibraryItemAlbum::CoverMedium);
- box->addItem(i18n("Large"), MusicLibraryItemAlbum::CoverLarge);
- box->addItem(i18n("Extra Large"), MusicLibraryItemAlbum::CoverExtraLarge);
-}
-
static QString viewTypeString(ItemView::Mode mode)
{
switch (mode) {
@@ -79,7 +72,7 @@ static QString viewTypeString(ItemView::Mode mode)
case ItemView::Mode_DetailedTree: return i18n("Detailed Tree");
case ItemView::Mode_GroupedTree: return i18n("Grouped Albums");
case ItemView::Mode_List: return i18n("List");
- case ItemView::Mode_IconTop: return i18n("Icon/List");
+ case ItemView::Mode_IconTop: return i18n("Grid");
case ItemView::Mode_Table: return i18n("Table");
}
}
@@ -100,7 +93,6 @@ static void selectEntry(QComboBox *box, int v)
}
}
}
-bool enableNotifications(true);
static inline int getValue(QComboBox *box)
{
@@ -115,12 +107,17 @@ InterfaceSettings::InterfaceSettings(QWidget *p)
, loadedLangs(false)
#endif
{
+ #ifdef Q_OS_MAC
+ // OSX always displays an entry in the taskbar - and the tray seems to confuse things.
+ bool enableTrayItem=false;
+ bool enableNotifications=QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8;
+ #else
#ifdef QT_QTDBUS_FOUND
// We have dbus, check that org.freedesktop.Notifications exists
bool enableNotifications=QDBusConnection::sessionBus().interface()->isServiceRegistered("org.freedesktop.Notifications");
- #else
+ #else // QT_QTDBUS_FOUND
bool enableNotifications=true;
- #endif
+ #endif // QT_QTDBUS_FOUND
bool enableTrayItem=true;
#ifndef ENABLE_KDE_SUPPORT
if (!QSystemTrayIcon::isSystemTrayAvailable()) {
@@ -129,10 +126,10 @@ InterfaceSettings::InterfaceSettings(QWidget *p)
enableNotifications=false;
#endif
}
- #endif
+ #endif // !ENABLE_KDE_SUPPORT
+ #endif // Q_MAC_OS
setupUi(this);
- addImageSizes(libraryCoverSize);
QList<ItemView::Mode> standardViews=QList<ItemView::Mode>() << ItemView::Mode_BasicTree << ItemView::Mode_SimpleTree
<< ItemView::Mode_DetailedTree << ItemView::Mode_List;
addViewTypes(libraryView, QList<ItemView::Mode>() << standardViews << ItemView::Mode_IconTop);
@@ -142,7 +139,6 @@ InterfaceSettings::InterfaceSettings(QWidget *p)
addViewTypes(searchView, QList<ItemView::Mode>() << ItemView::Mode_List << ItemView::Mode_Table);
addViewTypes(playQueueView, QList<ItemView::Mode>() << ItemView::Mode_GroupedTree << ItemView::Mode_Table);
- addImageSizes(albumsCoverSize);
addAlbumSorts(albumSort);
addView(i18n("Play Queue"), QLatin1String("PlayQueuePage"));
@@ -179,9 +175,6 @@ InterfaceSettings::InterfaceSettings(QWidget *p)
addView(i18n("Info - Current song information (artist, album, and lyrics)"), QLatin1String("ContextPage"));
connect(libraryView, SIGNAL(currentIndexChanged(int)), SLOT(libraryViewChanged()));
- connect(libraryCoverSize, SIGNAL(currentIndexChanged(int)), SLOT(libraryCoverSizeChanged()));
- connect(albumsView, SIGNAL(currentIndexChanged(int)), SLOT(albumsViewChanged()));
- connect(albumsCoverSize, SIGNAL(currentIndexChanged(int)), SLOT(albumsCoverSizeChanged()));
connect(playlistsView, SIGNAL(currentIndexChanged(int)), SLOT(playlistsViewChanged()));
connect(playQueueView, SIGNAL(currentIndexChanged(int)), SLOT(playQueueViewChanged()));
connect(forceSingleClick, SIGNAL(toggled(bool)), SLOT(forceSingleClickChanged()));
@@ -234,7 +227,9 @@ InterfaceSettings::InterfaceSettings(QWidget *p)
}
if (!enableNotifications && !enableTrayItem) {
- tabWidget->removeTab(6);
+ tabWidget->removeTab(4);
+ } else if (!enableTrayItem && enableNotifications) {
+ tabWidget->setTabText(4, i18n("Notifications"));
}
#if defined Q_OS_WIN || defined Q_OS_MAC || !defined QT_QTDBUS_FOUND
if (systemTrayPopup && systemTrayCheckBox) {
@@ -242,16 +237,38 @@ InterfaceSettings::InterfaceSettings(QWidget *p)
connect(systemTrayPopup, SIGNAL(toggled(bool)), SLOT(systemTrayPopupToggled()));
}
#endif
+ #if QT_VERSION >= 0x050400 || (defined Q_OS_MAC && QT_VERSION >= 0x050100)
+ connect(retinaSupport, SIGNAL(toggled(bool)), SLOT(retinaSupportChanged()));
+ #else
+ REMOVE(retinaSupport)
+ REMOVE(retinaSupportNoteLabel)
+ #endif
+
+ // If we are on a display less than 800 pixels tall (e.g. a netbook), then re-arrange
+ // the view settings to allow dialog to shrink more...
+ if (Utils::limitedHeight(this)) {
+ viewsLayout->removeWidget(otherViewGroupBox);
+ viewsLayout->addWidget(otherViewGroupBox, 0, 1, 3, 1);
+ viewsLayout->addItem(new QSpacerItem(0, 2, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2, 1, 1);
+ styleLayout->removeWidget(sbIconsOnly);
+ styleLayout->removeWidget(sbMonoIcons);
+ styleLayout->removeWidget(sbAutoHide);
+ QVBoxLayout *sbOther = new QVBoxLayout();
+ sbOther->addWidget(sbIconsOnly);
+ sbOther->addWidget(sbMonoIcons);
+ sbOther->addWidget(sbAutoHide);
+ sbLayout->addItem(new QSpacerItem(Utils::layoutSpacing(this)*8, 2, QSizePolicy::Fixed, QSizePolicy::Fixed));
+ sbLayout->addLayout(sbOther);
+ sbLayout->addItem(new QSpacerItem(0, 2, QSizePolicy::Expanding, QSizePolicy::Minimum));
+ }
}
void InterfaceSettings::load()
{
libraryArtistImage->setChecked(Settings::self()->libraryArtistImage());
selectEntry(libraryView, Settings::self()->libraryView());
- libraryCoverSize->setCurrentIndex(Settings::self()->libraryCoverSize());
libraryYear->setChecked(Settings::self()->libraryYear());
selectEntry(albumsView, Settings::self()->albumsView());
- albumsCoverSize->setCurrentIndex(Settings::self()->albumsCoverSize());
selectEntry(albumSort, Settings::self()->albumSort());
selectEntry(folderView, Settings::self()->folderView());
selectEntry(playlistsView, Settings::self()->playlistsView());
@@ -282,17 +299,21 @@ void InterfaceSettings::load()
playQueueBackground_custom->setChecked(pqBgnd==playQueueBackground_custom->property(constValueProperty).toInt());
playQueueBackgroundOpacity->setValue(Settings::self()->playQueueBackgroundOpacity());
playQueueBackgroundBlur->setValue(Settings::self()->playQueueBackgroundBlur());
- playQueueBackgroundFile->setText(Settings::self()->playQueueBackgroundFile());
+ playQueueBackgroundFile->setText(Utils::convertPathForDisplay(Settings::self()->playQueueBackgroundFile(), false));
playQueueConfirmClear->setChecked(Settings::self()->playQueueConfirmClear());
- albumsViewChanged();
- albumsCoverSizeChanged();
+ playQueueSearch->setChecked(Settings::self()->playQueueSearch());
playlistsViewChanged();
playQueueViewChanged();
forceSingleClick->setChecked(Settings::self()->forceSingleClick());
+ infoTooltips->setChecked(Settings::self()->infoTooltips());
+ if (retinaSupport) {
+ retinaSupport->setChecked(Settings::self()->retinaSupport());
+ }
touchFriendly->setChecked(Settings::self()->touchFriendly());
showStopButton->setChecked(Settings::self()->showStopButton());
showCoverWidget->setChecked(Settings::self()->showCoverWidget());
+ showRatingWidget->setChecked(Settings::self()->showRatingWidget());
if (systemTrayCheckBox) {
systemTrayCheckBox->setChecked(Settings::self()->useSystemTray());
if (minimiseOnClose) {
@@ -312,8 +333,6 @@ void InterfaceSettings::load()
if (systemTrayPopup) {
systemTrayPopup->setChecked(Settings::self()->showPopups());
}
-
- cacheScaledCovers->setChecked(Settings::self()->cacheScaledCovers());
fetchCovers->setChecked(Settings::self()->fetchCovers());
QStringList hiddenPages=Settings::self()->hiddenPages();
@@ -339,10 +358,8 @@ void InterfaceSettings::save()
{
Settings::self()->saveLibraryArtistImage(libraryArtistImage->isChecked());
Settings::self()->saveLibraryView(getValue(libraryView));
- Settings::self()->saveLibraryCoverSize(libraryCoverSize->currentIndex());
Settings::self()->saveLibraryYear(libraryYear->isChecked());
Settings::self()->saveAlbumsView(getValue(albumsView));
- Settings::self()->saveAlbumsCoverSize(albumsCoverSize->currentIndex());
Settings::self()->saveAlbumSort(getValue(albumSort));
Settings::self()->saveFolderView(getValue(folderView));
Settings::self()->savePlaylistsView(getValue(playlistsView));
@@ -375,13 +392,19 @@ void InterfaceSettings::save()
}
Settings::self()->savePlayQueueBackgroundOpacity(playQueueBackgroundOpacity->value());
Settings::self()->savePlayQueueBackgroundBlur(playQueueBackgroundBlur->value());
- Settings::self()->savePlayQueueBackgroundFile(playQueueBackgroundFile->text().trimmed());
+ Settings::self()->savePlayQueueBackgroundFile(Utils::convertPathFromDisplay(playQueueBackgroundFile->text(), false));
Settings::self()->savePlayQueueConfirmClear(playQueueConfirmClear->isChecked());
+ Settings::self()->savePlayQueueSearch(playQueueSearch->isChecked());
Settings::self()->saveForceSingleClick(forceSingleClick->isChecked());
+ Settings::self()->saveInfoTooltips(infoTooltips->isChecked());
+ if (retinaSupport) {
+ Settings::self()->saveRetinaSupport(retinaSupport->isChecked());
+ }
Settings::self()->saveTouchFriendly(touchFriendly->isChecked());
Settings::self()->saveShowStopButton(showStopButton->isChecked());
Settings::self()->saveShowCoverWidget(showCoverWidget->isChecked());
+ Settings::self()->saveShowRatingWidget(showRatingWidget->isChecked());
Settings::self()->saveUseSystemTray(systemTrayCheckBox && systemTrayCheckBox->isChecked());
Settings::self()->saveShowPopups(systemTrayPopup && systemTrayPopup->isChecked());
Settings::self()->saveMinimiseOnClose(minimiseOnClose && minimiseOnClose->isChecked());
@@ -392,7 +415,6 @@ void InterfaceSettings::save()
} else if (startupStateRestore->isChecked()) {
Settings::self()->saveStartupState(Settings::SS_Previous);
}
- Settings::self()->saveCacheScaledCovers(cacheScaledCovers->isChecked());
Settings::self()->saveFetchCovers(fetchCovers->isChecked());
#ifndef ENABLE_KDE_SUPPORT
if (loadedLangs && lang) {
@@ -505,10 +527,6 @@ void InterfaceSettings::addView(const QString &v, const QString &prop)
void InterfaceSettings::libraryViewChanged()
{
int vt=getValue(libraryView);
- if (ItemView::Mode_IconTop==vt && 0==libraryCoverSize->currentIndex()) {
- libraryCoverSize->setCurrentIndex(2);
- }
-
bool isIcon=ItemView::Mode_IconTop==vt;
bool isSimpleTree=ItemView::Mode_SimpleTree==vt || ItemView::Mode_BasicTree==vt;
libraryArtistImage->setEnabled(!isIcon && !isSimpleTree);
@@ -519,30 +537,6 @@ void InterfaceSettings::libraryViewChanged()
}
}
-void InterfaceSettings::libraryCoverSizeChanged()
-{
- if (ItemView::Mode_IconTop==getValue(libraryView) && 0==libraryCoverSize->currentIndex()) {
- libraryView->setCurrentIndex(1);
- }
- if (0==libraryCoverSize->currentIndex()) {
- libraryArtistImage->setChecked(false);
- }
-}
-
-void InterfaceSettings::albumsViewChanged()
-{
- if (ItemView::Mode_IconTop==getValue(albumsView) && 0==albumsCoverSize->currentIndex()) {
- albumsCoverSize->setCurrentIndex(2);
- }
-}
-
-void InterfaceSettings::albumsCoverSizeChanged()
-{
- if (ItemView::Mode_IconTop==getValue(albumsView) && 0==albumsCoverSize->currentIndex()) {
- albumsView->setCurrentIndex(1);
- }
-}
-
void InterfaceSettings::playQueueViewChanged()
{
bool grouped=ItemView::Mode_GroupedTree==getValue(playQueueView);
@@ -566,6 +560,11 @@ void InterfaceSettings::touchFriendlyChanged()
touchFriendlyNoteLabel->setOn(touchFriendly->isChecked()!=Settings::self()->touchFriendly());
}
+void InterfaceSettings::retinaSupportChanged()
+{
+ retinaSupportNoteLabel->setOn(retinaSupport->isChecked()!=Settings::self()->retinaSupport());
+}
+
void InterfaceSettings::enableStartupState()
{
if (systemTrayCheckBox && minimiseOnClose && startupState) {
diff --git a/gui/interfacesettings.h b/gui/interfacesettings.h
index ba5b9b9..6c2a018 100644
--- a/gui/interfacesettings.h
+++ b/gui/interfacesettings.h
@@ -49,13 +49,11 @@ private:
private Q_SLOTS:
void libraryViewChanged();
- void libraryCoverSizeChanged();
- void albumsViewChanged();
- void albumsCoverSizeChanged();
void playlistsViewChanged();
void playQueueViewChanged();
void forceSingleClickChanged();
void touchFriendlyChanged();
+ void retinaSupportChanged();
void enableStartupState();
void langChanged();
void viewItemChanged(QListWidgetItem *changedItem);
diff --git a/gui/interfacesettings.ui b/gui/interfacesettings.ui
index 27b0d61..0641223 100644
--- a/gui/interfacesettings.ui
+++ b/gui/interfacesettings.ui
@@ -56,375 +56,293 @@
<widget class="QListWidget" name="views"/>
</item>
<item>
- <spacer name="verticalSpacer_xx">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
+ <widget class="NoteLabel" name="sbPlayQueueLabel">
+ <property name="text">
+ <string>By default, the play queue appears to the side of the other views, and the Info view is accessible by pressing its icon in the main toolbar. Checking the appropriate option above will cause the view to be merged into the sidebar as per other views.</string>
</property>
- </spacer>
+ </widget>
</item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="optionsGroup">
+ <property name="title">
+ <string>Options</string>
+ </property>
+ <layout class="QHBoxLayout" name="sbLayout">
<item>
- <widget class="StateLabel" name="sbPlayQueueLabel">
- <property name="text">
- <string><i><b>NOTE:</b> By default, the play queue appears to the side of the other views. If you enable the option above, then it will be merged into the sidebar as per other views.</i></string>
+ <layout class="QFormLayout" name="styleLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
+ <item row="0" column="0">
+ <widget class="BuddyLabel" name="sbStyleLabel">
+ <property name="text">
+ <string>Style:</string>
+ </property>
+ <property name="buddy">
+ <cstring>sbStyle</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="sbStyle"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="BuddyLabel" name="sbPositionLabel">
+ <property name="text">
+ <string>Position:</string>
+ </property>
+ <property name="buddy">
+ <cstring>sbPosition</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="sbPosition"/>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QCheckBox" name="sbIconsOnly">
+ <property name="text">
+ <string>Only show icons, no text</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QCheckBox" name="sbMonoIcons">
+ <property name="text">
+ <string>Use monochrome icons</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QCheckBox" name="sbAutoHide">
+ <property name="text">
+ <string>Auto-hide</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>Views</string>
+ </attribute>
+ <layout class="QGridLayout" name="viewsLayout">
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="artistsViewGroupBox">
+ <property name="title">
+ <string>Artists</string>
+ </property>
+ <layout class="QFormLayout" name="artistsViewLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <property name="formAlignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
+ <item row="0" column="0">
+ <widget class="BuddyLabel" name="label">
+ <property name="text">
+ <string>Style:</string>
</property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <property name="buddy">
+ <cstring>libraryView</cstring>
</property>
</widget>
</item>
- <item>
- <spacer name="verticalSpacer_x">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="libraryView"/>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QCheckBox" name="libraryYear">
+ <property name="text">
+ <string>Sort albums by year</string>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QCheckBox" name="libraryArtistImage">
+ <property name="text">
+ <string>Show artist images</string>
</property>
- </spacer>
+ </widget>
</item>
- <item>
- <widget class="StateLabel" name="sbInfoLabel">
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="albumsViewGroupBox">
+ <property name="title">
+ <string>Albums</string>
+ </property>
+ <layout class="QFormLayout" name="albumsViewLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <property name="formAlignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
+ <item row="0" column="0">
+ <widget class="BuddyLabel" name="label_xx">
<property name="text">
- <string><i><b>NOTE:</b> By default, the 'Info' (current song information) view is accessible by pressing its icon in the main toolbar. If you enable the option above, then it will be merged into the sidebar as per other views.</i></string>
+ <string>Style:</string>
</property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ <property name="buddy">
+ <cstring>albumsView</cstring>
</property>
- <property name="wordWrap">
- <bool>true</bool>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="albumsView"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="BuddyLabel" name="label_5x">
+ <property name="text">
+ <string>Sort:</string>
</property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <property name="buddy">
+ <cstring>albumSort</cstring>
</property>
</widget>
</item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="albumSort"/>
+ </item>
</layout>
</widget>
</item>
- <item>
- <widget class="QGroupBox" name="optionsGroup">
+ <item row="2" column="0">
+ <widget class="QGroupBox" name="playlistsViewGroupBox">
<property name="title">
- <string>Options</string>
+ <string>Playlists</string>
</property>
- <layout class="QFormLayout" name="styleLayout">
+ <layout class="QFormLayout" name="playlistsViewLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
+ <property name="formAlignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
<item row="0" column="0">
- <widget class="BuddyLabel" name="sbStyleLabel">
+ <widget class="BuddyLabel" name="label_3">
<property name="text">
<string>Style:</string>
</property>
<property name="buddy">
- <cstring>sbStyle</cstring>
+ <cstring>playlistsView</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="playlistsView"/>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QCheckBox" name="playListsStartClosed">
+ <property name="text">
+ <string>Initially collapse albums</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>removeWidget
+ <item row="3" column="0">
+ <widget class="QGroupBox" name="otherViewGroupBox">
+ <property name="title">
+ <string>Other Views</string>
+ </property>
+ <layout class="QFormLayout" name="otherViewLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <property name="formAlignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
+ <item row="0" column="0">
+ <widget class="BuddyLabel" name="folderViewLabel">
+ <property name="text">
+ <string>Folders:</string>
+ </property>
+ <property name="buddy">
+ <cstring>folderView</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
- <widget class="QComboBox" name="sbStyle"/>
+ <widget class="QComboBox" name="folderView"/>
</item>
<item row="1" column="0">
- <widget class="BuddyLabel" name="sbPositionLabel">
+ <widget class="BuddyLabel" name="streamsViewLabel">
<property name="text">
- <string>Position:</string>
+ <string>Streams:</string>
</property>
<property name="buddy">
- <cstring>sbPosition</cstring>
+ <cstring>streamsView</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
- <widget class="QComboBox" name="sbPosition"/>
+ <widget class="QComboBox" name="streamsView"/>
</item>
- <item row="2" column="0" colspan="2">
- <widget class="QCheckBox" name="sbIconsOnly">
+ <item row="2" column="0">
+ <widget class="BuddyLabel" name="onlineViewLabel">
<property name="text">
- <string>Only show icons, no text</string>
+ <string>Online:</string>
+ </property>
+ <property name="buddy">
+ <cstring>onlineView</cstring>
</property>
</widget>
</item>
- <item row="3" column="0" colspan="2">
- <widget class="QCheckBox" name="sbMonoIcons">
+ <item row="2" column="1">
+ <widget class="QComboBox" name="onlineView"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="BuddyLabel" name="devicesViewLabel">
<property name="text">
- <string>Use monochrome icons</string>
+ <string>Devices:</string>
+ </property>
+ <property name="buddy">
+ <cstring>devicesView</cstring>
</property>
</widget>
</item>
- <item row="4" column="0" colspan="2">
- <widget class="QCheckBox" name="sbAutoHide">
+ <item row="3" column="1">
+ <widget class="QComboBox" name="devicesView"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_5">
<property name="text">
- <string>Auto-hide</string>
+ <string>Search:</string>
</property>
</widget>
</item>
+ <item row="4" column="1">
+ <widget class="QComboBox" name="searchView"/>
+ </item>
</layout>
</widget>
</item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab">
- <attribute name="title">
- <string>Artists</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="BuddyLabel" name="label">
- <property name="text">
- <string>Style:</string>
- </property>
- <property name="buddy">
- <cstring>libraryView</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="libraryView"/>
- </item>
- <item row="1" column="0">
- <widget class="BuddyLabel" name="label_5b">
- <property name="text">
- <string>Covers:</string>
- </property>
- <property name="buddy">
- <cstring>libraryCoverSize</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="libraryCoverSize"/>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QCheckBox" name="libraryArtistImage">
- <property name="text">
- <string>Show artist images</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QCheckBox" name="libraryYear">
- <property name="text">
- <string>Sort albums by year</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
+ <item row="4" column="0">
+ <spacer name="verticalSpacer_3xx">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
<property name="sizeHint" stdset="0">
<size>
- <width>20</width>
- <height>4</height>
+ <width>2</width>
+ <height>0</height>
</size>
</property>
</spacer>
</item>
- <item>
- <widget class="QLabel" name="label_8">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string><i><b>NOTE:</b> When looking for artist images, Cantata will look for either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,
-within the folder of the current track, or within its parent folder. If no image is found, Cantata will attempt to download one.</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_2">
- <attribute name="title">
- <string>Albums</string>
- </attribute>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="BuddyLabel" name="label_3a">
- <property name="text">
- <string>Style:</string>
- </property>
- <property name="buddy">
- <cstring>albumsView</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="albumsView"/>
- </item>
- <item row="1" column="0">
- <widget class="BuddyLabel" name="label_5c">
- <property name="text">
- <string>Covers:</string>
- </property>
- <property name="buddy">
- <cstring>albumsCoverSize</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="albumsCoverSize"/>
- </item>
- <item row="2" column="0">
- <widget class="BuddyLabel" name="label_5x">
- <property name="text">
- <string>Sort albums:</string>
- </property>
- <property name="buddy">
- <cstring>albumSort</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="albumSort"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_6">
- <attribute name="title">
- <string>Playlists</string>
- </attribute>
- <layout class="QFormLayout" name="formLayout_6">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="BuddyLabel" name="label_3">
- <property name="text">
- <string>Style:</string>
- </property>
- <property name="buddy">
- <cstring>playlistsView</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="playlistsView"/>
- </item>
- <item row="1" column="0" colspan="2">
- <widget class="QCheckBox" name="playListsStartClosed">
- <property name="text">
- <string>Initially collapse albums</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_3">
- <attribute name="title">
- <string>Other Views</string>
- </attribute>
- <layout class="QFormLayout" name="formLayout_3">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="BuddyLabel" name="folderViewLabel">
- <property name="text">
- <string>Folder view style:</string>
- </property>
- <property name="buddy">
- <cstring>folderView</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="folderView"/>
- </item>
- <item row="1" column="0">
- <widget class="BuddyLabel" name="streamsViewLabel">
- <property name="text">
- <string>Streams view style:</string>
- </property>
- <property name="buddy">
- <cstring>streamsView</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="streamsView"/>
- </item>
- <item row="2" column="0">
- <widget class="BuddyLabel" name="onlineViewLabel">
- <property name="text">
- <string>Online view style:</string>
- </property>
- <property name="buddy">
- <cstring>onlineView</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="onlineView"/>
- </item>
- <item row="3" column="0">
- <widget class="BuddyLabel" name="devicesViewLabel">
- <property name="text">
- <string>Devices view style:</string>
- </property>
- <property name="buddy">
- <cstring>devicesView</cstring>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QComboBox" name="devicesView"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Search view style:</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="searchView"/>
- </item>
</layout>
</widget>
<widget class="QWidget" name="tab_5">
@@ -477,6 +395,29 @@ within the folder of the current track, or within its parent folder. If no image
</widget>
</item>
<item row="5" column="0" colspan="2">
+ <widget class="QCheckBox" name="playQueueSearch">
+ <property name="text">
+ <string>Separate action (and shortcut) for play queue search</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <spacer name="macSpacerHack">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>2</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="7" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
@@ -643,6 +584,37 @@ within the folder of the current track, or within its parent folder. If no image
</item>
</layout>
</widget>
+ <widget class="QWidget" name="toolbarTab">
+ <attribute name="title">
+ <string>Toolbar</string>
+ </attribute>
+ <layout class="QFormLayout" name="toolbarTabLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="showStopButton">
+ <property name="text">
+ <string>Show stop button</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QCheckBox" name="showCoverWidget">
+ <property name="text">
+ <string>Show cover of current track</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QCheckBox" name="showRatingWidget">
+ <property name="text">
+ <string>Show track rating</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
<widget class="QWidget" name="tab_7">
<attribute name="title">
<string>External</string>
@@ -712,8 +684,8 @@ within the folder of the current track, or within its parent folder. If no image
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>20</width>
- <height>90</height>
+ <width>2</width>
+ <height>2</height>
</size>
</property>
</spacer>
@@ -768,52 +740,45 @@ within the folder of the current track, or within its parent folder. If no image
</widget>
</item>
<item row="4" column="0" colspan="2">
- <widget class="QCheckBox" name="cacheScaledCovers">
- <property name="text">
- <string>Cache scaled covers</string>
- </property>
- </widget>
- </item>
- <item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="showDeleteAction">
<property name="text">
<string>Show delete action in context menus</string>
</property>
</widget>
</item>
- <item row="6" column="0" colspan="2">
+ <item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="forceSingleClick">
<property name="text">
<string>Enforce single-click activation of items</string>
</property>
</widget>
</item>
- <item row="7" column="0" colspan="2">
+ <item row="6" column="0" colspan="2">
<widget class="QCheckBox" name="touchFriendly">
<property name="toolTip">
<string><p>This will change Cantata's interface as detailed:
-<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views will be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not just when item is under mouse)</li><li>Spin buttons with have + and - buttons at the side of the text field</li></ul></p></string>
+<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views will be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not just when item is under mouse)</li><li>Spin buttons will have + and - buttons at the side of the text field</li></ul></p></string>
</property>
<property name="text">
<string>Make interface more touch friendly</string>
</property>
</widget>
</item>
- <item row="8" column="0" colspan="2">
- <widget class="QCheckBox" name="showStopButton">
+ <item row="7" column="0" colspan="2">
+ <widget class="QCheckBox" name="infoTooltips">
<property name="text">
- <string>Show stop button in toolbar</string>
+ <string>Show song information tooltips</string>
</property>
</widget>
</item>
- <item row="9" column="0" colspan="2">
- <widget class="QCheckBox" name="showCoverWidget">
+ <item row="8" column="0" colspan="2">
+ <widget class="QCheckBox" name="retinaSupport">
<property name="text">
- <string>Show cover of current track in toolbar</string>
+ <string>Support retina displays</string>
</property>
</widget>
</item>
- <item row="10" column="0">
+ <item row="9" column="0">
<widget class="BuddyLabel" name="langLabel">
<property name="text">
<string>Language:</string>
@@ -823,104 +788,36 @@ within the folder of the current track, or within its parent folder. If no image
</property>
</widget>
</item>
- <item row="10" column="1">
+ <item row="9" column="1">
<widget class="QComboBox" name="lang"/>
</item>
</layout>
</item>
<item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="StateLabel" name="singleClickLabel">
+ <widget class="NoteLabel" name="singleClickLabel">
<property name="text">
- <string><i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' setting will require a re-start of Cantata.</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Changing the 'Enforce single-click activation of items' setting will require a re-start of Cantata.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_2b">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="StateLabel" name="langNoteLabel">
+ <widget class="NoteLabel" name="langNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> Changing the language setting will require a re-start of Cantata.</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Changing the language setting will require a re-start of Cantata.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_2tf">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
+ <widget class="NoteLabel" name="touchFriendlyNoteLabel">
+ <property name="text">
+ <string>Changing the 'touch friendly' setting will require a re-start of Cantata.</string>
</property>
- </spacer>
+ </widget>
</item>
<item>
- <widget class="StateLabel" name="touchFriendlyNoteLabel">
+ <widget class="NoteLabel" name="retinaSupportNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-start of Cantata.</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Enabling support for retina displays will produce sharper icons on the retina display, but may produce less sharp icons on non-retina displays. Changing this setting will require a re-start of Cantata.</string>
</property>
</widget>
</item>
@@ -950,9 +847,9 @@ within the folder of the current track, or within its parent folder. If no image
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
- <class>StateLabel</class>
+ <class>NoteLabel</class>
<extends>QLabel</extends>
- <header>widgets/statelabel.h</header>
+ <header>widgets/notelabel.h</header>
</customwidget>
<customwidget>
<class>PathRequester</class>
diff --git a/gui/librarypage.cpp b/gui/librarypage.cpp
index 19ef34e..03bf801 100644
--- a/gui/librarypage.cpp
+++ b/gui/librarypage.cpp
@@ -43,7 +43,6 @@ LibraryPage::LibraryPage(QWidget *p)
replacePlayQueue->setDefaultAction(StdActions::self()->replacePlayQueueAction);
view->addAction(StdActions::self()->addToPlayQueueAction);
- view->addAction(StdActions::self()->addRandomToPlayQueueAction);
view->addAction(StdActions::self()->replacePlayQueueAction);
view->addAction(StdActions::self()->addWithPriorityAction);
view->addAction(StdActions::self()->addToStoredPlaylistAction);
@@ -58,9 +57,7 @@ LibraryPage::LibraryPage(QWidget *p)
#endif
view->addAction(StdActions::self()->setCoverAction);
#ifdef ENABLE_DEVICES_SUPPORT
- QAction *sep=new QAction(this);
- sep->setSeparator(true);
- view->addAction(sep);
+ view->addSeparator();
view->addAction(StdActions::self()->deleteSongsAction);
#endif
#endif // TAGLIB_FOUND
@@ -68,10 +65,10 @@ LibraryPage::LibraryPage(QWidget *p)
connect(this, SIGNAL(add(const QStringList &, bool, quint8)), MPDConnection::self(), SLOT(add(const QStringList &, bool, quint8)));
connect(this, SIGNAL(addSongsToPlaylist(const QString &, const QStringList &)), MPDConnection::self(), SLOT(addToPlaylist(const QString &, const QStringList &)));
connect(genreCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(searchItems()));
- connect(MPDConnection::self(), SIGNAL(updatingLibrary()), this, SLOT(showSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatedLibrary()), this, SLOT(hideSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatingDatabase()), this, SLOT(showSpinner()));
- connect(MPDConnection::self(), SIGNAL(updatedDatabase()), this, SLOT(hideSpinner()));
+ connect(MPDConnection::self(), SIGNAL(updatingLibrary()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatedLibrary()), view, SLOT(updated()));
+ connect(MPDConnection::self(), SIGNAL(updatingDatabase()), view, SLOT(updating()));
+ connect(MPDConnection::self(), SIGNAL(updatedDatabase()), view, SLOT(updated()));
connect(MusicLibraryModel::self(), SIGNAL(updateGenres(const QSet<QString> &)), genreCombo, SLOT(update(const QSet<QString> &)));
connect(this, SIGNAL(loadLibrary()), MPDConnection::self(), SLOT(loadLibrary()));
connect(view, SIGNAL(itemsSelected(bool)), this, SLOT(controlActions()));
@@ -88,37 +85,15 @@ LibraryPage::~LibraryPage()
view->save(metaObject()->className());
}
-void LibraryPage::setView(int v)
-{
- setItemSize(v);
- view->setMode((ItemView::Mode)v);
- MusicLibraryModel::self()->setLargeImages(ItemView::Mode_IconTop==v);
-}
-
void LibraryPage::showEvent(QShowEvent *e)
{
view->focusView();
QWidget::showEvent(e);
}
-void LibraryPage::setItemSize(int v)
-{
- if (ItemView::Mode_IconTop!=v) {
- MusicLibraryItemAlbum::setItemSize(QSize(0, 0));
- } else {
- QFontMetrics fm(font());
-
- int size=MusicLibraryItemAlbum::iconSize(true);
- QSize grid(size+8, size+(fm.height()*2.5));
- view->setGridSize(grid);
- MusicLibraryItemAlbum::setItemSize(grid-QSize(4, 4));
- }
-}
-
void LibraryPage::refresh()
{
view->goToTop();
-
if (!MusicLibraryModel::self()->fromXML()) {
emit loadLibrary();
}
@@ -135,73 +110,13 @@ static inline QString nameKey(const QString &artist, const QString &album)
return '{'+artist+"}{"+album+'}';
}
-QStringList LibraryPage::selectedFiles(bool allowPlaylists, bool randomAlbums) const
+QStringList LibraryPage::selectedFiles(bool allowPlaylists) const
{
QModelIndexList selected = view->selectedIndexes();
if (selected.isEmpty()) {
return QStringList();
}
-
- bool filteredOnly=proxy.enabled() && Settings::self()->filteredOnly();
- QModelIndexList mapped=proxy.mapToSource(selected, filteredOnly);
- if (randomAlbums) {
- if (filteredOnly) {
- QMap<quint32, QModelIndexList> albums;
- foreach (const QModelIndex &idx, mapped) {
- if (idx.parent().isValid() && idx.parent().parent().isValid()) {
- albums[(idx.parent().parent().row()<<16)+idx.parent().row()].append(idx);
- }
- }
- QList<quint32> keys=albums.keys();
- if (keys.isEmpty()) {
- return QStringList();
- } else if (1==keys.count()) {
- mapped=albums.begin().value();
- } else {
- mapped.clear();
- while (!keys.isEmpty()) {
- mapped.append(albums[keys.takeAt(Utils::random(keys.count()))]);
- }
- }
- } else {
- QModelIndexList albumIndexes;
- QSet<QString> albumNames;
- foreach (const QModelIndex &idx, mapped) {
- MusicLibraryItem *item=static_cast<MusicLibraryItem *>(idx.internalPointer());
- if (MusicLibraryItem::Type_Album==item->itemType()) {
- QString name=nameKey(item->parentItem()->data(), item->data());
- if (!albumNames.contains(name)) {
- albumNames.insert(name);
- albumIndexes.append(idx);
- }
- } else if (MusicLibraryItem::Type_Artist==item->itemType()) {
- for (int row=0; row<static_cast<MusicLibraryItemContainer *>(item)->childCount(); ++row) {
- MusicLibraryItem *album=static_cast<MusicLibraryItemContainer *>(item)->childItem(row);
- QString name=nameKey(item->data(), album->data());
- if (!albumNames.contains(name)) {
- albumNames.insert(name);
- albumIndexes.append(MusicLibraryModel::self()->index(row, 0, idx));
- }
- }
- }
- }
-
- if (albumIndexes.isEmpty()) {
- return QStringList();
- }
-
- if (1==albumIndexes.count()) {
- mapped=albumIndexes;
- } else {
- mapped.clear();
- while (!albumIndexes.isEmpty()) {
- mapped.append(albumIndexes.takeAt(Utils::random(albumIndexes.count())));
- }
- }
- }
- }
-
- return MusicLibraryModel::self()->filenames(mapped, allowPlaylists);
+ return MusicLibraryModel::self()->filenames(proxy.mapToSource(selected, proxy.enabled() && Settings::self()->filteredOnly()), allowPlaylists);
}
QList<Song> LibraryPage::selectedSongs(bool allowPlaylists) const
@@ -232,9 +147,9 @@ Song LibraryPage::coverRequest() const
return Song();
}
-void LibraryPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void LibraryPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- QStringList files=selectedFiles(name.isEmpty(), randomAlbums);
+ QStringList files=selectedFiles(name.isEmpty());
if (!files.isEmpty()) {
if (name.isEmpty()) {
@@ -262,7 +177,7 @@ void LibraryPage::deleteSongs()
QList<Song> songs=selectedSongs();
if (!songs.isEmpty()) {
- if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\nThis cannot be undone."),
+ if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to delete the selected songs?\n\nThis cannot be undone."),
i18n("Delete Songs"), StdGuiItem::del(), StdGuiItem::cancel())) {
emit deleteSongs(QString(), songs);
}
@@ -337,7 +252,6 @@ void LibraryPage::showAlbum(const QString &artist, const QString &album)
}
}
-
void LibraryPage::itemDoubleClicked(const QModelIndex &)
{
const QModelIndexList selected = view->selectedIndexes(false); // Dont need sorted selection here...
@@ -414,17 +328,4 @@ void LibraryPage::controlActions()
}
}
}
- StdActions::self()->addRandomToPlayQueueAction->setEnabled(allowRandomAlbum);
-}
-
-void LibraryPage::showSpinner()
-{
- view->showSpinner();
- view->showMessage(i18n("Updating..."), -1);
-}
-
-void LibraryPage::hideSpinner()
-{
- view->hideSpinner();
- view->showMessage(QString(), 0);
}
diff --git a/gui/librarypage.h b/gui/librarypage.h
index dbb08b9..6a87af5 100644
--- a/gui/librarypage.h
+++ b/gui/librarypage.h
@@ -40,21 +40,22 @@ public:
void refresh();
void clear();
- QStringList selectedFiles(bool allowPlaylists=false, bool randomAlbums=false) const;
+ QStringList selectedFiles(bool allowPlaylists=false) const;
QList<Song> selectedSongs(bool allowPlaylists=false) const;
Song coverRequest() const;
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
#ifdef ENABLE_DEVICES_SUPPORT
void addSelectionToDevice(const QString &udi);
void deleteSongs();
#endif
- void setView(int v);
+ void setView(int v) { view->setMode((ItemView::Mode)v); }
ItemView::Mode viewMode() const { return view->viewMode(); }
void showSongs(const QList<Song> &songs);
void showArtist(const QString &artist);
void showAlbum(const QString &artist, const QString &album);
void focusSearch() { view->focusSearch(); }
void showEvent(QShowEvent *e);
+ void resort() { proxy.resort(); }
private:
void setItemSize(int v);
@@ -73,8 +74,6 @@ public Q_SLOTS:
void searchItems();
void controlActions();
void updateGenres(const QModelIndex &);
- void showSpinner();
- void hideSpinner();
private:
MusicLibraryProxyModel proxy;
diff --git a/gui/main.cpp b/gui/main.cpp
index f503ea2..2e1efd8 100644
--- a/gui/main.cpp
+++ b/gui/main.cpp
@@ -53,6 +53,9 @@
#ifdef ENABLE_DYNAMIC
#include "dynamic/dynamic.h"
#endif
+#ifdef ENABLE_DEVICES_SUPPORT
+#include "models/devicesmodel.h"
+#endif
#include "streams/streamfetcher.h"
#include "http/httpserver.h"
#include "widgets/songdialog.h"
@@ -63,6 +66,9 @@
#endif
#include "context/contextwidget.h"
#include "scrobbling/scrobbler.h"
+#ifndef ENABLE_KDE_SUPPORT
+#include "gui/mediakeys.h"
+#endif
#include <QMutex>
#include <QMutexLocker>
@@ -98,11 +104,19 @@ static void cantataQtMsgHandler(QtMsgType, const QMessageLogContext &, const QSt
class PoTranslator : public QTranslator
{
public:
+ #if QT_VERSION < 0x050000
QString translate(const char *context, const char *sourceText, const char *disambiguation = 0) const
{
QString ret = QTranslator::translate(context, sourceText, disambiguation);
return !ret.isEmpty() ? ret : QTranslator::translate(NULL, sourceText, disambiguation);
}
+ #else
+ QString translate(const char *context, const char *sourceText, const char *disambiguation = 0, int n=-1) const
+ {
+ QString ret = QTranslator::translate(context, sourceText, disambiguation, n);
+ return !ret.isEmpty() ? ret : QTranslator::translate(NULL, sourceText, disambiguation, n);
+ }
+ #endif
};
static void loadTranslation(const QString &prefix, const QString &path, const QString &overrideLanguage = QString())
@@ -119,7 +133,6 @@ static void loadTranslation(const QString &prefix, const QString &path, const QS
QString language = overrideLanguage.isEmpty() ? QLocale::system().name() : overrideLanguage;
QTranslator *t = new PoTranslator;
-
if (t->load(prefix+"_"+language, path)) {
QCoreApplication::installTranslator(t);
} else {
@@ -150,9 +163,11 @@ enum Debug {
Dbg_Threads = 0x00004000,
Dbg_Tags = 0x00008000,
Dbg_Scrobbling = 0x00010000,
+ Dbg_Devices = 0x00020000,
+ DBG_Other = 0x00040000,
// NOTE: MUST UPDATE Dbg_All IF ADD NEW ITEMS!!!
- Dbg_All = 0x0001FFFF
+ Dbg_All = 0x0007FFFF
};
static void installDebugMessageHandler()
@@ -224,6 +239,16 @@ static void installDebugMessageHandler()
if (dbg&Dbg_Scrobbling) {
Scrobbler::enableDebug();
}
+ #ifdef ENABLE_DEVICES_SUPPORT
+ if (dbg&Dbg_Devices) {
+ DevicesModel::enableDebug();
+ }
+ #endif
+ #ifndef ENABLE_KDE_SUPPORT
+ if (dbg&DBG_Other) {
+ MediaKeys::enableDebug();
+ }
+ #endif
if (dbg&Dbg_All && logToFile) {
#if QT_VERSION < 0x050000
qInstallMsgHandler(cantataQtMsgHandler);
@@ -272,11 +297,7 @@ int main(int argc, char *argv[])
#else // ENABLE_KDE_SUPPORT
QCoreApplication::setApplicationName(PACKAGE_NAME);
- #ifdef Q_OS_WIN
- QCoreApplication::setOrganizationName("mpd");
- #else
- QCoreApplication::setOrganizationName(PACKAGE_NAME);
- #endif
+ QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
Application app(argc, argv);
if (!app.start()) {
@@ -302,13 +323,11 @@ int main(int argc, char *argv[])
installDebugMessageHandler();
// Translations
- QString lang=qgetenv("CANTATA_LANG");
- if (lang.isEmpty()) {
- lang=Settings::self()->lang();
- }
- loadTranslation("qt", QLibraryInfo::location(QLibraryInfo::TranslationsPath), lang);
- #ifdef Q_OS_WIN
+ QString lang=Settings::self()->lang();
+ #if defined Q_OS_WIN || defined Q_OS_MAC
loadTranslation("qt", CANTATA_SYS_TRANS_DIR, lang);
+ #else
+ loadTranslation("qt", QLibraryInfo::location(QLibraryInfo::TranslationsPath), lang);
#endif
loadTranslation("cantata", CANTATA_SYS_TRANS_DIR, lang);
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 4addc5d..d3eefaa 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -84,11 +84,21 @@
#ifdef QT_QTDBUS_FOUND
#include "dbus/mpris.h"
#include "cantataadaptor.h"
+#ifdef Q_OS_LINUX
#include "dbus/powermanagement.h"
#endif
+#endif
#if !defined Q_OS_WIN && !defined Q_OS_MAC
#include "devices/mountpoints.h"
#endif
+#ifdef Q_OS_MAC
+#include "support/windowmanager.h"
+#include "support/osxstyle.h"
+#include "mac/dockmenu.h"
+#ifdef IOKIT_FOUND
+#include "mac/powermanagement.h"
+#endif
+#endif
#ifdef ENABLE_DYNAMIC
#include "dynamic/dynamicpage.h"
#include "dynamic/dynamic.h"
@@ -104,29 +114,25 @@
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
#include "mpd/httpstream.h"
#endif
-#ifdef Q_OS_WIN
-static void raiseWindow(QWidget *w);
-#endif
#include <QSet>
#include <QString>
#include <QTimer>
#include <QToolBar>
-#if defined Q_OS_MAC && QT_VERSION >= 0x050000
-// QMacNativeToolBar requres Qt Mac Extras to be installed on Qt 5.0 and 5.1.
-#include <QMacNativeToolBar>
-#endif
#if QT_VERSION >= 0x050000
#include <QProcess>
+#ifdef Q_OS_WIN
+#include "windows/thumbnailtoolbar.h"
+#endif
#endif
#include <QDialogButtonBox>
#include <QKeyEvent>
+#include <QSpacerItem>
#ifdef ENABLE_KDE_SUPPORT
#include <KDE/KApplication>
#include <KDE/KStandardAction>
#include <KDE/KMenuBar>
#include <KDE/KMenu>
#include <KDE/KShortcutsDialog>
-#include <KDE/KWindowSystem>
#include <KDE/KToggleAction>
#else
#include <QMenuBar>
@@ -145,6 +151,8 @@ static int nextKey(int &key)
return k;
}
+static const char *constRatingKey="rating";
+
MainWindow::MainWindow(QWidget *parent)
: MAIN_WINDOW_BASE_CLASS(parent)
, prevPage(-1)
@@ -168,15 +176,14 @@ MainWindow::MainWindow(QWidget *parent)
, contextSwitchTime(0)
, connectedState(CS_Init)
, stopAfterCurrent(false)
+ #if defined Q_OS_WIN && QT_VERSION >= 0x050000
+ , thumbnailTooolbar(0)
+ #endif
{
QPoint p=pos();
ActionCollection::setMainWidget(this);
trayItem=new TrayItem(this);
- #ifdef ENABLE_KDE_SUPPORT
- bool menuIcons=true;
- #else
- bool menuIcons=!QCoreApplication::testAttribute(Qt::AA_DontShowIconsInMenus);
- #endif
+ UNITY_MENU_ICON_CHECK
#ifdef QT_QTDBUS_FOUND
new CantataAdaptor(this);
QDBusConnection::sessionBus().registerObject("/cantata", this);
@@ -191,17 +198,21 @@ MainWindow::MainWindow(QWidget *parent)
MPDParseUtils::setGroupSingle(Settings::self()->groupSingle());
Song::setUseComposer(Settings::self()->useComposer());
+ int hSpace=Utils::layoutSpacing(this);
+ int vSpace=fontMetrics().height()<14 ? hSpace/2 : 0;
+ toolbarLayout->setContentsMargins(hSpace, vSpace, hSpace, vSpace);
#ifdef Q_OS_WIN
GtkStyle::applyTheme(this); // Despite its name, it *might* also apply touch style to spinboxes...
+ toolbar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
#else
- #if defined Q_OS_MAC && QT_VERSION>=0x050000
- QMacNativeToolBar *topToolBar = new QMacNativeToolBar(this);
- topToolBar->showInWindowForWidget(this);
- #else // defined Q_OS_MAC && QT_VERSION>=0x050000
setUnifiedTitleAndToolBarOnMac(true);
QToolBar *topToolBar = addToolBar("ToolBar");
- #endif // defined Q_OS_MAC && QT_VERSION>=0x050000
- toolbar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ #ifdef Q_OS_MAC
+ WindowManager *wm=new WindowManager(topToolBar);
+ wm->initialize(WindowManager::WM_DRAG_MENU_AND_TOOLBAR);
+ wm->registerWidgetAndChildren(topToolBar);
+ #endif
+ toolbar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
topToolBar->setObjectName("MainToolBar");
topToolBar->addWidget(toolbar);
topToolBar->setMovable(false);
@@ -230,13 +241,13 @@ MainWindow::MainWindow(QWidget *parent)
setWindowIcon(Icons::self()->appIcon);
prefAction=ActionCollection::get()->createAction("configure", Utils::KDE==Utils::currentDe() ? i18n("Configure Cantata...") : i18n("Preferences"),
- menuIcons ? Icons::self()->configureIcon : Icon());
- connect(prefAction, SIGNAL(triggered(bool)),this, SLOT(showPreferencesDialog()));
- quitAction = ActionCollection::get()->createAction("quit", i18n("Quit"), menuIcons ? "application-exit" : "");
- connect(quitAction, SIGNAL(triggered(bool)), this, SLOT(quit()));
+ HIDE_MENU_ICON(Icons::self()->configureIcon));
+ connect(prefAction, SIGNAL(triggered()),this, SLOT(showPreferencesDialog()));
+ quitAction = ActionCollection::get()->createAction("quit", i18n("Quit"), HIDE_MENU_ICON_NAME("application-exit"));
+ connect(quitAction, SIGNAL(triggered()), this, SLOT(quit()));
quitAction->setShortcut(QKeySequence::Quit);
- Action *aboutAction=ActionCollection::get()->createAction("about", i18nc("Qt-only", "About Cantata..."), menuIcons ? Icons::self()->appIcon : Icon());
- connect(aboutAction, SIGNAL(triggered(bool)),this, SLOT(showAboutDialog()));
+ Action *aboutAction=ActionCollection::get()->createAction("about", i18nc("Qt-only", "About Cantata..."), HIDE_MENU_ICON(Icons::self()->appIcon));
+ connect(aboutAction, SIGNAL(triggered()),this, SLOT(showAboutDialog()));
#ifdef Q_OS_MAC
prefAction->setMenuRole(QAction::PreferencesRole);
quitAction->setMenuRole(QAction::QuitRole);
@@ -244,59 +255,77 @@ MainWindow::MainWindow(QWidget *parent)
#endif
#endif // ENABLE_KDE_SUPPORT
restoreAction = ActionCollection::get()->createAction("showwindow", i18n("Show Window"));
- connect(restoreAction, SIGNAL(triggered(bool)), this, SLOT(restoreWindow()));
+ connect(restoreAction, SIGNAL(triggered()), this, SLOT(restoreWindow()));
- serverInfoAction=ActionCollection::get()->createAction("mpdinfo", i18n("Server information..."), menuIcons ? "network-server" : "");
- connect(serverInfoAction, SIGNAL(triggered(bool)),this, SLOT(showServerInfo()));
+ serverInfoAction=ActionCollection::get()->createAction("mpdinfo", i18n("Server information..."), HIDE_MENU_ICON_NAME("network-server"));
+ connect(serverInfoAction, SIGNAL(triggered()),this, SLOT(showServerInfo()));
serverInfoAction->setEnabled(Settings::self()->firstRun());
- refreshDbAction = ActionCollection::get()->createAction("refresh", i18n("Refresh Database"), menuIcons ? "view-refresh" : "");
+ refreshDbAction = ActionCollection::get()->createAction("refresh", i18n("Refresh Database"), HIDE_MENU_ICON_NAME("view-refresh"));
doDbRefreshAction = new Action(refreshDbAction->icon(), i18n("Refresh"), this);
+ dbFullRefreshAction= new Action(refreshDbAction->icon(), i18n("Full Refresh"), this);
refreshDbAction->setEnabled(false);
connectAction = ActionCollection::get()->createAction("connect", i18n("Connect"), Icons::self()->connectIcon);
- connectionsAction = ActionCollection::get()->createAction("connections", i18n("Collection"), menuIcons ? "network-server" : "");
- outputsAction = ActionCollection::get()->createAction("outputs", i18n("Outputs"), menuIcons ? Icons::self()->speakerIcon : Icon());
+ connectionsAction = new Action(HIDE_MENU_ICON(Icon("network-server")), i18n("Collection"), this);
+ outputsAction = new Action(HIDE_MENU_ICON(Icons::self()->speakerIcon), i18n("Outputs"), this);
stopAfterTrackAction = ActionCollection::get()->createAction("stopaftertrack", i18n("Stop After Track"), Icons::self()->toolbarStopIcon);
- addPlayQueueToStoredPlaylistAction = ActionCollection::get()->createAction("addpqtostoredplaylist", i18n("Add To Stored Playlist"), Icons::self()->playlistIcon);
+ fwdAction = new Action(this);
+ revAction = new Action(this);
+ fwdAction->setShortcut((Qt::RightToLeft==layoutDirection() ? Qt::Key_Left : Qt::Key_Right)+Qt::ControlModifier);
+ revAction->setShortcut((Qt::RightToLeft==layoutDirection() ? Qt::Key_Right : Qt::Key_Left)+Qt::ControlModifier);
+ connect(fwdAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(forward()));
+ connect(revAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(reverse()));
+ addAction(fwdAction);
+ addAction(revAction);
+
+ addPlayQueueToStoredPlaylistAction = new Action(HIDE_MENU_ICON(Icons::self()->playlistIcon), i18n("Add To Stored Playlist"), this);
cropPlayQueueAction = ActionCollection::get()->createAction("cropplaylist", i18n("Crop"));
- addStreamToPlayQueueAction = ActionCollection::get()->createAction("addstreamtoplayqueue", i18n("Add Stream URL"), menuIcons ? Icons::self()->addRadioStreamIcon : Icon());
- promptClearPlayQueueAction = ActionCollection::get()->createAction("clearplaylist", i18n("Clear"), Icons::self()->clearListIcon);
+ addStreamToPlayQueueAction = ActionCollection::get()->createAction("addstreamtoplayqueue", i18n("Add Stream URL"), HIDE_MENU_ICON(Icons::self()->addRadioStreamIcon));
+ promptClearPlayQueueAction = ActionCollection::get()->createAction("clearplaylist", i18n("Clear"), HIDE_MENU_ICON(Icons::self()->clearListIcon));
centerPlayQueueAction = ActionCollection::get()->createAction("centerplaylist", i18n("Center On Current Track"), isRightToLeft() ? "go-previous" : "go-next");
- expandInterfaceAction = ActionCollection::get()->createAction("expandinterface", i18n("Expanded Interface"), menuIcons ? "view-media-playlist" : "");
+ expandInterfaceAction = ActionCollection::get()->createAction("expandinterface", i18n("Expanded Interface"), HIDE_MENU_ICON_NAME("view-media-playlist"));
expandInterfaceAction->setCheckable(true);
songInfoAction = ActionCollection::get()->createAction("showsonginfo", i18n("Show Current Song Information"), Icons::self()->infoIcon);
songInfoAction->setShortcut(Qt::Key_F12);
songInfoAction->setCheckable(true);
- fullScreenAction = ActionCollection::get()->createAction("fullScreen", i18n("Full Screen"), menuIcons ? "view-fullscreen" : "");
+ fullScreenAction = ActionCollection::get()->createAction("fullScreen", i18n("Full Screen"), HIDE_MENU_ICON_NAME("view-fullscreen"));
+ #ifndef Q_OS_MAC
fullScreenAction->setShortcut(Qt::Key_F11);
+ #endif
randomPlayQueueAction = ActionCollection::get()->createAction("randomplaylist", i18n("Random"), Icons::self()->shuffleIcon);
repeatPlayQueueAction = ActionCollection::get()->createAction("repeatplaylist", i18n("Repeat"), Icons::self()->repeatIcon);
singlePlayQueueAction = ActionCollection::get()->createAction("singleplaylist", i18n("Single"), Icons::self()->singleIcon, i18n("When 'Single' is activated, playback is stopped after current song, or song is repeated if 'Repeat' is enabled."));
consumePlayQueueAction = ActionCollection::get()->createAction("consumeplaylist", i18n("Consume"), Icons::self()->consumeIcon, i18n("When consume is activated, a song is removed from the play queue after it has been played."));
- setPriorityAction = ActionCollection::get()->createAction("setprio", i18n("Set Priority"), Icon("favorites"));
+ searchPlayQueueAction = ActionCollection::get()->createAction("searchplaylist", i18n("Find in Play Queue"), HIDE_MENU_ICON(Icons::self()->searchIcon));
+ addAction(searchPlayQueueAction);
+ searchPlayQueueAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+Qt::Key_F);
+ setPriorityAction = new Action(Icon("favorites"), i18n("Set Priority"), this);
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
- streamPlayAction = ActionCollection::get()->createAction("streamplay", i18n("Play Stream"));
+ streamPlayAction = ActionCollection::get()->createAction("streamplay", i18n("Play Stream"), HIDE_MENU_ICON(Icons::self()->radioStreamIcon));
streamPlayAction->setCheckable(true);
streamPlayAction->setChecked(false);
streamPlayAction->setVisible(false);
+ streamPlayButton->setDefaultAction(streamPlayAction);
#endif
+ streamPlayButton->setVisible(false);
+
locateTrackAction = ActionCollection::get()->createAction("locatetrack", i18n("Locate In Library"), "edit-find");
#ifdef TAGLIB_FOUND
- editPlayQueueTagsAction = ActionCollection::get()->createAction("editpqtags", i18n("Edit Song Tags"), "document-edit");
+ editPlayQueueTagsAction = ActionCollection::get()->createAction("editpqtags", StdActions::self()->editTagsAction->text(), StdActions::self()->editTagsAction->icon());
#endif
addAction(expandAllAction = ActionCollection::get()->createAction("expandall", i18n("Expand All")));
expandAllAction->setShortcut(Qt::ControlModifier+Qt::Key_Plus);
addAction(collapseAllAction = ActionCollection::get()->createAction("collapseall", i18n("Collapse All")));
collapseAllAction->setShortcut(Qt::ControlModifier+Qt::Key_Minus);
- clearPlayQueueAction = ActionCollection::get()->createAction("confimclearplaylist", i18n("Remove All Songs"), Icons::self()->clearListIcon);
+ clearPlayQueueAction = ActionCollection::get()->createAction("confimclearplaylist", i18n("Remove All Songs"), HIDE_MENU_ICON(Icons::self()->clearListIcon));
clearPlayQueueAction->setShortcut(Qt::AltModifier+Qt::Key_Return);
cancelAction = ActionCollection::get()->createAction("cancel", i18n("Cancel"), Icons::self()->cancelIcon);
cancelAction->setShortcut(Qt::AltModifier+Qt::Key_Escape);
- connect(cancelAction, SIGNAL(triggered(bool)), messageWidget, SLOT(animatedHide()));
- connect(clearPlayQueueAction, SIGNAL(triggered(bool)), messageWidget, SLOT(animatedHide()));
- connect(clearPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(clearPlayQueue()));
+ connect(cancelAction, SIGNAL(triggered()), messageWidget, SLOT(animatedHide()));
+ connect(clearPlayQueueAction, SIGNAL(triggered()), messageWidget, SLOT(animatedHide()));
+ connect(clearPlayQueueAction, SIGNAL(triggered()), this, SLOT(clearPlayQueue()));
clearNewStateAction = ActionCollection::get()->createAction("clearnewstate", i18n("Clear 'New' State Of Artists and Albums"));
- connect(clearNewStateAction, SIGNAL(triggered(bool)), MusicLibraryModel::self(), SLOT(clearNewState()));
- connect(clearNewStateAction, SIGNAL(triggered(bool)), AlbumsModel::self(), SLOT(clearNewState()));
+ connect(clearNewStateAction, SIGNAL(triggered()), MusicLibraryModel::self(), SLOT(clearNewState()));
+ connect(clearNewStateAction, SIGNAL(triggered()), AlbumsModel::self(), SLOT(clearNewState()));
connect(MusicLibraryModel::self(), SIGNAL(haveNewItems(bool)), clearNewStateAction, SLOT(setEnabled(bool)));
clearNewStateAction->setEnabled(false);
@@ -342,13 +371,7 @@ MainWindow::MainWindow(QWidget *parent)
QBoxLayout *layout=new QBoxLayout(QBoxLayout::TopToBottom, playQueuePage);
layout->setContentsMargins(0, 0, 0, 0);
bool playQueueInSidebar=!hiddenPages.contains(playQueuePage->metaObject()->className());
- if (playQueueInSidebar && (Settings::self()->firstRun() || Settings::self()->version()<CANTATA_MAKE_VERSION(0, 8, 0))) {
- playQueueInSidebar=false;
- }
bool contextInSidebar=!hiddenPages.contains(contextPage->metaObject()->className());
- if (contextInSidebar && (Settings::self()->firstRun() || Settings::self()->version()<CANTATA_MAKE_VERSION(1, 0, 52))) {
- contextInSidebar=false;
- }
layout=new QBoxLayout(QBoxLayout::TopToBottom, contextPage);
layout->setContentsMargins(0, 0, 0, 0);
@@ -358,36 +381,36 @@ MainWindow::MainWindow(QWidget *parent)
addAction(showPlayQueueAction = ActionCollection::get()->createAction("showplayqueue", i18n("Play Queue"), Icons::self()->playqueueIcon));
showPlayQueueAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+Qt::Key_Q);
tabWidget->addTab(playQueuePage, TAB_ACTION(showPlayQueueAction), playQueueInSidebar);
- connect(showPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(showPlayQueue()));
+ connect(showPlayQueueAction, SIGNAL(triggered()), this, SLOT(showPlayQueue()));
libraryPage = new LibraryPage(this);
addAction(libraryTabAction = ActionCollection::get()->createAction("showlibrarytab", i18n("Artists"), Icons::self()->artistsIcon));
libraryTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(libraryPage, TAB_ACTION(libraryTabAction), !hiddenPages.contains(libraryPage->metaObject()->className()));
- connect(libraryTabAction, SIGNAL(triggered(bool)), this, SLOT(showLibraryTab()));
+ connect(libraryTabAction, SIGNAL(triggered()), this, SLOT(showLibraryTab()));
albumsPage = new AlbumsPage(this);
addAction(albumsTabAction = ActionCollection::get()->createAction("showalbumstab", i18n("Albums"), Icons::self()->albumsIcon));
albumsTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(albumsPage, TAB_ACTION(albumsTabAction), !hiddenPages.contains(albumsPage->metaObject()->className()));
- connect(albumsTabAction, SIGNAL(triggered(bool)), this, SLOT(showAlbumsTab()));
+ connect(albumsTabAction, SIGNAL(triggered()), this, SLOT(showAlbumsTab()));
AlbumsModel::self()->setEnabled(!hiddenPages.contains(albumsPage->metaObject()->className()));
folderPage = new FolderPage(this);
addAction(foldersTabAction = ActionCollection::get()->createAction("showfolderstab", i18n("Folders"), Icons::self()->foldersIcon));
foldersTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(folderPage, TAB_ACTION(foldersTabAction), !hiddenPages.contains(folderPage->metaObject()->className()));
- connect(foldersTabAction, SIGNAL(triggered(bool)), this, SLOT(showFoldersTab()));
+ connect(foldersTabAction, SIGNAL(triggered()), this, SLOT(showFoldersTab()));
folderPage->setEnabled(!hiddenPages.contains(folderPage->metaObject()->className()));
playlistsPage = new PlaylistsPage(this);
addAction(playlistsTabAction = ActionCollection::get()->createAction("showplayliststab", i18n("Playlists"), Icons::self()->playlistsIcon));
playlistsTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(playlistsPage, TAB_ACTION(playlistsTabAction), !hiddenPages.contains(playlistsPage->metaObject()->className()));
- connect(playlistsTabAction, SIGNAL(triggered(bool)), this, SLOT(showPlaylistsTab()));
+ connect(playlistsTabAction, SIGNAL(triggered()), this, SLOT(showPlaylistsTab()));
setPlaylistsEnabled(!hiddenPages.contains(playlistsPage->metaObject()->className()));
#ifdef ENABLE_DYNAMIC
dynamicPage = new DynamicPage(this);
addAction(dynamicTabAction = ActionCollection::get()->createAction("showdynamictab", i18n("Dynamic"), Icons::self()->dynamicIcon));
dynamicTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(dynamicPage, TAB_ACTION(dynamicTabAction), !hiddenPages.contains(dynamicPage->metaObject()->className()));
- connect(dynamicTabAction, SIGNAL(triggered(bool)), this, SLOT(showDynamicTab()));
+ connect(dynamicTabAction, SIGNAL(triggered()), this, SLOT(showDynamicTab()));
connect(Dynamic::self(), SIGNAL(error(const QString &)), SLOT(showError(const QString &)));
connect(Dynamic::self(), SIGNAL(running(bool)), dynamicLabel, SLOT(setVisible(bool)));
connect(Dynamic::self(), SIGNAL(running(bool)), this, SLOT(controlDynamicButton()));
@@ -398,7 +421,7 @@ MainWindow::MainWindow(QWidget *parent)
addAction(streamsTabAction = ActionCollection::get()->createAction("showstreamstab", i18n("Streams"), Icons::self()->streamsIcon));
streamsTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(streamsPage, TAB_ACTION(streamsTabAction), !hiddenPages.contains(streamsPage->metaObject()->className()));
- connect(streamsTabAction, SIGNAL(triggered(bool)), this, SLOT(showStreamsTab()));
+ connect(streamsTabAction, SIGNAL(triggered()), this, SLOT(showStreamsTab()));
connect(streamsPage, SIGNAL(add(const QStringList &, bool, quint8)), &playQueueModel, SLOT(addItems(const QStringList &, bool, quint8)));
connect(streamsPage, SIGNAL(error(QString)), this, SLOT(showError(QString)));
connect(streamsPage, SIGNAL(showPreferencesPage(QString)), this, SLOT(showPreferencesDialog(QString)));
@@ -409,7 +432,7 @@ MainWindow::MainWindow(QWidget *parent)
onlineTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(onlinePage, TAB_ACTION(onlineTabAction), !hiddenPages.contains(onlinePage->metaObject()->className()));
onlinePage->setEnabled(!hiddenPages.contains(onlinePage->metaObject()->className()));
- connect(onlineTabAction, SIGNAL(triggered(bool)), this, SLOT(showOnlineTab()));
+ connect(onlineTabAction, SIGNAL(triggered()), this, SLOT(showOnlineTab()));
connect(onlinePage, SIGNAL(showPreferencesPage(QString)), this, SLOT(showPreferencesDialog(QString)));
connect(onlinePage, SIGNAL(addToDevice(const QString &, const QString &, const QList<Song> &)), SLOT(copyToDevice(const QString &, const QString &, const QList<Song> &)));
connect(OnlineServicesModel::self(), SIGNAL(error(const QString &)), this, SLOT(showError(const QString &)));
@@ -420,12 +443,12 @@ MainWindow::MainWindow(QWidget *parent)
devicesTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
tabWidget->addTab(devicesPage, TAB_ACTION(devicesTabAction), !hiddenPages.contains(devicesPage->metaObject()->className()));
DevicesModel::self()->setEnabled(!hiddenPages.contains(devicesPage->metaObject()->className()));
- connect(devicesTabAction, SIGNAL(triggered(bool)), this, SLOT(showDevicesTab()));
+ connect(devicesTabAction, SIGNAL(triggered()), this, SLOT(showDevicesTab()));
#endif
searchPage = new SearchPage(this);
addAction(searchTabAction = ActionCollection::get()->createAction("showsearchtab", i18n("Search"), Icons::self()->searchTabIcon));
searchTabAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+nextKey(sidebarPageShortcutKey));
- connect(searchTabAction, SIGNAL(triggered(bool)), this, SLOT(showSearchTab()));
+ connect(searchTabAction, SIGNAL(triggered()), this, SLOT(showSearchTab()));
connect(searchPage, SIGNAL(locate(QList<Song>)), this, SLOT(locateTracks(QList<Song>)));
tabWidget->addTab(searchPage, TAB_ACTION(searchTabAction), !hiddenPages.contains(searchPage->metaObject()->className()));
tabWidget->addTab(contextPage, Icons::self()->infoSidebarIcon, i18n("Info"), songInfoAction->text(),
@@ -457,6 +480,7 @@ MainWindow::MainWindow(QWidget *parent)
songInfoButton->setDefaultAction(songInfoAction);
fullScreenLabel->setVisible(false);
connect(fullScreenLabel, SIGNAL(leftClickedUrl()), fullScreenAction, SIGNAL(triggered()));
+ connect(playQueueSearchWidget, SIGNAL(active(bool)), playQueue, SLOT(searchActive(bool)));
if (Configuration(playQueuePage->metaObject()->className()).get(ItemView::constSearchActiveKey, false)) {
playQueueSearchWidget->activate();
} else {
@@ -521,9 +545,19 @@ MainWindow::MainWindow(QWidget *parent)
singlePlayQueueAction->setChecked(false);
consumePlayQueueAction->setChecked(false);
- MusicLibraryItemAlbum::setCoverSize((MusicLibraryItemAlbum::CoverSize)Settings::self()->libraryCoverSize());
+ #ifdef UNITY_MENU_HACK
+ if (!menuIcons) {
+ // These buttons have actions that are in the menubar, as wall as in the main window.
+ // Under unity we dont want any icons in menus - so the actions themselves have no icons.
+ // But the toolbuttuns need icons!
+ #ifdef ENABLE_HTTP_STREAM_PLAYBACK
+ streamPlayButton->setIcon(Icons::self()->radioStreamIcon);
+ #endif
+ savePlayQueueButton->setIcon(Icon("document-save-as"));
+ clearPlayQueueButton->setIcon(Icons::self()->clearListIcon);
+ }
+ #endif
MusicLibraryItemAlbum::setSortByDate(Settings::self()->libraryYear());
- AlbumsModel::setCoverSize((MusicLibraryItemAlbum::CoverSize)Settings::self()->albumsCoverSize());
expandedSize=Settings::self()->mainWindowSize();
collapsedSize=Settings::self()->mainWindowCollapsedSize();
@@ -597,6 +631,7 @@ MainWindow::MainWindow(QWidget *parent)
mainMenu->addAction(shortcutsAction);
mainMenu->addSeparator();
mainMenu->addAction(StdActions::self()->searchAction);
+ mainMenu->addAction(searchPlayQueueAction);
mainMenu->addSeparator();
mainMenu->addAction(serverInfoAction);
mainMenu->addMenu(helpMenu());
@@ -606,6 +641,7 @@ MainWindow::MainWindow(QWidget *parent)
mainMenu->addAction(clearNewStateAction);
mainMenu->addSeparator();
mainMenu->addAction(StdActions::self()->searchAction);
+ mainMenu->addAction(searchPlayQueueAction);
mainMenu->addSeparator();
mainMenu->addAction(serverInfoAction);
mainMenu->addAction(aboutAction);
@@ -638,6 +674,7 @@ MainWindow::MainWindow(QWidget *parent)
addMenuAction(menu, clearNewStateAction);
menu->addSeparator();
addMenuAction(menu, StdActions::self()->searchAction);
+ addMenuAction(menu, searchPlayQueueAction);
#ifndef ENABLE_KDE_SUPPORT
if (Utils::KDE!=Utils::currentDe()) {
menu->addSeparator();
@@ -660,9 +697,8 @@ MainWindow::MainWindow(QWidget *parent)
}
#endif
menu=new QMenu(i18n("&Queue"), this);
-// addMenuAction(menu, promptClearPlayQueueAction);
-// addMenuAction(menu, StdActions::self()->savePlayQueueAction);
-// menu->addSeparator();
+ addMenuAction(menu, promptClearPlayQueueAction);
+ addMenuAction(menu, StdActions::self()->savePlayQueueAction);
addMenuAction(menu, addStreamToPlayQueueAction);
menu->addSeparator();
addMenuAction(menu, playQueueModel.shuffleAct());
@@ -686,6 +722,9 @@ MainWindow::MainWindow(QWidget *parent)
addMenuAction(menu, prefAction);
menuBar()->addMenu(menu);
}
+ #ifdef Q_OS_MAC
+ OSXStyle::self()->initWindowMenu(this);
+ #endif
menu=new QMenu(i18n("&Help"), this);
addMenuAction(menu, serverInfoAction);
#ifdef ENABLE_KDE_SUPPORT
@@ -714,25 +753,42 @@ MainWindow::MainWindow(QWidget *parent)
playQueueProxyModel.setSourceModel(&playQueueModel);
playQueue->setModel(&playQueueProxyModel);
playQueue->addAction(playQueue->removeFromAct());
+ ratingAction=new Action(i18n("Set Rating"), this);
+ ratingAction->setMenu(new QMenu(0));
+ for (int i=0; i<((Song::Rating_Max/Song::Rating_Step)+1); ++i) {
+ QString text;
+ if (0==i) {
+ text=i18n("No Rating");
+ } else {
+ for (int s=0; s<i; ++s) {
+ text+=QChar(0x2605);
+ }
+ }
+ Action *action=new Action(text, ratingAction);
+ action->setProperty(constRatingKey, i*Song::Rating_Step);
+ ratingAction->menu()->addAction(action);
+ connect(action, SIGNAL(triggered()), SLOT(setRating()));
+ }
+ playQueue->addAction(ratingAction);
+ playQueue->addAction(setPriorityAction);
+ playQueue->addAction(stopAfterTrackAction);
+ playQueue->addAction(locateTrackAction);
+ #ifdef TAGLIB_FOUND
+ playQueue->addAction(editPlayQueueTagsAction);
+ #endif
+ Action *sep=new Action(this);
+ sep->setSeparator(true);
+ playQueue->addAction(sep);
+ playQueue->addAction(playQueueModel.removeDuplicatesAct());
playQueue->addAction(promptClearPlayQueueAction);
+ playQueue->addAction(cropPlayQueueAction);
playQueue->addAction(StdActions::self()->savePlayQueueAction);
playQueue->addAction(addStreamToPlayQueueAction);
playQueue->addAction(addPlayQueueToStoredPlaylistAction);
- playQueue->addAction(cropPlayQueueAction);
playQueue->addAction(playQueueModel.shuffleAct());
playQueue->addAction(playQueueModel.sortAct());
playQueue->addAction(playQueueModel.undoAct());
playQueue->addAction(playQueueModel.redoAct());
- Action *sep=new Action(this);
- sep->setSeparator(true);
- playQueue->addAction(sep);
- playQueue->addAction(stopAfterTrackAction);
- playQueue->addAction(setPriorityAction);
- playQueue->addAction(locateTrackAction);
- #ifdef TAGLIB_FOUND
- playQueue->addAction(editPlayQueueTagsAction);
- #endif
- playQueue->addAction(playQueueModel.removeDuplicatesAct());
playQueue->readConfig();
playlistsPage->setStartClosed(Settings::self()->playListsStartClosed());
@@ -745,18 +801,18 @@ MainWindow::MainWindow(QWidget *parent)
connect(playlistsPage, SIGNAL(addToDevice(const QString &, const QString &, const QList<Song> &)), SLOT(copyToDevice(const QString &, const QString &, const QList<Song> &)));
connect(devicesPage, SIGNAL(addToDevice(const QString &, const QString &, const QList<Song> &)), SLOT(copyToDevice(const QString &, const QString &, const QList<Song> &)));
connect(searchPage, SIGNAL(addToDevice(const QString &, const QString &, const QList<Song> &)), SLOT(copyToDevice(const QString &, const QString &, const QList<Song> &)));
- connect(StdActions::self()->deleteSongsAction, SIGNAL(triggered(bool)), SLOT(deleteSongs()));
+ connect(StdActions::self()->deleteSongsAction, SIGNAL(triggered()), SLOT(deleteSongs()));
connect(devicesPage, SIGNAL(deleteSongs(const QString &, const QList<Song> &)), SLOT(deleteSongs(const QString &, const QList<Song> &)));
connect(libraryPage, SIGNAL(deleteSongs(const QString &, const QList<Song> &)), SLOT(deleteSongs(const QString &, const QList<Song> &)));
connect(albumsPage, SIGNAL(deleteSongs(const QString &, const QList<Song> &)), SLOT(deleteSongs(const QString &, const QList<Song> &)));
connect(folderPage, SIGNAL(deleteSongs(const QString &, const QList<Song> &)), SLOT(deleteSongs(const QString &, const QList<Song> &)));
#endif
- connect(StdActions::self()->addPrioHighestAction, SIGNAL(triggered(bool)), this, SLOT(addWithPriority()));
- connect(StdActions::self()->addPrioHighAction, SIGNAL(triggered(bool)), this, SLOT(addWithPriority()));
- connect(StdActions::self()->addPrioMediumAction, SIGNAL(triggered(bool)), this, SLOT(addWithPriority()));
- connect(StdActions::self()->addPrioLowAction, SIGNAL(triggered(bool)), this, SLOT(addWithPriority()));
- connect(StdActions::self()->addPrioDefaultAction, SIGNAL(triggered(bool)), this, SLOT(addWithPriority()));
- connect(StdActions::self()->addPrioCustomAction, SIGNAL(triggered(bool)), this, SLOT(addWithPriority()));
+ connect(StdActions::self()->addPrioHighestAction, SIGNAL(triggered()), this, SLOT(addWithPriority()));
+ connect(StdActions::self()->addPrioHighAction, SIGNAL(triggered()), this, SLOT(addWithPriority()));
+ connect(StdActions::self()->addPrioMediumAction, SIGNAL(triggered()), this, SLOT(addWithPriority()));
+ connect(StdActions::self()->addPrioLowAction, SIGNAL(triggered()), this, SLOT(addWithPriority()));
+ connect(StdActions::self()->addPrioDefaultAction, SIGNAL(triggered()), this, SLOT(addWithPriority()));
+ connect(StdActions::self()->addPrioCustomAction, SIGNAL(triggered()), this, SLOT(addWithPriority()));
connect(MPDConnection::self(), SIGNAL(outputsUpdated(const QList<Output> &)), this, SLOT(outputsUpdated(const QList<Output> &)));
connect(this, SIGNAL(enableOutput(int, bool)), MPDConnection::self(), SLOT(enableOutput(int, bool)));
connect(this, SIGNAL(outputs()), MPDConnection::self(), SLOT(outputs()));
@@ -781,23 +837,27 @@ MainWindow::MainWindow(QWidget *parent)
connect(MPDStats::self(), SIGNAL(updated()), this, SLOT(updateStats()));
connect(MPDStatus::self(), SIGNAL(updated()), this, SLOT(updateStatus()));
connect(MPDConnection::self(), SIGNAL(playlistUpdated(const QList<Song> &)), this, SLOT(updatePlayQueue(const QList<Song> &)));
- connect(MPDConnection::self(), SIGNAL(currentSongUpdated(const Song &)), this, SLOT(updateCurrentSong(const Song &)));
+ connect(MPDConnection::self(), SIGNAL(currentSongUpdated(Song)), this, SLOT(updateCurrentSong(Song)));
connect(MPDConnection::self(), SIGNAL(stateChanged(bool)), SLOT(mpdConnectionStateChanged(bool)));
connect(MPDConnection::self(), SIGNAL(error(const QString &, bool)), SLOT(showError(const QString &, bool)));
connect(MPDConnection::self(), SIGNAL(info(const QString &)), SLOT(showInformation(const QString &)));
connect(MPDConnection::self(), SIGNAL(dirChanged()), SLOT(checkMpdDir()));
- connect(refreshDbAction, SIGNAL(triggered(bool)), this, SLOT(refreshDbPromp()));
- connect(doDbRefreshAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(update()));
- connect(doDbRefreshAction, SIGNAL(triggered(bool)), messageWidget, SLOT(animatedHide()));
- connect(connectAction, SIGNAL(triggered(bool)), this, SLOT(connectToMpd()));
- connect(StdActions::self()->prevTrackAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(goToPrevious()));
- connect(StdActions::self()->nextTrackAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(goToNext()));
- connect(StdActions::self()->playPauseTrackAction, SIGNAL(triggered(bool)), this, SLOT(playPauseTrack()));
- connect(StdActions::self()->stopPlaybackAction, SIGNAL(triggered(bool)), this, SLOT(stopPlayback()));
- connect(StdActions::self()->stopAfterCurrentTrackAction, SIGNAL(triggered(bool)), this, SLOT(stopAfterCurrentTrack()));
- connect(stopAfterTrackAction, SIGNAL(triggered(bool)), this, SLOT(stopAfterTrack()));
+ connect(refreshDbAction, SIGNAL(triggered()), this, SLOT(refreshDbPromp()));
+ connect(doDbRefreshAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(update()));
+ connect(doDbRefreshAction, SIGNAL(triggered()), messageWidget, SLOT(animatedHide()));
+ connect(dbFullRefreshAction, SIGNAL(triggered()), this, SLOT(fullDbRefresh()));
+ connect(dbFullRefreshAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(update()));
+ connect(dbFullRefreshAction, SIGNAL(triggered()), messageWidget, SLOT(animatedHide()));
+ connect(connectAction, SIGNAL(triggered()), this, SLOT(connectToMpd()));
+ connect(StdActions::self()->prevTrackAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(goToPrevious()));
+ connect(StdActions::self()->nextTrackAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(goToNext()));
+ connect(StdActions::self()->playPauseTrackAction, SIGNAL(triggered()), this, SLOT(playPauseTrack()));
+ connect(StdActions::self()->stopPlaybackAction, SIGNAL(triggered()), this, SLOT(stopPlayback()));
+ connect(StdActions::self()->stopAfterCurrentTrackAction, SIGNAL(triggered()), this, SLOT(stopAfterCurrentTrack()));
+ connect(stopAfterTrackAction, SIGNAL(triggered()), this, SLOT(stopAfterTrack()));
connect(this, SIGNAL(setVolume(int)), MPDConnection::self(), SLOT(setVolume(int)));
connect(nowPlaying, SIGNAL(sliderReleased()), this, SLOT(setPosition()));
+ connect(&playQueueModel, SIGNAL(currentSongRating(QString,quint8)), nowPlaying, SLOT(rating(QString,quint8)));
connect(randomPlayQueueAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(setRandom(bool)));
connect(repeatPlayQueueAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(setRepeat(bool)));
connect(singlePlayQueueAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(setSingle(bool)));
@@ -810,35 +870,35 @@ MainWindow::MainWindow(QWidget *parent)
connect(playQueueSearchWidget, SIGNAL(textChanged(const QString)), this, SLOT(searchPlayQueue()));
connect(playQueueSearchWidget, SIGNAL(active(bool)), this, SLOT(playQueueSearchActivated(bool)));
connect(playQueue, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(playQueueItemActivated(const QModelIndex &)));
- connect(StdActions::self()->removeAction, SIGNAL(triggered(bool)), this, SLOT(removeItems()));
- connect(StdActions::self()->addToPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(addToPlayQueue()));
- connect(StdActions::self()->addRandomToPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(addRandomToPlayQueue()));
- connect(StdActions::self()->replacePlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(replacePlayQueue()));
- connect(playQueue->removeFromAct(), SIGNAL(triggered(bool)), this, SLOT(removeFromPlayQueue()));
- connect(promptClearPlayQueueAction, SIGNAL(triggered(bool)), playQueueSearchWidget, SLOT(clear()));
- connect(promptClearPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(promptClearPlayQueue()));
- connect(centerPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(centerPlayQueue()));
- connect(cropPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(cropPlayQueue()));
- connect(songInfoAction, SIGNAL(triggered(bool)), this, SLOT(showSongInfo()));
- connect(expandInterfaceAction, SIGNAL(triggered(bool)), this, SLOT(expandOrCollapse()));
- connect(fullScreenAction, SIGNAL(triggered(bool)), this, SLOT(fullScreen()));
+ connect(StdActions::self()->removeAction, SIGNAL(triggered()), this, SLOT(removeItems()));
+ connect(StdActions::self()->addToPlayQueueAction, SIGNAL(triggered()), this, SLOT(addToPlayQueue()));
+ connect(StdActions::self()->replacePlayQueueAction, SIGNAL(triggered()), this, SLOT(replacePlayQueue()));
+ connect(playQueue->removeFromAct(), SIGNAL(triggered()), this, SLOT(removeFromPlayQueue()));
+ connect(promptClearPlayQueueAction, SIGNAL(triggered()), playQueueSearchWidget, SLOT(clear()));
+ connect(promptClearPlayQueueAction, SIGNAL(triggered()), this, SLOT(promptClearPlayQueue()));
+ connect(centerPlayQueueAction, SIGNAL(triggered()), this, SLOT(centerPlayQueue()));
+ connect(cropPlayQueueAction, SIGNAL(triggered()), this, SLOT(cropPlayQueue()));
+ connect(songInfoAction, SIGNAL(triggered()), this, SLOT(showSongInfo()));
+ connect(expandInterfaceAction, SIGNAL(triggered()), this, SLOT(expandOrCollapse()));
+ connect(fullScreenAction, SIGNAL(triggered()), this, SLOT(fullScreen()));
#ifdef TAGLIB_FOUND
- connect(StdActions::self()->editTagsAction, SIGNAL(triggered(bool)), this, SLOT(editTags()));
- connect(editPlayQueueTagsAction, SIGNAL(triggered(bool)), this, SLOT(editPlayQueueTags()));
- connect(StdActions::self()->organiseFilesAction, SIGNAL(triggered(bool)), SLOT(organiseFiles()));
+ connect(StdActions::self()->editTagsAction, SIGNAL(triggered()), this, SLOT(editTags()));
+ connect(editPlayQueueTagsAction, SIGNAL(triggered()), this, SLOT(editTags()));
+ connect(StdActions::self()->organiseFilesAction, SIGNAL(triggered()), SLOT(organiseFiles()));
#endif
connect(context, SIGNAL(findArtist(QString)), this, SLOT(locateArtist(QString)));
connect(context, SIGNAL(findAlbum(QString,QString)), this, SLOT(locateAlbum(QString,QString)));
connect(context, SIGNAL(playSong(QString)), &playQueueModel, SLOT(playSong(QString)));
- connect(locateTrackAction, SIGNAL(triggered(bool)), this, SLOT(locateTrack()));
- connect(StdActions::self()->searchAction, SIGNAL(triggered(bool)), SLOT(showSearch()));
+ connect(locateTrackAction, SIGNAL(triggered()), this, SLOT(locateTrack()));
+ connect(StdActions::self()->searchAction, SIGNAL(triggered()), SLOT(showSearch()));
+ connect(searchPlayQueueAction, SIGNAL(triggered()), this, SLOT(showPlayQueueSearch()));
connect(playQueue, SIGNAL(focusSearch(QString)), playQueueSearchWidget, SLOT(activate(QString)));
- connect(expandAllAction, SIGNAL(triggered(bool)), this, SLOT(expandAll()));
- connect(collapseAllAction, SIGNAL(triggered(bool)), this, SLOT(collapseAll()));
- connect(addStreamToPlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(addStreamToPlayQueue()));
- connect(StdActions::self()->setCoverAction, SIGNAL(triggered(bool)), SLOT(setCover()));
+ connect(expandAllAction, SIGNAL(triggered()), this, SLOT(expandAll()));
+ connect(collapseAllAction, SIGNAL(triggered()), this, SLOT(collapseAll()));
+ connect(addStreamToPlayQueueAction, SIGNAL(triggered()), this, SLOT(addStreamToPlayQueue()));
+ connect(StdActions::self()->setCoverAction, SIGNAL(triggered()), SLOT(setCover()));
#ifdef ENABLE_REPLAYGAIN_SUPPORT
- connect(StdActions::self()->replaygainAction, SIGNAL(triggered(bool)), SLOT(replayGain()));
+ connect(StdActions::self()->replaygainAction, SIGNAL(triggered()), SLOT(replayGain()));
#endif
connect(PlaylistsModel::self(), SIGNAL(addToNew()), this, SLOT(addToNewStoredPlaylist()));
connect(PlaylistsModel::self(), SIGNAL(addToExisting(const QString &)), this, SLOT(addToExistingStoredPlaylist(const QString &)));
@@ -887,7 +947,10 @@ MainWindow::MainWindow(QWidget *parent)
updateStats();
}
#ifndef ENABLE_KDE_SUPPORT
- MediaKeys::self()->load();
+ MediaKeys::self()->start();
+ #endif
+ #ifdef Q_OS_MAC
+ dockMenu=new DockMenu(this);
#endif
updateActionToolTips();
}
@@ -928,7 +991,7 @@ MainWindow::~MainWindow()
Settings::StartupState startupState=Settings::self()->startupState();
Settings::self()->saveStartHidden(trayItem->isActive() && Settings::self()->minimiseOnClose() &&
((isHidden() && Settings::SS_ShowMainWindow!=startupState) || (Settings::SS_HideMainWindow==startupState)));
- Settings::self()->save(true);
+ Settings::self()->save();
disconnect(MPDConnection::self(), 0, 0, 0);
#ifdef ENABLE_DYNAMIC
if (Settings::self()->stopOnExit()) {
@@ -1031,6 +1094,16 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
}
}
+#if defined Q_OS_WIN && QT_VERSION >= 0x050000
+void MainWindow::showEvent(QShowEvent *event)
+{
+ if (!thumbnailTooolbar) {
+ thumbnailTooolbar=new ThumbnailToolBar(this);
+ }
+ MAIN_WINDOW_BASE_CLASS::showEvent(event);
+}
+#endif
+
void MainWindow::closeEvent(QCloseEvent *event)
{
if (trayItem->isActive() && Settings::self()->minimiseOnClose()) {
@@ -1058,6 +1131,7 @@ void MainWindow::playQueueItemsSelected(bool s)
#endif
addPlayQueueToStoredPlaylistAction->setEnabled(haveItems);
stopAfterTrackAction->setEnabled(singleSelection);
+ ratingAction->setEnabled(s && haveItems);
}
void MainWindow::connectToMpd(const MPDConnectionDetails &details)
@@ -1093,6 +1167,7 @@ void MainWindow::streamUrl(const QString &u)
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
streamPlayAction->setVisible(!u.isEmpty());
streamPlayAction->setChecked(streamPlayAction->isVisible() && Settings::self()->playStream());
+ streamPlayButton->setVisible(!u.isEmpty());
httpStream->setEnabled(streamPlayAction->isChecked());
#else
Q_UNUSED(u)
@@ -1101,15 +1176,22 @@ void MainWindow::streamUrl(const QString &u)
void MainWindow::refreshDbPromp()
{
- if (QDialogButtonBox::GnomeLayout==style()->styleHint(QStyle::SH_DialogButtonLayout)) {
- messageWidget->setActions(QList<QAction*>() << cancelAction << doDbRefreshAction);
+ int btnLayout=style()->styleHint(QStyle::SH_DialogButtonLayout);
+ if (QDialogButtonBox::GnomeLayout==btnLayout || QDialogButtonBox::MacLayout==btnLayout) {
+ messageWidget->setActions(QList<QAction*>() << cancelAction << doDbRefreshAction << dbFullRefreshAction);
} else {
- messageWidget->setActions(QList<QAction*>() << doDbRefreshAction << cancelAction);
+ messageWidget->setActions(QList<QAction*>() << doDbRefreshAction << dbFullRefreshAction << cancelAction);
}
messageWidget->setWarning(i18n("Refresh MPD Database?"), false);
expand();
}
+void MainWindow::fullDbRefresh()
+{
+ MusicLibraryModel::self()->removeCache();
+ DirViewModel::self()->removeCache();
+}
+
#ifdef ENABLE_KDE_SUPPORT
void MainWindow::configureShortcuts()
{
@@ -1137,6 +1219,19 @@ void MainWindow::showAboutDialog()
}
#endif
+bool MainWindow::canClose()
+{
+ #ifdef ENABLE_ONLINE_SERVICES
+ if (OnlineServicesModel::self()->isDownloading() &&
+ MessageBox::No==MessageBox::warningYesNo(this, i18n("A Podcast is currently being downloaded\n\nQuiting now will abort the download."),
+ QString(), GuiItem(i18n("Abort download and quit")), GuiItem("Do not quit just yet"))) {
+ return false;
+ }
+ OnlineServicesModel::self()->cancelAll();
+ #endif
+ return true;
+}
+
void MainWindow::expand()
{
if (!expandInterfaceAction->isChecked()) {
@@ -1177,10 +1272,10 @@ void MainWindow::showPreferencesDialog(const QString &page)
connect(pref, SIGNAL(settingsSaved()), this, SLOT(updateSettings()));
connect(pref, SIGNAL(destroyed()), SLOT(controlConnectionsMenu()));
connect(this, SIGNAL(showPreferencesPage(QString)), pref, SLOT(showPage(QString)));
- pref->show();
if (!page.isEmpty()) {
pref->showPage(page);
}
+ pref->show();
}
void MainWindow::quit()
@@ -1188,7 +1283,6 @@ void MainWindow::quit()
if (!canClose()) {
return;
}
-
#ifdef ENABLE_REPLAYGAIN_SUPPORT
if (RgDialog::instanceCount()) {
return;
@@ -1221,8 +1315,8 @@ void MainWindow::checkMpdDir()
#endif
#ifdef TAGLIB_FOUND
- if (editPlayQueueTagsAction->isEnabled()) {
- editPlayQueueTagsAction->setEnabled(MPDConnection::self()->getDetails().dirReadable);
+ if (StdActions::self()->editTagsAction->isEnabled()) {
+ StdActions::self()->editTagsAction->setEnabled(MPDConnection::self()->getDetails().dirReadable);
}
#endif
if (currentPage) {
@@ -1232,44 +1326,75 @@ void MainWindow::checkMpdDir()
void MainWindow::outputsUpdated(const QList<Output> &outputs)
{
- if (outputs.count()<2) {
- outputsAction->setVisible(false);
- } else {
- outputsAction->setVisible(true);
- QSet<QString> mpd;
- QSet<QString> menuItems;
- QMenu *menu=outputsAction->menu();
- foreach (const Output &o, outputs) {
- mpd.insert(o.name);
+ const char *constMpdConName="mpd-name";
+ const char *constMpdEnabledOuptuts="mpd-outputs";
+ QString lastConn=property(constMpdConName).toString();
+ QString newConn=MPDConnection::self()->getDetails().name;
+ setProperty(constMpdConName, newConn);
+ outputsAction->setVisible(true);
+ QSet<QString> enabledMpd;
+ QSet<QString> lastEnabledMpd=QSet<QString>::fromList(property(constMpdEnabledOuptuts).toStringList());
+ QSet<QString> mpd;
+ QSet<QString> menuItems;
+ QMenu *menu=outputsAction->menu();
+ foreach (const Output &o, outputs) {
+ if (o.enabled) {
+ enabledMpd.insert(o.name);
}
+ mpd.insert(o.name);
+ }
- foreach (QAction *act, menu->actions()) {
- menuItems.insert(act->data().toString());
- }
+ foreach (QAction *act, menu->actions()) {
+ menuItems.insert(act->data().toString());
+ }
- if (menuItems!=mpd) {
- menu->clear();
- QList<Output> out=outputs;
- qSort(out);
- int i=Qt::Key_1;
- foreach (const Output &o, out) {
- QAction *act=menu->addAction(o.name, this, SLOT(toggleOutput()));
- act->setData(o.id);
- act->setCheckable(true);
- act->setChecked(o.enabled);
- act->setShortcut(Qt::MetaModifier+nextKey(i));
- }
- } else {
- foreach (const Output &o, outputs) {
- foreach (QAction *act, menu->actions()) {
- if (Utils::strippedText(act->text())==o.name) {
- act->setChecked(o.enabled);
- break;
- }
+ if (menuItems!=mpd) {
+ menu->clear();
+ QList<Output> out=outputs;
+ qSort(out);
+ int i=Qt::Key_1;
+ foreach (const Output &o, out) {
+ QAction *act=menu->addAction(o.name, this, SLOT(toggleOutput()));
+ act->setData(o.id);
+ act->setCheckable(true);
+ act->setChecked(o.enabled);
+ act->setShortcut(Qt::ControlModifier+Qt::AltModifier+nextKey(i));
+ }
+ } else {
+ foreach (const Output &o, outputs) {
+ foreach (QAction *act, menu->actions()) {
+ if (Utils::strippedText(act->text())==o.name) {
+ act->setChecked(o.enabled);
+ break;
}
}
}
}
+
+ if (newConn==lastConn && enabledMpd!=lastEnabledMpd && !menuItems.isEmpty()) {
+ QSet<QString> switchedOn=enabledMpd-lastEnabledMpd;
+ QSet<QString> switchedOff=lastEnabledMpd-enabledMpd;
+
+ if (!switchedOn.isEmpty() && switchedOff.isEmpty()) {
+ QStringList names=switchedOn.toList();
+ qSort(names);
+ trayItem->showMessage(i18n("Outputs"), i18n("Enabled: %1", names.join(QLatin1String(", "))), Icons::self()->speakerIcon.pixmap(64, 64).toImage());
+ } else if (!switchedOff.isEmpty() && switchedOn.isEmpty()) {
+ QStringList names=switchedOff.toList();
+ qSort(names);
+ trayItem->showMessage(i18n("Outputs"), i18n("Disabled: %1", names.join(QLatin1String(", "))), Icons::self()->speakerIcon.pixmap(64, 64).toImage());
+ } else if (!switchedOn.isEmpty() && !switchedOff.isEmpty()) {
+ QStringList on=switchedOn.toList();
+ qSort(on);
+ QStringList off=switchedOff.toList();
+ qSort(off);
+ trayItem->showMessage(i18n("Outputs"),
+ i18n("Enabled: %1", on.join(QLatin1String(", ")))+QLatin1Char('\n')+
+ i18n("Disabled: %1", off.join(QLatin1String(", "))), Icons::self()->speakerIcon.pixmap(64, 64).toImage());
+ }
+ }
+ setProperty(constMpdEnabledOuptuts, QStringList() << enabledMpd.toList());
+ outputsAction->setVisible(outputs.count()>1);
}
void MainWindow::updateConnectionsMenu()
@@ -1326,6 +1451,14 @@ void MainWindow::controlDynamicButton()
#endif
}
+void MainWindow::setRating()
+{
+ Action *act=qobject_cast<Action *>(sender());
+ if (act) {
+ playQueueModel.setRating(playQueueProxyModel.mapToSourceRows(playQueue->selectedIndexes()), act->property(constRatingKey).toUInt());
+ }
+}
+
void MainWindow::readSettings()
{
#ifndef QT_QTDBUS_FOUND
@@ -1341,8 +1474,9 @@ void MainWindow::readSettings()
Song::setUseComposer(Settings::self()->useComposer());
albumsPage->setView(Settings::self()->albumsView());
AlbumsModel::self()->setAlbumSort(Settings::self()->albumSort());
+ MusicLibraryItemAlbum::setSortByDate(Settings::self()->libraryYear());
+ MusicLibraryModel::self()->readConfig();
libraryPage->setView(Settings::self()->libraryView());
- MusicLibraryModel::self()->setUseArtistImages(Settings::self()->libraryArtistImage());
playlistsPage->setView(Settings::self()->playlistsView());
#ifdef ENABLE_STREAMS
streamsPage->setView(Settings::self()->streamsView());
@@ -1359,17 +1493,22 @@ void MainWindow::readSettings()
autoScrollPlayQueue=Settings::self()->playQueueScroll();
updateWindowTitle();
TreeView::setForceSingleClick(Settings::self()->forceSingleClick());
- #ifdef QT_QTDBUS_FOUND
+ #if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
PowerManagement::self()->setInhibitSuspend(Settings::self()->inhibitSuspend());
#endif
- #ifndef ENABLE_KDE_SUPPORT
- MediaKeys::self()->load();
- #endif
context->readConfig();
tabWidget->setHiddenPages(Settings::self()->hiddenPages());
tabWidget->setStyle(Settings::self()->sidebar());
coverWidget->setEnabled(Settings::self()->showCoverWidget());
stopTrackButton->setVisible(Settings::self()->showStopButton());
+ #if defined Q_OS_WIN && QT_VERSION >= 0x050000
+ if (thumbnailTooolbar) {
+ thumbnailTooolbar->readSettings();
+ }
+ #endif
+ searchPlayQueueAction->setEnabled(Settings::self()->playQueueSearch());
+ searchPlayQueueAction->setVisible(Settings::self()->playQueueSearch());
+ nowPlaying->readConfig();
setCollapsedSize();
toggleMonoIcons();
toggleSplitterAutoHide();
@@ -1384,72 +1523,39 @@ void MainWindow::readSettings()
MPDConnection::self()->setVolumeFadeDuration(Settings::self()->stopFadeDuration());
}
-static inline bool diffCoverSize(int a, int b)
-{
- return (a==ItemView::Mode_IconTop && b!=ItemView::Mode_IconTop) || (a!=ItemView::Mode_IconTop && b==ItemView::Mode_IconTop);
-}
-
void MainWindow::updateSettings()
{
connectToMpd();
Settings::self()->save();
- bool diffLibCovers=((int)MusicLibraryItemAlbum::currentCoverSize())!=Settings::self()->libraryCoverSize() ||
- diffCoverSize(Settings::self()->libraryView(), libraryPage->viewMode());
- bool diffLibArtistImages=diffLibCovers ||
- (libraryPage->viewMode()==ItemView::Mode_IconTop && Settings::self()->libraryView()!=ItemView::Mode_IconTop) ||
- (libraryPage->viewMode()!=ItemView::Mode_IconTop && Settings::self()->libraryView()==ItemView::Mode_IconTop) ||
- Settings::self()->libraryArtistImage()!=MusicLibraryModel::self()->useArtistImages();
- bool diffAlCovers=((int)AlbumsModel::currentCoverSize())!=Settings::self()->albumsCoverSize() ||
- albumsPage->viewMode()!=Settings::self()->albumsView() ||
- diffCoverSize(Settings::self()->albumsView(), albumsPage->viewMode());
+ bool diffAlbumSort=AlbumsModel::self()->albumSort()!=Settings::self()->albumSort();
bool diffLibYear=MusicLibraryItemAlbum::sortByDate()!=Settings::self()->libraryYear();
bool diffGrouping=MPDParseUtils::groupSingle()!=Settings::self()->groupSingle() ||
Song::useComposer()!=Settings::self()->useComposer();
readSettings();
- if (diffLibArtistImages) {
- MusicLibraryItemArtist::clearDefaultCover();
- }
- if (diffLibCovers) {
- MusicLibraryItemAlbum::setCoverSize((MusicLibraryItemAlbum::CoverSize)Settings::self()->libraryCoverSize());
- }
- if (diffLibYear) {
- MusicLibraryItemAlbum::setSortByDate(Settings::self()->libraryYear());
- }
- if (diffLibArtistImages || diffLibCovers) {
- libraryPage->setView(libraryPage->viewMode());
- }
- if (diffAlCovers) {
- AlbumsModel::setCoverSize((MusicLibraryItemAlbum::CoverSize)Settings::self()->albumsCoverSize());
- }
- if (diffAlCovers || diffGrouping) {
- albumsPage->setView(albumsPage->viewMode());
- albumsPage->clear();
- }
-
if (diffGrouping) {
MusicLibraryModel::self()->toggleGrouping();
#ifdef ENABLE_DEVICES_SUPPORT
DevicesModel::self()->toggleGrouping();
#endif
+ #ifdef ENABLE_ONLINE_SERVICES
+ OnlineServicesModel::self()->toggleGrouping();
+ #endif
}
- if (diffLibCovers || diffLibYear || diffLibArtistImages || diffAlCovers) {
- libraryPage->clear();
- albumsPage->goTop();
- libraryPage->refresh();
+ if (diffAlbumSort) {
+ albumsPage->resort();
}
- #if defined ENABLE_ONLINE_SERVICES || defined ENABLE_DEVICES_SUPPORT
- if (diffLibCovers || diffLibYear || Settings::self()->libraryArtistImage()!=MusicLibraryModel::self()->useArtistImages()) {
+ if (diffLibYear) {
+ libraryPage->resort();
#ifdef ENABLE_ONLINE_SERVICES
- onlinePage->refresh();
+ onlinePage->resort();
#endif
#ifdef ENABLE_DEVICES_SUPPORT
- devicesPage->refresh();
+ devicesPage->resort();
#endif
}
- #endif
bool wasAutoExpand=playQueue->isAutoExpand();
bool wasStartClosed=playQueue->isStartClosed();
@@ -1494,7 +1600,11 @@ void MainWindow::showServerInfo()
qSort(handlers);
qSort(tags);
long version=MPDConnection::self()->version();
- MessageBox::information(this, QLatin1String("<p><table>")+
+ MessageBox::information(this,
+ #ifdef Q_OS_MAC
+ i18n("Server Information")+QLatin1String("<br/><br/>")+
+ #endif
+ QLatin1String("<p><table>")+
i18n("<tr><td colspan=\"2\"><b>Server</b></td></tr>"
"<tr><td align=\"right\">Protocol: </td><td>%1.%2.%3</td></tr>"
"<tr><td align=\"right\">Uptime: </td><td>%4</td></tr>"
@@ -1635,7 +1745,7 @@ void MainWindow::updatePlayQueue(const QList<Song> &songs)
bool scroll=autoScrollPlayQueue && playQueueProxyModel.isEmpty() && (wasEmpty || MPDState_Playing==MPDStatus::self()->state());
playQueue->updateRows(idx.row(), current.key, scroll, wasEmpty);
if (!scroll && topRow>0 && topRow<playQueueModel.rowCount()) {
- playQueue->scrollTo(playQueueProxyModel.mapFromSource(playQueueModel.index(topRow, 0)), QAbstractItemView::PositionAtTop);
+ playQueue->scrollTo(playQueueProxyModel.mapFromSource(playQueueModel.index(topRow, PlayQueueModel::COL_TITLE)), QAbstractItemView::PositionAtTop);
}
if (songs.isEmpty()) {
@@ -1643,7 +1753,7 @@ void MainWindow::updatePlayQueue(const QList<Song> &songs)
} else if (wasEmpty || current.isStandardStream()) {
// Check to see if it has been updated...
Song pqSong=playQueueModel.getSongByRow(playQueueModel.currentSongRow());
- if (wasEmpty || pqSong.artist!=current.artist || pqSong.album!=current.album || pqSong.title!=current.title || pqSong.year!=current.year || pqSong.name()!=current.name() ) {
+ if (wasEmpty || pqSong.isDifferent(current) ) {
updateCurrentSong(pqSong, wasEmpty);
}
}
@@ -1657,27 +1767,29 @@ void MainWindow::updateWindowTitle()
setWindowTitle(multipleConnections ? i18n("Cantata (%1)", connection) : "Cantata");
}
-void MainWindow::updateCurrentSong(const Song &song, bool wasEmpty)
+void MainWindow::updateCurrentSong(Song song, bool wasEmpty)
{
- current=song;
- if (current.isCdda()) {
+ if (song.isCdda()) {
emit getStatus();
- if (current.isUnknown()) {
+ if (song.isUnknown()) {
Song pqSong=playQueueModel.getSongById(current.id);
if (!pqSong.isEmpty()) {
- current=pqSong;
+ song=pqSong;
}
}
}
- if (current.isCantataStream()) {
- Song mod=HttpServer::self()->decodeUrl(current.file);
+ if (song.isCantataStream()) {
+ Song mod=HttpServer::self()->decodeUrl(song.file);
if (!mod.title.isEmpty()) {
- current=mod;
- current.id=song.id;
+ song=mod;
+ song.id=song.id;
}
}
+ bool diffSong=song.isDifferent(current);
+ current=song;
+
CurrentCover::self()->update(current);
#ifdef QT_QTDBUS_FOUND
mpris->updateCurrentSong(current);
@@ -1692,8 +1804,10 @@ void MainWindow::updateCurrentSong(const Song &song, bool wasEmpty)
QModelIndex idx=playQueueProxyModel.mapFromSource(playQueueModel.index(playQueueModel.currentSongRow(), 0));
playQueue->updateRows(idx.row(), current.key, autoScrollPlayQueue && playQueueProxyModel.isEmpty() && isPlaying, wasEmpty);
scrollPlayQueue(wasEmpty);
- context->update(current);
- trayItem->songChanged(song, isPlaying);
+ if (diffSong) {
+ context->update(current);
+ trayItem->songChanged(song, isPlaying);
+ }
centerPlayQueueAction->setEnabled(!song.isEmpty());
}
@@ -1780,10 +1894,10 @@ void MainWindow::updateStatus(MPDStatus * const status)
}
playQueueModel.setState(status->state());
+ StdActions::self()->playPauseTrackAction->setEnabled(status->playlistLength()>0);
switch (status->state()) {
case MPDState_Playing:
StdActions::self()->playPauseTrackAction->setIcon(Icons::self()->toolbarPauseIcon);
- StdActions::self()->playPauseTrackAction->setEnabled(0!=status->playlistLength());
enableStopActions(true);
StdActions::self()->nextTrackAction->setEnabled(status->playlistLength()>1);
StdActions::self()->prevTrackAction->setEnabled(status->playlistLength()>1);
@@ -1792,7 +1906,6 @@ void MainWindow::updateStatus(MPDStatus * const status)
case MPDState_Inactive:
case MPDState_Stopped:
StdActions::self()->playPauseTrackAction->setIcon(Icons::self()->toolbarPlayIcon);
- StdActions::self()->playPauseTrackAction->setEnabled(0!=status->playlistLength());
enableStopActions(false);
StdActions::self()->nextTrackAction->setEnabled(false);
StdActions::self()->prevTrackAction->setEnabled(false);
@@ -1807,7 +1920,6 @@ void MainWindow::updateStatus(MPDStatus * const status)
break;
case MPDState_Paused:
StdActions::self()->playPauseTrackAction->setIcon(Icons::self()->toolbarPlayIcon);
- StdActions::self()->playPauseTrackAction->setEnabled(0!=status->playlistLength());
enableStopActions(0!=status->playlistLength());
StdActions::self()->nextTrackAction->setEnabled(status->playlistLength()>1);
StdActions::self()->prevTrackAction->setEnabled(status->playlistLength()>1);
@@ -1828,6 +1940,14 @@ void MainWindow::updateStatus(MPDStatus * const status)
// Update status info
lastState = status->state();
lastSongId = status->songId();
+ #if defined Q_OS_WIN && QT_VERSION>=0x050000
+ if (thumbnailTooolbar) {
+ thumbnailTooolbar->update(status);
+ }
+ #endif
+ #ifdef Q_OS_MAC
+ dockMenu->update(status);
+ #endif
}
void MainWindow::playQueueItemActivated(const QModelIndex &index)
@@ -1838,7 +1958,8 @@ void MainWindow::playQueueItemActivated(const QModelIndex &index)
void MainWindow::promptClearPlayQueue()
{
if (Settings::self()->playQueueConfirmClear()) {
- if (QDialogButtonBox::GnomeLayout==style()->styleHint(QStyle::SH_DialogButtonLayout)) {
+ int btnLayout=style()->styleHint(QStyle::SH_DialogButtonLayout);
+ if (QDialogButtonBox::GnomeLayout==btnLayout || QDialogButtonBox::MacLayout==btnLayout) {
messageWidget->setActions(QList<QAction*>() << cancelAction << clearPlayQueueAction);
} else {
messageWidget->setActions(QList<QAction*>() << clearPlayQueueAction << cancelAction);
@@ -1863,7 +1984,8 @@ void MainWindow::clearPlayQueue()
void MainWindow::centerPlayQueue()
{
- QModelIndex idx=playQueueProxyModel.mapFromSource(playQueueModel.index(playQueueModel.currentSongRow(), 0));
+ QModelIndex idx=playQueueProxyModel.mapFromSource(playQueueModel.index(playQueueModel.currentSongRow(),
+ playQueue->isGrouped() ? 0 : PlayQueueModel::COL_TITLE));
if (idx.isValid()) {
if (playQueue->isGrouped()) {
playQueue->updateRows(idx.row(), current.key, true, true);
@@ -1873,11 +1995,11 @@ void MainWindow::centerPlayQueue()
}
}
-void MainWindow::addToPlayQueue(bool replace, quint8 priority, bool randomAlbums)
+void MainWindow::addToPlayQueue(bool replace, quint8 priority)
{
playQueueSearchWidget->clear();
if (currentPage) {
- currentPage->addSelectionToPlaylist(QString(), replace, priority, randomAlbums);
+ currentPage->addSelectionToPlaylist(QString(), replace, priority);
}
}
@@ -1928,11 +2050,11 @@ void MainWindow::addToNewStoredPlaylist()
QString name = InputDialog::getText(i18n("Playlist Name"), i18n("Enter a name for the playlist:"), QString(), 0, this);
if (name==StreamsModel::constPlayListName) {
- MessageBox::error(this, i18n("<b>%1</b> is used to store favorite streams, please choose another name.", name));
+ MessageBox::error(this, i18n("'%1' is used to store favorite streams, please choose another name.", name));
continue;
}
if (PlaylistsModel::self()->exists(name)) {
- switch(MessageBox::warningYesNoCancel(this, i18n("A playlist named <b>%1</b> already exists!<br/>Add to that playlist?", name),
+ switch(MessageBox::warningYesNoCancel(this, i18n("A playlist named '%1' already exists!\n\nAdd to that playlist?", name),
i18n("Existing Playlist"))) {
case MessageBox::Cancel: return;
case MessageBox::Yes: break;
@@ -2037,7 +2159,9 @@ void MainWindow::showSongInfo()
void MainWindow::fullScreen()
{
if (expandInterfaceAction->isChecked()) {
+ #ifndef Q_OS_MAC
fullScreenLabel->setVisible(!isFullScreen());
+ #endif
expandInterfaceAction->setEnabled(isFullScreen());
if (isFullScreen()) {
showNormal();
@@ -2203,11 +2327,6 @@ void MainWindow::locateTracks(const QList<Song> &songs)
}
}
-void MainWindow::locateTrack()
-{
- locateTracks(playQueue->selectedSongs());
-}
-
void MainWindow::locateArtist(const QString &artist)
{
if (songInfoAction->isCheckable()) {
@@ -2237,32 +2356,24 @@ void MainWindow::dynamicStatus(const QString &message)
#endif
}
+void MainWindow::showPlayQueueSearch()
+{
+ playQueueSearchWidget->activate();
+}
+
void MainWindow::showSearch()
{
- if (playQueue->hasFocus()) {
+ if (!searchPlayQueueAction->isEnabled() && playQueue->hasFocus()) {
playQueueSearchWidget->activate();
} else if (context->isVisible()) {
context->search();
} else if (currentPage && splitter->sizes().at(0)>0) {
currentPage->focusSearch();
- } else if (playQueuePage->isVisible() || playQueue->isVisible()) {
+ } else if (!searchPlayQueueAction->isEnabled() && (playQueuePage->isVisible() || playQueue->isVisible())) {
playQueueSearchWidget->activate();
}
}
-bool MainWindow::canClose()
-{
- #ifdef ENABLE_ONLINE_SERVICES
- if (OnlineServicesModel::self()->isDownloading() &&
- MessageBox::No==MessageBox::warningYesNo(this, i18n("Podcasts are currently being downloaded\n\nQuiting now will abort all downloads."),
- QString(), GuiItem(i18n("Abort downloads and quit")), GuiItem("Do not quit just yet"))) {
- return false;
- }
- OnlineServicesModel::self()->cancelAll();
- #endif
- return true;
-}
-
void MainWindow::expandAll()
{
QWidget *f=QApplication::focusWidget();
@@ -2282,30 +2393,19 @@ void MainWindow::collapseAll()
void MainWindow::editTags()
{
#ifdef TAGLIB_FOUND
+ if (TagEditor::instanceCount() || !canShowDialog()) {
+ return;
+ }
QList<Song> songs;
- if (currentPage==folderPage) {
+ bool isPlayQueue=playQueue->hasFocus();
+ if (isPlayQueue) {
+ songs=playQueue->selectedSongs();
+ } else if (currentPage==folderPage) {
songs=folderPage->selectedSongs(FolderPage::ES_FillEmpty);
} else if (currentPage) {
songs=currentPage->selectedSongs();
}
- editTags(songs, false);
- #endif
-}
-
-void MainWindow::editPlayQueueTags()
-{
- #ifdef TAGLIB_FOUND
- editTags(playQueue->selectedSongs(), true);
- #endif
-}
-
-#ifdef TAGLIB_FOUND
-void MainWindow::editTags(const QList<Song> &songs, bool isPlayQueue)
-{
- if (songs.isEmpty() && isPlayQueue) {
- MessageBox::error(this, i18n("Can only edit tags of songs within MPD's music collection."));
- }
- if (songs.isEmpty() || TagEditor::instanceCount() || !canShowDialog()) {
+ if (songs.isEmpty()) {
return;
}
QSet<QString> artists, albumArtists, composers, albums, genres;
@@ -2317,15 +2417,13 @@ void MainWindow::editTags(const QList<Song> &songs, bool isPlayQueue)
if (udi.isEmpty()) {
return;
}
- } else
- #else
- Q_UNUSED(isPlayQueue)
+ }
#endif
MusicLibraryModel::self()->getDetails(artists, albumArtists, composers, albums, genres);
TagEditor *dlg=new TagEditor(this, songs, artists, albumArtists, composers, albums, genres, udi);
dlg->show();
+ #endif
}
-#endif
void MainWindow::organiseFiles()
{
@@ -2529,19 +2627,16 @@ void MainWindow::startContextTimer()
int MainWindow::calcMinHeight()
{
- if (tabWidget->style()&FancyTabWidget::Side && tabWidget->style()&FancyTabWidget::Large) {
- return toolbar->height()+(tabWidget->visibleCount()*tabWidget->tabSize().height());
- } else {
- return Utils::scaleForDpi(256);
- }
+ return tabWidget->style()&FancyTabWidget::Side && tabWidget->style()&FancyTabWidget::Large
+ ? toolbar->height()+(tabWidget->visibleCount()*tabWidget->tabSize().height())
+ : Utils::scaleForDpi(256);
}
int MainWindow::calcCollapsedSize()
{
- if (showMenuAction && menuButton && showMenuAction->isChecked()) {
- return toolbar->height()+menuBar()->height();
- }
- return toolbar->height();
+ return showMenuAction && menuButton && showMenuAction->isChecked()
+ ? toolbar->height()+menuBar()->height()
+ : toolbar->height();
}
void MainWindow::setCollapsedSize()
@@ -2638,11 +2733,6 @@ void MainWindow::toggleMenubar()
}
}
-#if !defined Q_OS_WIN && !defined Q_OS_MAC && QT_VERSION < 0x050000
-#include <QX11Info>
-#include <X11/Xlib.h>
-#endif
-
void MainWindow::hideWindow()
{
lastPos=pos();
@@ -2652,52 +2742,8 @@ void MainWindow::hideWindow()
void MainWindow::restoreWindow()
{
bool wasHidden=isHidden();
- #ifdef Q_OS_WIN // FIXME - need on mac?
- raiseWindow(this);
- #endif
- raise();
- showNormal();
- activateWindow();
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
- // This section seems to be required for compiz, so that MPRIS.Raise actually shows the window, and not just highlight launcher.
- #if QT_VERSION < 0x050000
- static const Atom constNetActive=XInternAtom(QX11Info::display(), "_NET_ACTIVE_WINDOW", False);
- QX11Info info;
- XEvent xev;
- xev.xclient.type = ClientMessage;
- xev.xclient.serial = 0;
- xev.xclient.send_event = True;
- xev.xclient.message_type = constNetActive;
- xev.xclient.display = QX11Info::display();
- xev.xclient.window = effectiveWinId();
- xev.xclient.format = 32;
- xev.xclient.data.l[0] = 2;
- xev.xclient.data.l[1] = xev.xclient.data.l[2] = xev.xclient.data.l[3] = xev.xclient.data.l[4] = 0;
- XSendEvent(QX11Info::display(), QX11Info::appRootWindow(info.screen()), False, SubstructureRedirectMask|SubstructureNotifyMask, &xev);
- #else // QT_VERSION < 0x050000
- QString wmctrl=Utils::findExe(QLatin1String("wmctrl"));
- if (!wmctrl.isEmpty()) {
- if (wasHidden) {
- QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
- }
- QProcess::execute(wmctrl, QStringList() << QLatin1String("-i") << QLatin1String("-a") << QString::number(effectiveWinId()));
- }
- #endif // QT_VERSION < 0x050000
- #endif // !defined Q_OS_WIN && !defined Q_OS_MAC
+ Utils::raiseWindow(this);
if (wasHidden && !lastPos.isNull()) {
move(lastPos);
}
- #ifdef ENABLE_KDE_SUPPORT
- KWindowSystem::forceActiveWindow(effectiveWinId());
- #endif
}
-
-#ifdef Q_OS_WIN
-// This is down here, because windows.h includes ALL windows stuff - and we get conflicts with MessageBox :-(
-#include <windows.h>
-static void raiseWindow(QWidget *w)
-{
- ::SetWindowPos(reinterpret_cast<HWND>(w->effectiveWinId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
- ::SetWindowPos(reinterpret_cast<HWND>(w->effectiveWinId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
-}
-#endif
diff --git a/gui/mainwindow.h b/gui/mainwindow.h
index 30cbdc7..fd38074 100644
--- a/gui/mainwindow.h
+++ b/gui/mainwindow.h
@@ -79,6 +79,12 @@ class HttpStream;
class MPDStatus;
struct MPDConnectionDetails;
struct Output;
+#if defined Q_OS_WIN && QT_VERSION>=0x050000
+class ThumbnailToolBar;
+#endif
+#ifdef Q_OS_MAC
+class DockMenu;
+#endif
// Dummy classes so that when class name is saved to the config file, we get a more meaningful name than QWidget!!!
class PlayQueuePage : public QWidget
@@ -129,11 +135,13 @@ public:
protected:
void keyPressEvent(QKeyEvent *event);
+ #if defined Q_OS_WIN && QT_VERSION >= 0x050000
+ void showEvent(QShowEvent *event);
+ #endif
void closeEvent(QCloseEvent *event);
private:
void addMenuAction(QMenu *menu, QAction *action);
- void initSizes();
void setupTrayIcon();
Q_SIGNALS:
@@ -179,6 +187,7 @@ public Q_SLOTS:
void connectToMpd(const MPDConnectionDetails &details);
void streamUrl(const QString &u);
void refreshDbPromp();
+ void fullDbRefresh();
void showServerInfo();
void stopPlayback();
void stopAfterCurrentTrack();
@@ -189,7 +198,7 @@ public Q_SLOTS:
void realSearchPlayQueue();
void playQueueSearchActivated(bool a);
void updatePlayQueue(const QList<Song> &songs);
- void updateCurrentSong(const Song &song, bool wasEmpty=false);
+ void updateCurrentSong(Song song, bool wasEmpty=false);
void scrollPlayQueue(bool wasEmpty=false);
void updateStats();
void updateStatus();
@@ -200,7 +209,6 @@ public Q_SLOTS:
void removeFromPlayQueue() { playQueueModel.remove(playQueueProxyModel.mapToSourceRows(playQueue->selectedIndexes())); }
void replacePlayQueue() { addToPlayQueue(true); }
void addToPlayQueue() { addToPlayQueue(false); }
- void addRandomToPlayQueue() { addToPlayQueue(false, 0, true); }
void addWithPriority();
void addToNewStoredPlaylist();
void addToExistingStoredPlaylist(const QString &name) { addToExistingStoredPlaylist(name, playQueue->hasFocus()); }
@@ -246,11 +254,10 @@ public Q_SLOTS:
void toggleSplitterAutoHide();
void toggleMonoIcons();
void locateTracks(const QList<Song> &songs);
- void locateTrack();
+ void locateTrack() { locateTracks(playQueue->selectedSongs()); }
void locateArtist(const QString &artist);
void locateAlbum(const QString &artist, const QString &album);
void editTags();
- void editPlayQueueTags();
void organiseFiles();
void addToDevice(const QString &udi);
void deleteSongs();
@@ -258,6 +265,7 @@ public Q_SLOTS:
void deleteSongs(const QString &from, const QList<Song> &songs);
void replayGain();
void setCover();
+ void showPlayQueueSearch();
void showSearch();
void expandAll();
void collapseAll();
@@ -266,6 +274,7 @@ public Q_SLOTS:
void updateConnectionsMenu();
void controlConnectionsMenu(bool enable=true);
void controlDynamicButton();
+ void setRating();
private:
bool canClose();
@@ -274,10 +283,7 @@ private:
void enableStopActions(bool enable);
void updateStatus(MPDStatus * const status);
void readSettings();
- void addToPlayQueue(bool replace, quint8 priority=0, bool randomAlbums=false);
- #ifdef TAGLIB_FOUND
- void editTags(const QList<Song> &songs, bool isPlayQueue);
- #endif
+ void addToPlayQueue(bool replace, quint8 priority=0);
bool currentIsStream() const { return playQueueModel.rowCount() && -1!=current.id && current.isStream(); }
void updateWindowTitle();
void showTab(int page) { tabWidget->setCurrentIndex(page); }
@@ -310,6 +316,7 @@ private:
Action *prefAction;
Action *refreshDbAction;
Action *doDbRefreshAction;
+ Action *dbFullRefreshAction;
Action *connectAction;
Action *connectionsAction;
Action *outputsAction;
@@ -346,6 +353,9 @@ private:
Action *clearPlayQueueAction;
Action *cancelAction;
Action *clearNewStateAction;
+ Action *ratingAction;
+ Action *fwdAction;
+ Action *revAction;
TrayItem *trayItem;
QPoint lastPos;
QSize expandedSize;
@@ -392,6 +402,12 @@ private:
int contextSwitchTime;
enum { CS_Init, CS_Connected, CS_Disconnected } connectedState;
bool stopAfterCurrent;
+ #if defined Q_OS_WIN && QT_VERSION>=0x050000
+ ThumbnailToolBar *thumbnailTooolbar;
+ #endif
+ #ifdef Q_OS_MAC
+ DockMenu *dockMenu;
+ #endif
friend class TrayItem;
};
diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui
index 65cf5ef..c56d9f5 100644
--- a/gui/mainwindow.ui
+++ b/gui/mainwindow.ui
@@ -193,7 +193,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
- <height>21</height>
+ <height>2</height>
</size>
</property>
</spacer>
@@ -212,6 +212,16 @@
<widget class="ScrobblingStatus" name="scrobblingStatus"/>
</item>
<item>
+ <widget class="ToolButton" name="streamPlayButton">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="ToolButton" name="repeatButton">
<property name="checkable">
<bool>true</bool>
diff --git a/gui/mediakeys.cpp b/gui/mediakeys.cpp
index c225967..01ab819 100644
--- a/gui/mediakeys.cpp
+++ b/gui/mediakeys.cpp
@@ -30,47 +30,16 @@
#endif
#include "multimediakeysinterface.h"
#include "stdactions.h"
-#include "settings.h"
#include "support/globalstatic.h"
-
-GLOBAL_STATIC(MediaKeys, instance)
-
-QString MediaKeys::toString(InterfaceType i)
+#include <QDebug>
+static bool debugIsEnabled=false;
+#define DBUG if (debugIsEnabled) qWarning() << "MediaKeys" << __FUNCTION__
+void MediaKeys::enableDebug()
{
- switch (i) {
- case NoInterface:
- default:
- return QString();
- case GnomeInteface:
- return "gnome";
- case QxtInterface:
- return "qxt";
- }
+ debugIsEnabled=true;
}
-MediaKeys::InterfaceType MediaKeys::toIface(const QString &i)
-{
- #if defined Q_OS_MAC
- return NoInterface;
- #endif
-
- if (i==toString(GnomeInteface)) {
- #ifdef QT_QTDBUS_FOUND
- return GnomeInteface;
- #else
- return NoInterface;
- #endif
- }
-
- if (i==toString(QxtInterface)) {
- #if QT_VERSION < 0x050000
- return QxtInterface;
- #else
- return NoInterface;
- #endif
- }
- return NoInterface;
-}
+GLOBAL_STATIC(MediaKeys, instance)
MediaKeys::MediaKeys()
{
@@ -97,66 +66,37 @@ MediaKeys::~MediaKeys()
#endif
}
-void MediaKeys::load()
+void MediaKeys::start()
{
- InterfaceType current=NoInterface;
- InterfaceType configured=toIface(Settings::self()->mediaKeysIface());
#ifdef QT_QTDBUS_FOUND
- if (gnome && gnome->isEnabled()) {
- current=GnomeInteface;
- }
- #endif
-
- #ifdef CANTATA_USE_QXT_MEDIAKEYS
- if (qxt && qxt->isEnabled()) {
- current=QxtInterface;
- }
- #endif
-
- if (current==configured) {
+ gnome=new GnomeMediaKeys(0);
+ if (activate(gnome)) {
+ DBUG << "Using Gnome";
return;
}
-
- #ifdef QT_QTDBUS_FOUND
- if (gnome && GnomeInteface==current) {
- disable(gnome);
- gnome->deleteLater();
- gnome=0;
- }
- #endif
-
- #ifdef CANTATA_USE_QXT_MEDIAKEYS
- if (qxt && QxtInterface==current) {
- disable(qxt);
- qxt->deleteLater();
- qxt=0;
- }
- #endif
-
- #ifdef QT_QTDBUS_FOUND
- if (GnomeInteface==configured) {
- if (!gnome) {
- gnome=new GnomeMediaKeys(0);
- }
- enable(gnome);
- }
+ DBUG << "Gnome failed";
+ gnome->deleteLater();
+ gnome=0;
#endif
#ifdef CANTATA_USE_QXT_MEDIAKEYS
- if (QxtInterface==configured) {
- if (!qxt) {
- qxt=new QxtMediaKeys(0);
- }
- enable(qxt);
+ qxt=new QxtMediaKeys(0);
+ if (activate(qxt)) {
+ DBUG << "Using Qxt";
+ return;
}
+ DBUG << "Qxt failed";
+ qxt->deleteLater();
+ qxt=0;
#endif
+ DBUG << "None";
}
void MediaKeys::stop()
{
#ifdef QT_QTDBUS_FOUND
if (gnome) {
- disable(gnome);
+ deactivate(gnome);
gnome->deleteLater();
gnome=0;
}
@@ -164,34 +104,36 @@ void MediaKeys::stop()
#ifdef CANTATA_USE_QXT_MEDIAKEYS
if (qxt) {
- disable(qxt);
+ deactivate(qxt);
qxt->deleteLater();
qxt=0;
}
#endif
}
-void MediaKeys::enable(MultiMediaKeysInterface *iface)
+bool MediaKeys::activate(MultiMediaKeysInterface *iface)
{
- if (!iface || iface->isEnabled()) {
- return;
+ if (!iface) {
+ return false;
}
- QObject::connect(iface, SIGNAL(playPause()), StdActions::self()->playPauseTrackAction, SIGNAL(triggered()));
- QObject::connect(iface, SIGNAL(stop()), StdActions::self()->stopPlaybackAction, SIGNAL(triggered()));
- QObject::connect(iface, SIGNAL(next()), StdActions::self()->nextTrackAction, SIGNAL(triggered()));
- QObject::connect(iface, SIGNAL(previous()), StdActions::self()->prevTrackAction, SIGNAL(triggered()));
- iface->setEnabled(true);
+ if (iface->activate()) {
+ QObject::connect(iface, SIGNAL(playPause()), StdActions::self()->playPauseTrackAction, SIGNAL(triggered()));
+ QObject::connect(iface, SIGNAL(stop()), StdActions::self()->stopPlaybackAction, SIGNAL(triggered()));
+ QObject::connect(iface, SIGNAL(next()), StdActions::self()->nextTrackAction, SIGNAL(triggered()));
+ QObject::connect(iface, SIGNAL(previous()), StdActions::self()->prevTrackAction, SIGNAL(triggered()));
+ return true;
+ }
+ return false;
}
-void MediaKeys::disable(MultiMediaKeysInterface *iface)
+void MediaKeys::deactivate(MultiMediaKeysInterface *iface)
{
- if (!iface || !iface->isEnabled()) {
+ if (!iface) {
return;
}
QObject::disconnect(iface, SIGNAL(playPause()), StdActions::self()->playPauseTrackAction, SIGNAL(triggered()));
QObject::disconnect(iface, SIGNAL(stop()), StdActions::self()->stopPlaybackAction, SIGNAL(triggered()));
QObject::disconnect(iface, SIGNAL(next()), StdActions::self()->nextTrackAction, SIGNAL(triggered()));
QObject::disconnect(iface, SIGNAL(previous()), StdActions::self()->prevTrackAction, SIGNAL(triggered()));
- iface->setEnabled(false);
+ iface->deactivate();
}
-
diff --git a/gui/mediakeys.h b/gui/mediakeys.h
index 70498b6..aec6b17 100644
--- a/gui/mediakeys.h
+++ b/gui/mediakeys.h
@@ -38,25 +38,18 @@ class MultiMediaKeysInterface;
class MediaKeys
{
public:
- enum InterfaceType {
- NoInterface,
- GnomeInteface,
- QxtInterface
- };
-
+ static void enableDebug();
static MediaKeys * self();
- static QString toString(InterfaceType i);
- static InterfaceType toIface(const QString &i);
MediaKeys();
~MediaKeys();
- void load();
+ void start();
void stop();
private:
- void enable(MultiMediaKeysInterface *iface);
- void disable(MultiMediaKeysInterface *iface);
+ bool activate(MultiMediaKeysInterface *iface);
+ void deactivate(MultiMediaKeysInterface *iface);
private:
#ifdef QT_QTDBUS_FOUND
diff --git a/gui/multimediakeysinterface.h b/gui/multimediakeysinterface.h
index b7aaac5..4456377 100644
--- a/gui/multimediakeysinterface.h
+++ b/gui/multimediakeysinterface.h
@@ -30,23 +30,17 @@ class MultiMediaKeysInterface : public QObject
{
Q_OBJECT
public:
- MultiMediaKeysInterface(QObject *p) : QObject(p), enabled(false) { }
+ MultiMediaKeysInterface(QObject *p) : QObject(p) { }
~MultiMediaKeysInterface() { }
- void setEnabled(bool e) { activate(e); enabled=e; }
- bool isEnabled() const { return enabled; }
-
-private:
- virtual void activate(bool a)=0;
+ virtual bool activate()=0;
+ virtual void deactivate()=0;
Q_SIGNALS:
void playPause();
void stop();
void next();
void previous();
-
-protected:
- bool enabled;
};
#endif
diff --git a/gui/page.h b/gui/page.h
index ed1ee2b..bebc94d 100644
--- a/gui/page.h
+++ b/gui/page.h
@@ -33,8 +33,8 @@ public:
virtual ~Page() { }
virtual Song coverRequest() const { return Song(); }
virtual QList<Song> selectedSongs(bool allowPlaylists=false) const { Q_UNUSED(allowPlaylists) return QList<Song>(); }
- virtual void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false) {
- Q_UNUSED(name) Q_UNUSED(replace) Q_UNUSED(priorty) Q_UNUSED(randomAlbums)
+ virtual void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0) {
+ Q_UNUSED(name) Q_UNUSED(replace) Q_UNUSED(priorty)
}
#ifdef ENABLE_DEVICES_SUPPORT
virtual void addSelectionToDevice(const QString &udi) { Q_UNUSED(udi) }
diff --git a/gui/playbacksettings.cpp b/gui/playbacksettings.cpp
index bca2a92..4e07b3d 100644
--- a/gui/playbacksettings.cpp
+++ b/gui/playbacksettings.cpp
@@ -24,6 +24,7 @@
#include "playbacksettings.h"
#include "settings.h"
#include "support/localize.h"
+#include "support/utils.h"
#include "mpd/mpdconnection.h"
#include "support/icon.h"
#include "widgets/basicitemdelegate.h"
@@ -56,22 +57,26 @@ PlaybackSettings::PlaybackSettings(QWidget *p)
connect(this, SIGNAL(setCrossFade(int)), MPDConnection::self(), SLOT(setCrossFade(int)));
connect(this, SIGNAL(getReplayGain()), MPDConnection::self(), SLOT(getReplayGain()));
connect(aboutReplayGain, SIGNAL(leftClickedUrl()), SLOT(showAboutReplayGain()));
- int iconSize=Icon::dlgIconSize();
+ int iconSize=Utils::limitedHeight(this) ? 32 : Icon::dlgIconSize();
messageIcon->setMinimumSize(iconSize, iconSize);
messageIcon->setMaximumSize(iconSize, iconSize);
mpdConnectionStateChanged(MPDConnection::self()->isConnected());
- #if defined Q_OS_WIN || defined Q_OS_MAC
+ #if defined Q_OS_WIN || (defined Q_OS_MAC && !defined IOKIT_FOUND)
REMOVE(inhibitSuspend)
#endif
outputsView->setVisible(outputsView->count()>1);
outputsViewLabel->setVisible(outputsView->count()>1);
+
+ #ifdef Q_OS_MAC
+ expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
+ #endif
}
void PlaybackSettings::load()
{
stopOnExit->setChecked(Settings::self()->stopOnExit());
stopFadeDuration->setValue(Settings::self()->stopFadeDuration());
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
+ #if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
inhibitSuspend->setChecked(Settings::self()->inhibitSuspend());
#endif
@@ -85,8 +90,7 @@ void PlaybackSettings::load()
void PlaybackSettings::save()
{
Settings::self()->saveStopOnExit(stopOnExit->isChecked());
- Settings::self()->saveStopFadeDuration(stopFadeDuration->value());
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
+ #if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
Settings::self()->saveInhibitSuspend(inhibitSuspend->isChecked());
#endif
@@ -167,13 +171,13 @@ void PlaybackSettings::mpdConnectionStateChanged(bool c)
void PlaybackSettings::showAboutReplayGain()
{
- MessageBox::information(this, i18n("<p>Replay Gain is a proposed standard published in 2001 to normalize the perceived loudness of computer "
+ MessageBox::information(this, i18n("Replay Gain is a proposed standard published in 2001 to normalize the perceived loudness of computer "
"audio formats such as MP3 and Ogg Vorbis. It works on a track/album basis, and is now supported in a "
- "growing number of players.</p>"
- "<p>The following ReplayGain settings may be used:<ul>"
+ "growing number of players."
+ "<br/><br/>The following ReplayGain settings may be used:<ul>"
"<li><i>None</i> - No ReplayGain is applied.</li>"
"<li><i>Track</i> - Volume will be adjusted using the track's ReplayGain tags.</li>"
"<li><i>Album</i> - Volume will be adjusted using the albums's ReplayGain tags.</li>"
"<li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain tags if random play is activated, otherwise the album's tags will be used.</li>"
- "</ul></p>"));
+ "</ul>"));
}
diff --git a/gui/playbacksettings.ui b/gui/playbacksettings.ui
index 1553b21..26e5cc7 100644
--- a/gui/playbacksettings.ui
+++ b/gui/playbacksettings.ui
@@ -66,32 +66,10 @@
</property>
</widget>
</item>
- <item row="3" column="0">
- <spacer name="verticalSpacer_8">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="4" column="0" colspan="2">
- <widget class="QLabel" name="noteLabel">
+ <item row="3" column="0" colspan="2">
+ <widget class="NoteLabel" name="noteLabel">
<property name="text">
- <string><i><b>NOTE:</b> If you press and hold the stop button, then a menu will be shown allowing you to choose whether to stop playback now, or after the current track.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you press and hold the stop button, then a menu will be shown allowing you to choose whether to stop playback now, or after the current track. (The stop button can be enabled in the Interface/Toolbar section)</string>
</property>
</widget>
</item>
@@ -229,14 +207,14 @@
</widget>
</item>
<item>
- <spacer name="paddingSpacer">
+ <spacer name="expandingSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>2</height>
+ <height>0</height>
</size>
</property>
</spacer>
@@ -250,6 +228,11 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
+ <class>NoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
<class>UrlLabel</class>
<extends>QWidget</extends>
<header>support/urllabel.h</header>
diff --git a/gui/playlistspage.cpp b/gui/playlistspage.cpp
index 6d2e883..0796b01 100644
--- a/gui/playlistspage.cpp
+++ b/gui/playlistspage.cpp
@@ -95,9 +95,9 @@ PlaylistsPage::PlaylistsPage(QWidget *p)
connect(this, SIGNAL(savePlaylist(const QString &)), MPDConnection::self(), SLOT(savePlaylist(const QString &)));
connect(this, SIGNAL(renamePlaylist(const QString &, const QString &)), MPDConnection::self(), SLOT(renamePlaylist(const QString &, const QString &)));
connect(this, SIGNAL(removeFromPlaylist(const QString &, const QList<quint32> &)), MPDConnection::self(), SLOT(removeFromPlaylist(const QString &, const QList<quint32> &)));
- connect(StdActions::self()->savePlayQueueAction, SIGNAL(triggered(bool)), this, SLOT(savePlaylist()));
- connect(renamePlaylistAction, SIGNAL(triggered(bool)), this, SLOT(renamePlaylist()));
- connect(removeDuplicatesAction, SIGNAL(triggered(bool)), this, SLOT(removeDuplicates()));
+ connect(StdActions::self()->savePlayQueueAction, SIGNAL(triggered()), this, SLOT(savePlaylist()));
+ connect(renamePlaylistAction, SIGNAL(triggered()), this, SLOT(renamePlaylist()));
+ connect(removeDuplicatesAction, SIGNAL(triggered()), this, SLOT(removeDuplicates()));
connect(PlaylistsModel::self(), SIGNAL(updated(const QModelIndex &)), this, SLOT(updated(const QModelIndex &)));
connect(PlaylistsModel::self(), SIGNAL(playlistRemoved(quint32)), view, SLOT(collectionRemoved(quint32)));
QMenu *menu=new QMenu(this);
@@ -169,9 +169,8 @@ void PlaylistsPage::clear()
// return PlaylistsModel::self()->filenames(mapped, true);
//}
-void PlaylistsPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void PlaylistsPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- Q_UNUSED(randomAlbums)
addItemsToPlayList(view->selectedIndexes(), name, replace, priorty);
}
@@ -222,7 +221,7 @@ void PlaylistsPage::removeItems()
}
if (remPlaylists.count() &&
- MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove the selected playlists?\nThis cannot be undone."),
+ MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove the selected playlists?\n\nThis cannot be undone."),
i18n("Remove Playlists"), StdGuiItem::remove(), StdGuiItem::cancel())) {
return;
}
@@ -243,7 +242,7 @@ void PlaylistsPage::savePlaylist()
if (!name.isEmpty()) {
if (PlaylistsModel::self()->exists(name)) {
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("A playlist named <b>%1</b> already exists!<br/>Overwrite?", name),
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("A playlist named '%1' already exists!\n\nOverwrite?", name),
i18n("Overwrite Playlist"), StdGuiItem::overwrite(), StdGuiItem::cancel())) {
return;
}
@@ -270,7 +269,7 @@ void PlaylistsPage::renamePlaylist()
if (!newName.isEmpty() && name!=newName) {
if (PlaylistsModel::self()->exists(newName)) {
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("A playlist named <b>%1</b> already exists!<br/>Overwrite?", newName),
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("A playlist named '%1' already exists!\n\nOverwrite?", newName),
i18n("Overwrite Playlist"), StdGuiItem::overwrite(), StdGuiItem::cancel())) {
return;
}
diff --git a/gui/playlistspage.h b/gui/playlistspage.h
index 18716ff..1a551fd 100644
--- a/gui/playlistspage.h
+++ b/gui/playlistspage.h
@@ -44,7 +44,7 @@ public:
void refresh();
void clear();
//QStringList selectedFiles() const;
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
void setView(int mode);
void focusSearch() { view->focusSearch(); }
#ifdef ENABLE_DEVICES_SUPPORT
diff --git a/gui/preferencesdialog.cpp b/gui/preferencesdialog.cpp
index 75e2e13..418b3e1 100644
--- a/gui/preferencesdialog.cpp
+++ b/gui/preferencesdialog.cpp
@@ -54,6 +54,8 @@
#include "shortcutssettingspage.h"
#endif
#include "scrobbling/scrobblingsettings.h"
+#include <QDesktopWidget>
+#include <QTimer>
static int iCount=0;
@@ -63,12 +65,9 @@ int PreferencesDialog::instanceCount()
}
PreferencesDialog::PreferencesDialog(QWidget *parent)
- : Dialog(parent, "PreferencesDialog")
+ : ConfigDialog(parent, "PreferencesDialog")
{
iCount++;
- setButtons(Ok|Apply|Cancel);
-
- pageWidget = new PageWidget(this);
server = new ServerSettings(0);
playback = new PlaybackSettings(0);
files = new FileSettings(0);
@@ -82,22 +81,22 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
interface->load();
context->load();
scrobbling->load();
- pages.insert(QLatin1String("collection"), pageWidget->addPage(server, i18n("Collection"), Icons::self()->audioFileIcon, i18n("Collection Settings")));
- pageWidget->addPage(playback, i18n("Playback"), Icon("media-playback-start"), i18n("Playback Settings"));
- pageWidget->addPage(files, i18n("Files"), Icons::self()->filesIcon, i18n("File Settings"));
- pages.insert(QLatin1String("interface"), pageWidget->addPage(interface, i18n("Interface"), Icon("preferences-other"), i18n("Interface Settings")));
+ addPage(QLatin1String("collection"), server, i18n("Collection"), Icons::self()->audioFileIcon, i18n("Collection Settings"));
+ addPage(QLatin1String("playback"), playback, i18n("Playback"), Icon("media-playback-start"), i18n("Playback Settings"));
+ addPage(QLatin1String("files"), files, i18n("Files"), Icons::self()->filesIcon, i18n("File Settings"));
+ addPage(QLatin1String("interface"), interface, i18n("Interface"), Icon("preferences-other"), i18n("Interface Settings"));
#ifdef ENABLE_STREAMS
streams = new StreamsSettings(0);
- pages.insert(QLatin1String("streams"), pageWidget->addPage(streams, i18n("Streams"), Icons::self()->radioStreamIcon, i18n("Streams Settings")));
+ addPage(QLatin1String("streams"), streams, i18n("Streams"), Icons::self()->radioStreamIcon, i18n("Streams Settings"));
streams->load();
#endif
#ifdef ENABLE_ONLINE_SERVICES
online = new OnlineSettings(0);
- pages.insert(QLatin1String("online"), pageWidget->addPage(online, i18n("Online"), Icon("applications-internet"), i18n("Online Providers")));
+ addPage(QLatin1String("online"), online, i18n("Online"), Icon("applications-internet"), i18n("Online Providers"));
online->load();
#endif
- pageWidget->addPage(context, i18n("Context"), Icons::self()->contextIcon, i18n("Context View Settings"));
- pages.insert(QLatin1String("scrobbling"), pageWidget->addPage(scrobbling, i18n("Scrobbling"), Icons::self()->lastFmIcon, i18n("Scrobbling Settings")));
+ addPage(QLatin1String("context"), context, i18n("Context"), Icons::self()->contextIcon, i18n("Context View Settings"));
+ addPage(QLatin1String("scrobbling"), scrobbling, i18n("Scrobbling"), Icons::self()->lastFmIcon, i18n("Scrobbling Settings"));
#ifdef ENABLE_HTTP_SERVER
http = new HttpServerSettings(0);
if (http->haveMultipleInterfaces()) {
@@ -106,7 +105,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
if (icon.isNull()) {
icon=Icons::self()->streamIcon;
}
- pageWidget->addPage(http, i18n("HTTP Server"), icon, i18n("HTTP Server Settings"));
+ addPage(QLatin1String("http"), http, i18n("HTTP Server"), icon, i18n("HTTP Server Settings"));
} else {
http->deleteLater();
http=0;
@@ -115,26 +114,27 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
#if defined CDDB_FOUND || defined MUSICBRAINZ5_FOUND
audiocd = new AudioCdSettings(0);
audiocd->load();
- pageWidget->addPage(audiocd, i18n("Audio CD"), Icon("media-optical"), i18n("Audio CD Settings"));
+ addPage(QLatin1String("cd"), audiocd, i18n("Audio CD"), Icon("media-optical"), i18n("Audio CD Settings"));
#endif
#ifdef ENABLE_PROXY_CONFIG
proxy = new ProxySettings(0);
proxy->load();
- pageWidget->addPage(proxy, i18n("Proxy"), Icon("preferences-system-network"), i18nc("Qt-only", "Proxy Settings"));
+ addPage(QLatin1String("proxy"), proxy, i18n("Proxy"), Icon("preferences-system-network"), i18nc("Qt-only", "Proxy Settings"));
#endif
#ifndef ENABLE_KDE_SUPPORT
- shortcuts = new ShortcutsSettingsPage(pageWidget);
- pageWidget->addPage(shortcuts, i18nc("Qt-only", "Shortcuts"), Icons::self()->shortcutsIcon, i18nc("Qt-only", "Keyboard Shortcut Settings"));
+ shortcuts = new ShortcutsSettingsPage(0);
+ addPage(QLatin1String("shortcuts"), shortcuts, i18nc("Qt-only", "Shortcuts"), Icons::self()->shortcutsIcon, i18nc("Qt-only", "Keyboard Shortcut Settings"));
shortcuts->load();
#endif
- pageWidget->addPage(cache, i18n("Cache"), Icons::self()->folderIcon, i18n("Cached Items"));
+ addPage(QLatin1String("cache"), cache, i18n("Cache"), Icons::self()->folderIcon, i18n("Cached Items"));
+ #ifdef Q_OS_MAC
+ setCaption(i18n("Cantata Preferences"));
+ #else
setCaption(i18n("Configure"));
- setMainWidget(pageWidget);
+ #endif
setAttribute(Qt::WA_DeleteOnClose);
- int h=sizeHint().height();
- setMinimumHeight(h);
- setMinimumWidth(h*1.1);
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ setCurrentPage(QLatin1String("collection"));
}
PreferencesDialog::~PreferencesDialog()
@@ -145,12 +145,15 @@ PreferencesDialog::~PreferencesDialog()
void PreferencesDialog::showPage(const QString &page)
{
QStringList parts=page.split(QLatin1Char(':'));
- if (pages.contains(parts.at(0))) {
- pageWidget->setCurrentPage(pages[parts.at(0)]);
- if (parts.count()>1 && qobject_cast<InterfaceSettings *>(pages[parts.at(0)]->widget())) {
- static_cast<InterfaceSettings *>(pages[parts.at(0)]->widget())->showPage(parts.at(1));
+ if (setCurrentPage(parts.at(0))) {
+ if (parts.count()>1) {
+ QWidget *cur=getPage(parts.at(0));
+ if (qobject_cast<InterfaceSettings *>(cur)) {
+ static_cast<InterfaceSettings *>(cur)->showPage(parts.at(1));
+ }
}
}
+ Utils::raiseWindow(this);
}
void PreferencesDialog::writeSettings()
@@ -186,26 +189,12 @@ void PreferencesDialog::writeSettings()
emit settingsSaved();
}
-void PreferencesDialog::slotButtonClicked(int button)
+void PreferencesDialog::save()
{
- switch (button) {
- case Ok:
- case Apply:
- writeSettings();
- break;
- case Cancel:
- server->cancel();
- reject();
- // Need to call this - if not, when dialog is closed by window X control, it is not deleted!!!!
- Dialog::slotButtonClicked(button);
- break;
- default:
- break;
- }
-
- if (Ok==button) {
- accept();
- }
+ writeSettings();
+}
- Dialog::slotButtonClicked(button);
+void PreferencesDialog::cancel()
+{
+ server->cancel();
}
diff --git a/gui/preferencesdialog.h b/gui/preferencesdialog.h
index cd7d992..e695b77 100644
--- a/gui/preferencesdialog.h
+++ b/gui/preferencesdialog.h
@@ -25,8 +25,7 @@
#define PREFERENCES_DIALOG_H
#include "config.h"
-#include "support/dialog.h"
-#include "support/pagewidget.h"
+#include "support/configdialog.h"
#ifndef ENABLE_KDE_SUPPORT
class ProxySettings;
@@ -56,7 +55,7 @@ class ProxySettings;
#endif
class ScrobblingSettings;
-class PreferencesDialog : public Dialog
+class PreferencesDialog : public ConfigDialog
{
Q_OBJECT
@@ -67,7 +66,8 @@ public:
virtual ~PreferencesDialog();
private:
- void slotButtonClicked(int button);
+ void save();
+ void cancel();
public Q_SLOTS:
void showPage(const QString &page);
@@ -79,7 +79,6 @@ Q_SIGNALS:
void settingsSaved();
private:
- PageWidget *pageWidget;
ServerSettings *server;
PlaybackSettings *playback;
FileSettings *files;
@@ -105,7 +104,6 @@ private:
AudioCdSettings *audiocd;
#endif
ScrobblingSettings *scrobbling;
- QMap<QString, PageWidgetItem *> pages;
};
#endif
diff --git a/gui/qxtmediakeys.cpp b/gui/qxtmediakeys.cpp
index 3608eea..7c38d71 100644
--- a/gui/qxtmediakeys.cpp
+++ b/gui/qxtmediakeys.cpp
@@ -29,13 +29,15 @@ QxtMediaKeys::QxtMediaKeys(QObject *p)
{
}
-void QxtMediaKeys::activate(bool a)
+bool QxtMediaKeys::activate()
{
- if (a) {
- createShortcuts();
- } else {
- clear();
- }
+ createShortcuts();
+ return true; // Hmm... How to detect if this failed?
+}
+
+void QxtMediaKeys::deactivate()
+{
+ clear();
}
void QxtMediaKeys::createShortcuts()
@@ -64,3 +66,4 @@ void QxtMediaKeys::clear()
shortcuts.clear();
}
}
+
diff --git a/gui/qxtmediakeys.h b/gui/qxtmediakeys.h
index adde4d2..e1188a4 100644
--- a/gui/qxtmediakeys.h
+++ b/gui/qxtmediakeys.h
@@ -35,7 +35,8 @@ public:
QxtMediaKeys(QObject *p);
virtual ~QxtMediaKeys() { clear(); }
- void activate(bool a);
+ bool activate();
+ void deactivate();
private:
void createShortcuts();
diff --git a/gui/searchpage.cpp b/gui/searchpage.cpp
index 7af4b3b..3303b8f 100644
--- a/gui/searchpage.cpp
+++ b/gui/searchpage.cpp
@@ -75,7 +75,7 @@ SearchPage::SearchPage(QWidget *p)
connect(view, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(itemDoubleClicked(const QModelIndex &)));
connect(view, SIGNAL(searchItems()), this, SLOT(searchItems()));
connect(MPDConnection::self(), SIGNAL(stateChanged(bool)), this, SLOT(setSearchCategories()));
- connect(locateAction, SIGNAL(triggered(bool)), SLOT(locateSongs()));
+ connect(locateAction, SIGNAL(triggered()), SLOT(locateSongs()));
proxy.setSourceModel(&model);
view->setModel(&proxy);
view->setMode(ItemView::Mode_List);
@@ -150,9 +150,8 @@ QList<Song> SearchPage::selectedSongs(bool allowPlaylists) const
return model.songs(mapped, allowPlaylists);
}
-void SearchPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void SearchPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- Q_UNUSED(randomAlbums)
QStringList files=selectedFiles(true);
if (!files.isEmpty()) {
@@ -206,7 +205,6 @@ void SearchPage::controlActions()
StdActions::self()->addWithPriorityAction->setEnabled(enable);
StdActions::self()->replacePlayQueueAction->setEnabled(enable);
StdActions::self()->addToStoredPlaylistAction->setEnabled(enable);
- StdActions::self()->addRandomToPlayQueueAction->setEnabled(false);
locateAction->setEnabled(enable);
}
@@ -214,7 +212,8 @@ void SearchPage::setSearchCategories()
{
int newState=(MPDConnection::self()->composerTagSupported() ? State_ComposerSupported : 0)|
(MPDConnection::self()->commentTagSupported() ? State_CommmentSupported : 0)|
- (MPDConnection::self()->performerTagSupported() ? State_PerformerSupported : 0);;
+ (MPDConnection::self()->performerTagSupported() ? State_PerformerSupported : 0)|
+ (MPDConnection::self()->modifiedFindSupported() ? State_ModifiedSupported : 0);
if (state==newState) {
// No changes to be made!
@@ -238,8 +237,11 @@ void SearchPage::setSearchCategories()
if (state&State_CommmentSupported) {
categories << QPair<QString, QString>(i18n("Comment:"), QLatin1String("comment"));
}
- categories << QPair<QString, QString>(i18n("Date:"), QLatin1String("date"))
- << QPair<QString, QString>(i18n("File:"), QLatin1String("file"))
+ categories << QPair<QString, QString>(i18n("Date:"), QLatin1String("date"));
+ if (state&State_ModifiedSupported) {
+ categories << QPair<QString, QString>(i18n("Modified:"), MPDConnection::constModifiedSince);
+ }
+ categories << QPair<QString, QString>(i18n("File:"), QLatin1String("file"))
<< QPair<QString, QString>(i18n("Any:"), QLatin1String("any"));
view->setSearchCategories(categories);
}
diff --git a/gui/searchpage.h b/gui/searchpage.h
index db40f73..6300d13 100644
--- a/gui/searchpage.h
+++ b/gui/searchpage.h
@@ -45,7 +45,7 @@ public:
void setView(int mode);
QStringList selectedFiles(bool allowPlaylists=false) const;
QList<Song> selectedSongs(bool allowPlaylists=false) const;
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
#ifdef ENABLE_DEVICES_SUPPORT
void addSelectionToDevice(const QString &udi);
#endif
@@ -70,9 +70,10 @@ public Q_SLOTS:
private:
enum State
{
- State_ComposerSupported=0x01,
- State_CommmentSupported=0x02,
- State_PerformerSupported=0x04
+ State_ComposerSupported = 0x01,
+ State_CommmentSupported = 0x02,
+ State_PerformerSupported = 0x04,
+ State_ModifiedSupported = 0x08
};
int state;
diff --git a/gui/searchpage.ui b/gui/searchpage.ui
index 50f7996..f3b574c 100644
--- a/gui/searchpage.ui
+++ b/gui/searchpage.ui
@@ -29,6 +29,22 @@
<number>0</number>
</property>
<item>
+ <spacer name="padding">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>2</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="SqueezedTextLabel" name="statsLabel"/>
</item>
<item>
diff --git a/gui/serversettings.cpp b/gui/serversettings.cpp
index ba71f72..31c5b6d 100644
--- a/gui/serversettings.cpp
+++ b/gui/serversettings.cpp
@@ -83,9 +83,8 @@ ServerSettings::ServerSettings(QWidget *p)
{
setupUi(this);
#if defined ENABLE_DEVICES_SUPPORT
- musicFolderNoteLabel->setText(musicFolderNoteLabel->text()+
- i18n("<i> This folder will also be used to locate music files "
- "for transferring to (and from) devices.</i>"));
+ musicFolderNoteLabel->appendText(i18n("<i> This folder will also be used to locate music files "
+ "for transferring to (and from) devices.</i>"));
#endif
connect(combo, SIGNAL(activated(int)), SLOT(showDetails(int)));
connect(removeButton, SIGNAL(clicked(bool)), SLOT(remove()));
@@ -112,6 +111,10 @@ ServerSettings::ServerSettings(QWidget *p)
REMOVE(streamUrl)
REMOVE(streamUrlNoteLabel)
#endif
+
+ #ifdef Q_OS_MAC
+ expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
+ #endif
}
void ServerSettings::load()
@@ -230,10 +233,12 @@ void ServerSettings::add()
bool addStandard=true;
if (!haveBasicCollection && MPDUser::self()->isSupported()) {
+ static const QChar constBullet(0x2022);
+
switch (MessageBox::questionYesNoCancel(this,
- i18n("Which type of collection do you wish to connect to?<br/><ul>"
- "<li>Standard - music collection may be shared, is on another machine, or is already setup</li>"
- "<li>Basic - music collection is not shared with others, and Cantata will configure and control the MPD instance</li></ul>"),
+ i18n("Which type of collection do you wish to connect to?")+QLatin1String("\n\n")+
+ constBullet+QLatin1Char(' ')+i18n("Standard - music collection may be shared, is on another machine, or is already setup")+QLatin1Char('\n')+
+ constBullet+QLatin1Char(' ')+i18n("Basic - music collection is not shared with others, and Cantata will configure and control the MPD instance"),
i18n("Add Collection"), GuiItem(i18n("Standard")), GuiItem(i18n("Basic")))) {
case MessageBox::Yes: addStandard=true; break;
case MessageBox::No: addStandard=false; break;
@@ -275,7 +280,7 @@ void ServerSettings::remove()
{
int index=combo->currentIndex();
QString cName=1==stackedWidget->currentIndex() ? MPDUser::translatedName() : name->text();
- if (combo->count()>1 && MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Delete <b>%1</b>?", cName),
+ if (combo->count()>1 && MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Delete '%1'?", cName),
i18n("Delete"), StdGuiItem::del(), StdGuiItem::cancel())) {
bool isLast=index==(combo->count()-1);
combo->removeItem(index);
@@ -326,7 +331,7 @@ QString ServerSettings::generateName(int ignore) const
void ServerSettings::setDetails(const MPDConnectionDetails &details)
{
if (details.name==MPDUser::constName) {
- basicDir->setText(Utils::convertDirForDisplay(details.dir));
+ basicDir->setText(Utils::convertPathForDisplay(details.dir));
basicCoverName->setText(details.coverName);
stackedWidget->setCurrentIndex(1);
} else {
@@ -334,7 +339,7 @@ void ServerSettings::setDetails(const MPDConnectionDetails &details)
host->setText(details.hostname);
port->setValue(details.port);
password->setText(details.password);
- dir->setText(Utils::convertDirForDisplay(details.dir));
+ dir->setText(Utils::convertPathForDisplay(details.dir));
coverName->setText(details.coverName);
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
streamUrl->setText(details.streamUrl);
@@ -354,14 +359,14 @@ MPDConnectionDetails ServerSettings::getDetails() const
details.hostname=host->text().trimmed();
details.port=port->value();
details.password=password->text();
- details.dir=Utils::convertDirFromDisplay(dir->text());
+ details.dir=Utils::convertPathFromDisplay(dir->text());
details.coverName=coverName->text().trimmed();
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
details.streamUrl=streamUrl->text().trimmed();
#endif
} else {
details=MPDUser::self()->details(true);
- details.dir=Utils::convertDirFromDisplay(basicDir->text());
+ details.dir=Utils::convertPathFromDisplay(basicDir->text());
details.coverName=basicCoverName->text().trimmed();
MPDUser::self()->setMusicFolder(details.dir);
}
diff --git a/gui/serversettings.ui b/gui/serversettings.ui
index 712277d..8cadc4d 100644
--- a/gui/serversettings.ui
+++ b/gui/serversettings.ui
@@ -40,10 +40,10 @@
<widget class="QComboBox" name="combo"/>
</item>
<item row="0" column="2">
- <widget class="QToolButton" name="addButton"/>
+ <widget class="FlatToolButton" name="addButton"/>
</item>
<item row="0" column="3">
- <widget class="QToolButton" name="removeButton"/>
+ <widget class="FlatToolButton" name="removeButton"/>
</item>
<item row="1" column="0" colspan="4">
<widget class="QStackedWidget" name="stackedWidget">
@@ -168,110 +168,28 @@
</item>
</layout>
</item>
- <item row="1" column="0">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QLabel" name="musicFolderNoteLabel">
+ <item row="1" column="0" colspan="2">
+ <widget class="NoteLabel" name="musicFolderNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art (either the value specified above, or <code>cover.jpg / cover.png</code> if not set). If you also have write permissions to this folder (and it's sub-folders), then Cantata will save any downloaded covers into the respective album folder.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>The 'Music folder' setting is used to lookup cover-art (either the value specified above, or <code>cover.jpg / cover.png</code> if not set). If you also have write permissions to this folder (and it's sub-folders), then Cantata will save any downloaded covers into the respective album folder.</string>
</property>
</widget>
</item>
- <item row="3" column="0">
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="4" column="0" colspan="2">
- <widget class="QLabel" name="socketNoteLabel">
+ <item row="2" column="0" colspan="2">
+ <widget class="NoteLabel" name="socketNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> When using a local socket the full absolute path to the socket needs to be set. (Port number is not required.)</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>When using a local socket the full absolute path to the socket needs to be set. (Port number is not required.)</string>
</property>
</widget>
</item>
- <item row="5" column="0">
- <spacer name="verticalSpacer_4">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="6" column="0">
- <spacer name="verticalSpacer_streamUrlNote">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="7" column="0" colspan="2">
- <widget class="QLabel" name="streamUrlNoteLabel">
+ <item row="3" column="0" colspan="2">
+ <widget class="NoteLabel" name="streamUrlNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured to output to a HTTP stream, and you wish Cantata to be able to play that stream.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>'HTTP Stream URL' is only of use if you have MPD configured to output to a HTTP stream, and you wish Cantata to be able to play that stream.</string>
</property>
</widget>
</item>
- <item row="8" column="0">
+ <item row="4" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -338,59 +256,28 @@
</layout>
</item>
<item row="2" column="0" colspan="4">
- <widget class="StateLabel" name="basicMusicFolderNoteLabel">
+ <widget class="NoteLabel" name="basicMusicFolderNoteLabel">
<property name="text">
- <string><i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need to manually update the music database. This can be performed by pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you change the 'Music folder' setting, then you will need to manually update the music database. This can be performed by pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views.</string>
</property>
</widget>
</item>
- <item row="3" column="1">
- <spacer name="verticalSpacer_8">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>13</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="4" column="0" colspan="4">
- <widget class="QLabel" name="musicFolderNoteLabel_2">
+ <item row="3" column="0" colspan="4">
+ <widget class="NoteLabel" name="musicFolderNoteLabel_2">
<property name="text">
- <string><i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata will use a default of <code>cover</code> </i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If no setting is specified for 'Cover filename, then Cantata will use a default of <code>cover</code></string>
</property>
</widget>
</item>
- <item row="5" column="2">
- <spacer name="verticalSpacer_6">
+ <item row="4" column="2">
+ <spacer name="expandingSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>363</height>
+ <height>0</height>
</size>
</property>
</spacer>
@@ -408,9 +295,9 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
- <class>StateLabel</class>
+ <class>NoteLabel</class>
<extends>QLabel</extends>
- <header>widgets/statelabel.h</header>
+ <header>widgets/notelabel.h</header>
</customwidget>
<customwidget>
<class>LineEdit</class>
@@ -423,6 +310,11 @@
<header>support/pathrequester.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>FlatToolButton</class>
+ <extends>QToolButton</extends>
+ <header>support/flattoolbutton.h</header>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>combo</tabstop>
diff --git a/gui/settings.cpp b/gui/settings.cpp
index bf3d81b..f08beb3 100644
--- a/gui/settings.cpp
+++ b/gui/settings.cpp
@@ -32,9 +32,6 @@
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
#include <kwallet.h>
#endif
-#ifndef ENABLE_KDE_SUPPORT
-#include "mediakeys.h"
-#endif
#include <QFile>
#include <QDir>
#include <qglobal.h>
@@ -137,22 +134,22 @@ static Settings::StartupState getStartupState(const QString &str)
Settings::Settings()
: state(AP_Configured)
- , timer(0)
, ver(-1)
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
, wallet(0)
#endif
{
+ // Call 'version' so that it initialises 'ver' and 'state'
+ version();
// Only need to read system defaults if we have not previously been configured...
- if (version()<CANTATA_MAKE_VERSION(0, 8, 0)
- ? cfg.get("connectionHost", QString()).isEmpty()
- : !cfg.hasGroup(MPDConnectionDetails::configGroupName())) {
+ if (!cfg.hasGroup(MPDConnectionDetails::configGroupName())) {
mpdDefaults.read();
}
}
Settings::~Settings()
{
+ save();
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
delete wallet;
#endif
@@ -166,68 +163,42 @@ QString Settings::currentConnection()
MPDConnectionDetails Settings::connectionDetails(const QString &name)
{
MPDConnectionDetails details;
- if (version()<CANTATA_MAKE_VERSION(0, 8, 0) || (name.isEmpty() && !cfg.hasGroup(MPDConnectionDetails::configGroupName(name)))) {
- details.hostname=cfg.get("connectionHost", name.isEmpty() ? mpdDefaults.host : QString());
+ QString n=MPDConnectionDetails::configGroupName(name);
+ details.name=name;
+ if (!cfg.hasGroup(n)) {
+ details.name=QString();
+ n=MPDConnectionDetails::configGroupName(details.name);
+ }
+ if (cfg.hasGroup(n)) {
+ Configuration grp(n);
+ details.hostname=grp.get("host", name.isEmpty() ? mpdDefaults.host : QString());
+ details.port=grp.get("port", name.isEmpty() ? mpdDefaults.port : 6600);
+ details.dir=grp.getDirPath("dir", name.isEmpty() ? mpdDefaults.dir : "/var/lib/mpd/music");
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
- if (cfg.get("connectionPasswd", false)) {
- if (openWallet()) {
- wallet->readPassword("mpd", details.password);
+ if (KWallet::Wallet::isEnabled()) {
+ if (grp.get("passwd", false)) {
+ if (openWallet()) {
+ wallet->readPassword(name.isEmpty() ? "mpd" : name, details.password);
+ }
+ } else if (name.isEmpty()) {
+ details.password=mpdDefaults.passwd;
}
- } else if (name.isEmpty()) {
- details.password=mpdDefaults.passwd;
- }
- #else
- details.password=cfg.get("connectionPasswd", name.isEmpty() ? mpdDefaults.passwd : QString());
- #endif
- details.port=cfg.get("connectionPort", name.isEmpty() ? mpdDefaults.port : 6600);
- #ifdef Q_OS_WIN
- details.dir=Utils::fixPath(QDir::fromNativeSeparators(cfg.get("mpdDir", mpdDefaults.dir)));
- #else
- details.dir=Utils::fixPath(cfg.get("mpdDir", mpdDefaults.dir));
+ } else
+ #endif // ENABLE_KWALLET
+ details.password=grp.get("passwd", name.isEmpty() ? mpdDefaults.passwd : QString());
+ details.coverName=grp.get("coverName", QString());
+ #ifdef ENABLE_HTTP_STREAM_PLAYBACK
+ details.streamUrl=grp.get("streamUrl", QString());
#endif
} else {
- QString n=MPDConnectionDetails::configGroupName(name);
- details.name=name;
- if (!cfg.hasGroup(n)) {
- details.name=QString();
- n=MPDConnectionDetails::configGroupName(details.name);
- }
- if (cfg.hasGroup(n)) {
- cfg.beginGroup(n);
- details.hostname=cfg.get("host", name.isEmpty() ? mpdDefaults.host : QString());
- details.port=cfg.get("port", name.isEmpty() ? mpdDefaults.port : 6600);
- #ifdef Q_OS_WIN
- details.dir=Utils::fixPath(QDir::fromNativeSeparators(cfg.get("dir", name.isEmpty() ? mpdDefaults.dir : "/var/lib/mpd/music")));
- #else
- details.dir=Utils::fixPath(cfg.get("dir", name.isEmpty() ? mpdDefaults.dir : "/var/lib/mpd/music"));
- #endif
- #if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
- if (KWallet::Wallet::isEnabled()) {
- if (cfg.get("passwd", false)) {
- if (openWallet()) {
- wallet->readPassword(name.isEmpty() ? "mpd" : name, details.password);
- }
- } else if (name.isEmpty()) {
- details.password=mpdDefaults.passwd;
- }
- } else
- #endif // ENABLE_KWALLET
- details.password=cfg.get("passwd", name.isEmpty() ? mpdDefaults.passwd : QString());
- details.coverName=cfg.get("coverName", QString());
- #ifdef ENABLE_HTTP_STREAM_PLAYBACK
- details.streamUrl=cfg.get("streamUrl", QString());
- #endif
- cfg.endGroup();
- } else {
- details.hostname=mpdDefaults.host;
- details.port=mpdDefaults.port;
- details.dir=mpdDefaults.dir;
- details.password=mpdDefaults.passwd;
- details.coverName=QString();
- #ifdef ENABLE_HTTP_STREAM_PLAYBACK
- details.streamUrl=QString();
- #endif
- }
+ details.hostname=mpdDefaults.host;
+ details.port=mpdDefaults.port;
+ details.dir=mpdDefaults.dir;
+ details.password=mpdDefaults.passwd;
+ details.coverName=QString();
+ #ifdef ENABLE_HTTP_STREAM_PLAYBACK
+ details.streamUrl=QString();
+ #endif
}
details.setDirReadable();
return details;
@@ -367,9 +338,7 @@ bool Settings::storeBackdropsInMpdDir()
#ifndef ENABLE_UBUNTU
int Settings::libraryView()
{
- int v=version();
- QString def=ItemView::modeStr(v<CANTATA_MAKE_VERSION(0, 9, 50) ? ItemView::Mode_SimpleTree : ItemView::Mode_DetailedTree);
- return ItemView::toMode(cfg.get("libraryView", def));
+ return ItemView::toMode(cfg.get("libraryView", ItemView::modeStr(ItemView::Mode_DetailedTree)));
}
int Settings::albumsView()
@@ -379,27 +348,17 @@ int Settings::albumsView()
int Settings::folderView()
{
- int v=version();
- QString def=ItemView::modeStr(v<CANTATA_MAKE_VERSION(1, 0, 51) ? ItemView::Mode_SimpleTree : ItemView::Mode_DetailedTree);
- return ItemView::toMode(cfg.get("folderView", def));
+ return ItemView::toMode(cfg.get("folderView", ItemView::modeStr(ItemView::Mode_DetailedTree)));
}
int Settings::playlistsView()
{
- int v=version();
- QString def=ItemView::modeStr(v<CANTATA_MAKE_VERSION(0, 9, 50)
- ? ItemView::Mode_SimpleTree
- : v<CANTATA_MAKE_VERSION(1, 0, 51)
- ? ItemView::Mode_GroupedTree
- : ItemView::Mode_DetailedTree);
- return ItemView::toMode(cfg.get("playlistsView", def));
+ return ItemView::toMode(cfg.get("playlistsView", ItemView::modeStr(ItemView::Mode_DetailedTree)));
}
int Settings::streamsView()
{
- int v=version();
- QString def=ItemView::modeStr(v<CANTATA_MAKE_VERSION(0, 9, 50) ? ItemView::Mode_SimpleTree : ItemView::Mode_DetailedTree);
- return ItemView::toMode(cfg.get("streamsView", def));
+ return ItemView::toMode(cfg.get("streamsView", ItemView::modeStr(ItemView::Mode_DetailedTree)));
}
int Settings::onlineView()
@@ -410,25 +369,7 @@ int Settings::onlineView()
bool Settings::libraryArtistImage()
{
- #ifndef ENABLE_UBUNTU
- if (cfg.get("libraryArtistImage", false)) {
- int view=libraryView();
- return ItemView::Mode_SimpleTree!=view && ItemView::Mode_BasicTree!=view;
- }
- #endif
- return false;
-}
-
-int Settings::libraryCoverSize()
-{
- int size=cfg.get("libraryCoverSize", (int)(MusicLibraryItemAlbum::CoverMedium));
- return size>MusicLibraryItemAlbum::CoverExtraLarge || size<0 ? MusicLibraryItemAlbum::CoverMedium : size;
-}
-
-int Settings::albumsCoverSize()
-{
- int size=cfg.get("albumsCoverSize", (int)(MusicLibraryItemAlbum::CoverMedium));
- return size>MusicLibraryItemAlbum::CoverExtraLarge || size<0 ? MusicLibraryItemAlbum::CoverMedium : size;
+ return cfg.get("libraryArtistImage", false);
}
int Settings::albumSort()
@@ -446,27 +387,7 @@ int Settings::albumSort()
int Settings::sidebar()
{
if (version()<CANTATA_MAKE_VERSION(1, 2, 52)) {
- switch (cfg.get("sidebar", 1)) {
- default:
- case 1: return FancyTabWidget::Side|FancyTabWidget::Large;
- case 2: return FancyTabWidget::Side|FancyTabWidget::Small;
- case 3: return FancyTabWidget::Side|FancyTabWidget::Tab;
- case 4: return FancyTabWidget::Top|FancyTabWidget::Tab;
- case 5: return FancyTabWidget::Top|FancyTabWidget::Tab|FancyTabWidget::IconOnly;
- case 6: return FancyTabWidget::Bot|FancyTabWidget::Tab;
- case 7: return FancyTabWidget::Bot|FancyTabWidget::Tab|FancyTabWidget::IconOnly;
- case 8: return FancyTabWidget::Side|FancyTabWidget::Large|FancyTabWidget::IconOnly;
- case 9: return FancyTabWidget::Side|FancyTabWidget::Small|FancyTabWidget::IconOnly;
- case 10: return FancyTabWidget::Side|FancyTabWidget::Tab|FancyTabWidget::IconOnly;
- case 11: return FancyTabWidget::Bot|FancyTabWidget::Large;
- case 12: return FancyTabWidget::Bot|FancyTabWidget::Large|FancyTabWidget::IconOnly;
- case 13: return FancyTabWidget::Top|FancyTabWidget::Large;
- case 14: return FancyTabWidget::Top|FancyTabWidget::Large|FancyTabWidget::IconOnly;
- case 15: return FancyTabWidget::Bot|FancyTabWidget::Small;
- case 16: return FancyTabWidget::Bot|FancyTabWidget::Small|FancyTabWidget::IconOnly;
- case 17: return FancyTabWidget::Top|FancyTabWidget::Small;
- case 18: return FancyTabWidget::Top|FancyTabWidget::Small|FancyTabWidget::IconOnly;
- }
+ return (int)(FancyTabWidget::Side|FancyTabWidget::Large);
} else {
return cfg.get("sidebar", (int)(FancyTabWidget::Side|FancyTabWidget::Large))&FancyTabWidget::All_Mask;
}
@@ -489,31 +410,17 @@ bool Settings::useComposer()
QStringList Settings::lyricProviders()
{
- QStringList def;
- def << "lyrics.wikia.com"
- << "lyricstime.com"
- << "lyricsreg.com"
- << "lyricsmania.com"
- << "metrolyrics.com"
- << "azlyrics.com"
- << "songlyrics.com"
- << "elyrics.net"
- << "lyricsdownload.com"
- << "lyrics.com"
- << "lyricsbay.com"
- << "directlyrics.com"
- << "loudson.gs"
- << "teksty.org"
- << "tekstowo.pl (POLISH)"
- << "vagalume.uol.com.br"
- << "vagalume.uol.com.br (PORTUGUESE)";
- return cfg.get("lyricProviders", def);
+ return cfg.get("lyricProviders", QStringList() << "lyrics.wikia.com" << "lyricstime.com" << "lyricsreg.com"
+ << "lyricsmania.com" << "metrolyrics.com" << "azlyrics.com"
+ << "songlyrics.com" << "elyrics.net" << "lyricsdownload.com"
+ << "lyrics.com" << "lyricsbay.com" << "directlyrics.com"
+ << "loudson.gs" << "teksty.org" << "tekstowo.pl (POLISH)"
+ << "vagalume.uol.com.br" << "vagalume.uol.com.br (PORTUGUESE)");
}
QStringList Settings::wikipediaLangs()
{
- QStringList def=QStringList() << "en:en";
- return cfg.get("wikipediaLangs", def);
+ return cfg.get("wikipediaLangs", QStringList() << "en:en");
}
bool Settings::wikipediaIntroOnly()
@@ -538,12 +445,12 @@ int Settings::contextBackdropBlur()
QString Settings::contextBackdropFile()
{
- return cfg.get("contextBackdropFile", QString());
+ return cfg.getFilePath("contextBackdropFile", QString());
}
bool Settings::contextDarkBackground()
{
- return cfg.get("contextDarkBackground", false);
+ return cfg.get("contextDarkBackground", true);
}
int Settings::contextZoom()
@@ -588,11 +495,7 @@ QString Settings::page()
QStringList Settings::hiddenPages()
{
- QStringList def=QStringList() << "PlayQueuePage" << "FolderPage" << "SearchPage" << "ContextPage";
- QStringList config=cfg.get("hiddenPages", def);
- if (version()<CANTATA_MAKE_VERSION(1, 2, 51) && !config.contains("SearchPage")) {
- config.append("SearchPage");
- }
+ QStringList config=cfg.get("hiddenPages", QStringList() << "PlayQueuePage" << "FolderPage" << "SearchPage" << "ContextPage");
// If splitter auto-hide is enabled, then playqueue cannot be in sidebar!
if (splitterAutoHide() && !config.contains("PlayQueuePage")) {
config << "PlayQueuePage";
@@ -600,17 +503,6 @@ QStringList Settings::hiddenPages()
return config;
}
-#if !defined ENABLE_KDE_SUPPORT && !defined ENABLE_UBUNTU
-QString Settings::mediaKeysIface()
-{
- #if defined Q_OS_WIN
- return cfg.get("mediaKeysIface", MediaKeys::toString(MediaKeys::QxtInterface));
- #else
- return cfg.get("mediaKeysIface", MediaKeys::toString(MediaKeys::GnomeInteface));
- #endif
-}
-#endif
-
#ifdef ENABLE_DEVICES_SUPPORT
bool Settings::overwriteSongs()
{
@@ -624,13 +516,7 @@ bool Settings::showDeleteAction()
int Settings::devicesView()
{
- if (version()<CANTATA_MAKE_VERSION(1, 0, 51)) {
- int v=cfg.get("devicesView", (int)ItemView::Mode_DetailedTree);
- cfg.set("devicesView", ItemView::modeStr((ItemView::Mode)v));
- return v;
- } else {
- return ItemView::toMode(cfg.get("devicesView", ItemView::modeStr(ItemView::Mode_DetailedTree)));
- }
+ return ItemView::toMode(cfg.get("devicesView", ItemView::modeStr(ItemView::Mode_DetailedTree)));
}
#endif
@@ -720,7 +606,7 @@ int Settings::playQueueBackgroundBlur()
QString Settings::playQueueBackgroundFile()
{
- return cfg.get("playQueueBackgroundFile", QString());
+ return cfg.getFilePath("playQueueBackgroundFile", QString());
}
bool Settings::playQueueConfirmClear()
@@ -728,6 +614,11 @@ bool Settings::playQueueConfirmClear()
return cfg.get("playQueueConfirmClear", true);
}
+bool Settings::playQueueSearch()
+{
+ return cfg.get("playQueueSearch", true);
+}
+
bool Settings::playListsStartClosed()
{
return cfg.get("playListsStartClosed", true);
@@ -810,7 +701,7 @@ QStringList Settings::hiddenOnlineProviders()
return cfg.get("hiddenOnlineProviders", QStringList());
}
-#if !defined Q_OS_WIN && !defined Q_OS_MAC
+#if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
bool Settings::inhibitSuspend()
{
return cfg.get("inhibitSuspend", false);
@@ -832,9 +723,12 @@ QString Settings::podcastDownloadPath()
return Utils::fixPath(cfg.get("podcastDownloadPath", Utils::fixPath(QDir::homePath())+QLatin1String("Podcasts/")));
}
-bool Settings::podcastAutoDownload()
+int Settings::podcastAutoDownloadLimit()
{
- return cfg.get("podcastAutoDownload", false);
+ if (cfg.hasEntry("podcastAutoDownload")) {
+ return cfg.get("podcastAutoDownload", false) ? 1000 : 0;
+ }
+ return cfg.get("podcastAutoDownloadLimit", 0, 0, 1000);
}
int Settings::maxCoverUpdatePerIteration()
@@ -947,6 +841,26 @@ bool Settings::showStopButton()
return cfg.get("showStopButton", false);
}
+bool Settings::showRatingWidget()
+{
+ return cfg.get("showRatingWidget", false);
+}
+
+bool Settings::infoTooltips()
+{
+ return cfg.get("infoTooltips", true);
+}
+
+bool Settings::retinaSupport()
+{
+ return cfg.get("retinaSupport", false);
+}
+
+int Settings::seekStep()
+{
+ return cfg.get("seekStep", 5, 2, 60);
+}
+
void Settings::removeConnectionDetails(const QString &v)
{
if (v==currentConnection()) {
@@ -966,13 +880,13 @@ void Settings::saveConnectionDetails(const MPDConnectionDetails &v)
QString n=MPDConnectionDetails::configGroupName(v.name);
- cfg.beginGroup(n);
- cfg.set("host", v.hostname);
- cfg.set("port", (int)v.port);
- cfg.set("dir", v.dir);
+ Configuration grp(n);
+ grp.set("host", v.hostname);
+ grp.set("port", (int)v.port);
+ grp.setDirPath("dir", v.dir);
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
if (KWallet::Wallet::isEnabled()) {
- cfg.set("passwd", !v.password.isEmpty());
+ grp.set("passwd", !v.password.isEmpty());
QString walletEntry=v.name.isEmpty() ? "mpd" : v.name;
if (v.password.isEmpty()) {
if (wallet) {
@@ -984,12 +898,11 @@ void Settings::saveConnectionDetails(const MPDConnectionDetails &v)
}
} else
#endif // ENABLE_KWALLET
- cfg.set("passwd", v.password);
- cfg.set("coverName", v.coverName);
+ grp.set("passwd", v.password);
+ grp.set("coverName", v.coverName);
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
- cfg.set("streamUrl", v.streamUrl);
+ grp.set("streamUrl", v.streamUrl);
#endif
- cfg.endGroup();
}
void Settings::saveCurrentConnection(const QString &v)
@@ -1108,16 +1021,6 @@ void Settings::saveLibraryArtistImage(bool v)
cfg.set("libraryArtistImage", v);
}
-void Settings::saveLibraryCoverSize(int v)
-{
- cfg.set("libraryCoverSize", v);
-}
-
-void Settings::saveAlbumsCoverSize(int v)
-{
- cfg.set("albumsCoverSize", v);
-}
-
void Settings::saveAlbumSort(int v)
{
cfg.set("albumSort", AlbumsModel::sortStr((AlbumsModel::Sort)v));
@@ -1180,7 +1083,7 @@ void Settings::saveContextBackdropBlur(int v)
void Settings::saveContextBackdropFile(const QString &v)
{
- cfg.set("contextBackdropFile", v);
+ cfg.setFilePath("contextBackdropFile", v);
}
void Settings::saveContextDarkBackground(bool v)
@@ -1233,13 +1136,6 @@ void Settings::saveHiddenPages(const QStringList &v)
cfg.set("hiddenPages", v);
}
-#if !defined ENABLE_KDE_SUPPORT && !defined ENABLE_UBUNTU
-void Settings::saveMediaKeysIface(const QString &v)
-{
- cfg.set("mediaKeysIface", v);
-}
-#endif
-
#ifdef ENABLE_DEVICES_SUPPORT
void Settings::saveOverwriteSongs(bool v)
{
@@ -1321,7 +1217,7 @@ void Settings::savePlayQueueBackgroundBlur(int v)
void Settings::savePlayQueueBackgroundFile(const QString &v)
{
- cfg.set("playQueueBackgroundFile", v);
+ cfg.setFilePath("playQueueBackgroundFile", v);
}
void Settings::savePlayQueueConfirmClear(bool v)
@@ -1329,6 +1225,11 @@ void Settings::savePlayQueueConfirmClear(bool v)
cfg.set("playQueueConfirmClear", v);
}
+void Settings::savePlayQueueSearch(bool v)
+{
+ cfg.set("playQueueSearch", v);
+}
+
void Settings::savePlayListsStartClosed(bool v)
{
cfg.set("playListsStartClosed", v);
@@ -1412,7 +1313,7 @@ void Settings::saveHiddenOnlineProviders(const QStringList &v)
cfg.set("hiddenOnlineProviders", v);
}
-#if !defined Q_OS_WIN && !defined Q_OS_MAC
+#if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
void Settings::saveInhibitSuspend(bool v)
{
cfg.set("inhibitSuspend", v);
@@ -1434,9 +1335,12 @@ void Settings::savePodcastDownloadPath(const QString &v)
cfg.set("podcastDownloadPath", v);
}
-void Settings::savePodcastAutoDownload(bool v)
+void Settings::savePodcastAutoDownloadLimit(int v)
{
- cfg.set("podcastAutoDownload", v);
+ if (cfg.hasEntry("podcastAutoDownload")) {
+ cfg.removeEntry("podcastAutoDownload");
+ }
+ cfg.set("podcastAutoDownloadLimit", v);
}
void Settings::saveStartupState(int v)
@@ -1449,11 +1353,6 @@ void Settings::saveSearchCategory(const QString &v)
cfg.set("searchCategory", v);
}
-void Settings::saveCacheScaledCovers(bool v)
-{
- cfg.set("cacheScaledCovers", v);
-}
-
void Settings::saveFetchCovers(bool v)
{
cfg.set("fetchCovers", v);
@@ -1483,34 +1382,38 @@ void Settings::saveFilteredOnly(bool v)
void Settings::saveShowCoverWidget(bool v)
{
- return cfg.set("showCoverWidget", v);
+ cfg.set("showCoverWidget", v);
}
void Settings::saveShowStopButton(bool v)
{
- return cfg.set("showStopButton", v);
+ cfg.set("showStopButton", v);
}
-void Settings::save(bool force)
+void Settings::saveShowRatingWidget(bool v)
{
- if (force) {
- if (AP_NotConfigured!=state) {
- if (version()!=PACKAGE_VERSION || AP_FirstRun==state) {
- cfg.set("version", PACKAGE_VERSION_STRING);
- ver=PACKAGE_VERSION;
- }
- }
- cfg.sync();
- if (timer) {
- timer->stop();
- }
- } else {
- if (!timer) {
- timer=new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(actualSave()));
+ cfg.set("showRatingWidget", v);
+}
+
+void Settings::saveInfoTooltips(bool v)
+{
+ cfg.set("infoTooltips", v);
+}
+
+void Settings::saveRetinaSupport(bool v)
+{
+ cfg.set("retinaSupport", v);
+}
+
+void Settings::save()
+{
+ if (AP_NotConfigured!=state) {
+ if (version()!=PACKAGE_VERSION || AP_FirstRun==state) {
+ cfg.set("version", PACKAGE_VERSION_STRING);
+ ver=PACKAGE_VERSION;
}
- timer->start(30*1000);
}
+ cfg.sync();
}
void Settings::clearVersion()
@@ -1519,11 +1422,6 @@ void Settings::clearVersion()
state=AP_NotConfigured;
}
-void Settings::actualSave()
-{
- save(true);
-}
-
int Settings::getBoolAsInt(const QString &key, int def)
{
// Old config, sometimes bool was used - which has now been converted
@@ -1537,4 +1435,3 @@ int Settings::getBoolAsInt(const QString &key, int def)
}
return v.toInt();
}
-
diff --git a/gui/settings.h b/gui/settings.h
index 9e554a6..0ee1ac2 100644
--- a/gui/settings.h
+++ b/gui/settings.h
@@ -33,12 +33,8 @@ class Wallet;
}
#endif
-class QTimer;
-
-class Settings : public QObject
+class Settings
{
- Q_OBJECT
-
public:
enum StartupState
{
@@ -85,8 +81,6 @@ public:
int onlineView();
#endif
bool libraryArtistImage();
- int libraryCoverSize();
- int albumsCoverSize();
int albumSort();
int sidebar();
bool libraryYear();
@@ -109,9 +103,6 @@ public:
int contextTrackView();
QString page();
QStringList hiddenPages();
- #if !defined ENABLE_KDE_SUPPORT && !defined ENABLE_UBUNTU
- QString mediaKeysIface();
- #endif
#ifdef ENABLE_DEVICES_SUPPORT
bool overwriteSongs();
bool showDeleteAction();
@@ -134,6 +125,7 @@ public:
int playQueueBackgroundBlur();
QString playQueueBackgroundFile();
bool playQueueConfirmClear();
+ bool playQueueSearch();
bool playListsStartClosed();
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
bool playStream();
@@ -157,13 +149,13 @@ public:
bool showTimeRemaining();
QStringList hiddenStreamCategories();
QStringList hiddenOnlineProviders();
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
+ #if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
bool inhibitSuspend();
#endif
int rssUpdate();
QDateTime lastRssUpdate();
QString podcastDownloadPath();
- bool podcastAutoDownload();
+ int podcastAutoDownloadLimit();
int maxCoverUpdatePerIteration();
int coverCacheSize();
QStringList cueFileCodecs();
@@ -186,6 +178,10 @@ public:
bool filteredOnly();
bool showCoverWidget();
bool showStopButton();
+ bool showRatingWidget();
+ bool infoTooltips();
+ bool retinaSupport();
+ int seekStep();
void removeConnectionDetails(const QString &v);
void saveConnectionDetails(const MPDConnectionDetails &v);
@@ -213,8 +209,6 @@ public:
void saveOnlineView(int v);
#endif
void saveLibraryArtistImage(bool v);
- void saveLibraryCoverSize(int v);
- void saveAlbumsCoverSize(int v);
void saveAlbumSort(int v);
void saveSidebar(int v);
void saveLibraryYear(bool v);
@@ -237,9 +231,6 @@ public:
void saveContextTrackView(int v);
void savePage(const QString &v);
void saveHiddenPages(const QStringList &v);
- #if !defined ENABLE_KDE_SUPPORT && !defined ENABLE_UBUNTU
- void saveMediaKeysIface(const QString &v);
- #endif
#ifdef ENABLE_DEVICES_SUPPORT
void saveOverwriteSongs(bool v);
void saveShowDeleteAction(bool v);
@@ -260,6 +251,7 @@ public:
void savePlayQueueBackgroundBlur(int v);
void savePlayQueueBackgroundFile(const QString &v);
void savePlayQueueConfirmClear(bool v);
+ void savePlayQueueSearch(bool v);
void savePlayListsStartClosed(bool v);
#ifdef ENABLE_HTTP_STREAM_PLAYBACK
void savePlayStream(bool v);
@@ -282,16 +274,15 @@ public:
void saveShowTimeRemaining(bool v);
void saveHiddenStreamCategories(const QStringList &v);
void saveHiddenOnlineProviders(const QStringList &v);
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
+ #if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
void saveInhibitSuspend(bool v);
#endif
void saveRssUpdate(int v);
void saveLastRssUpdate(const QDateTime &v);
void savePodcastDownloadPath(const QString &v);
- void savePodcastAutoDownload(bool v);
+ void savePodcastAutoDownloadLimit(int v);
void saveStartupState(int v);
void saveSearchCategory(const QString &v);
- void saveCacheScaledCovers(bool v);
void saveFetchCovers(bool v);
#ifndef ENABLE_KDE_SUPPORT
void saveLang(const QString &v);
@@ -301,7 +292,10 @@ public:
void saveFilteredOnly(bool v);
void saveShowCoverWidget(bool v);
void saveShowStopButton(bool v);
- void save(bool force=false);
+ void saveShowRatingWidget(bool v);
+ void saveInfoTooltips(bool v);
+ void saveRetinaSupport(bool v);
+ void save();
void clearVersion();
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
bool openWallet();
@@ -311,9 +305,6 @@ public:
bool firstRun() const { return AP_Configured!=state; }
-private Q_SLOTS:
- void actualSave();
-
private:
int getBoolAsInt(const QString &key, int def);
@@ -325,7 +316,6 @@ private:
};
AppState state;
- QTimer *timer;
int ver;
#if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET
KWallet::Wallet *wallet;
diff --git a/gui/shortcutssettingspage.cpp b/gui/shortcutssettingspage.cpp
index 6e62314..17fc0e1 100644
--- a/gui/shortcutssettingspage.cpp
+++ b/gui/shortcutssettingspage.cpp
@@ -39,13 +39,8 @@
#include <QCheckBox>
#include <QProcess>
-static const char * constMkEnabledVal="mk-enabled-val";
-
ShortcutsSettingsPage::ShortcutsSettingsPage(QWidget *p)
: QWidget(p)
- , mediaKeysIfaceCombo(0)
- , settingsButton(0)
- , mediaKeysEnabled(0)
{
QBoxLayout *lay=new QBoxLayout(QBoxLayout::TopToBottom, this);
lay->setMargin(0);
@@ -56,121 +51,13 @@ ShortcutsSettingsPage::ShortcutsSettingsPage(QWidget *p)
shortcuts->view()->setAlternatingRowColors(false);
shortcuts->view()->setItemDelegate(new BasicItemDelegate(shortcuts->view()));
lay->addWidget(shortcuts);
-
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
- Utils::Desktop de=Utils::currentDe();
- bool useDesktop=true;
- bool isGnome=Utils::Unity==de || Utils::Gnome==de;
- #else
- bool useDesktop=false;
- bool isGnome=false;
- #endif
-
- #ifdef CANTATA_USE_QXT_MEDIAKEYS
- bool useQxt=true;
- #else
- bool useQxt=false;
- #endif
-
- if (useDesktop || useQxt) {
- QGroupBox *box=new QGroupBox(i18n("Multi-Media Keys"));
-
- if (useDesktop && useQxt) {
- QBoxLayout *boxLay=new QBoxLayout(QBoxLayout::LeftToRight, box);
- mediaKeysIfaceCombo=new QComboBox(box);
- boxLay->addWidget(mediaKeysIfaceCombo);
- mediaKeysIfaceCombo->addItem(i18n("Do not use media keys to control Cantata"), (unsigned int)MediaKeys::NoInterface);
- mediaKeysIfaceCombo->addItem(i18n("Use media keys to control Cantata"), (unsigned int)MediaKeys::QxtInterface);
-
- mediaKeysIfaceCombo->addItem(isGnome
- ? i18n("Use media keys, as configured in desktop settings, to control Cantata")
- : i18n("Use media keys, as configured in GNOME/Unity settings, to control Cantata"), (unsigned int)MediaKeys::GnomeInteface);
-
- settingsButton=new ToolButton(box);
- settingsButton->setToolTip(i18n("Configure..."));
- settingsButton->setIcon(Icons::self()->configureIcon);
- boxLay->addWidget(settingsButton);
- boxLay->addItem(new QSpacerItem(0, 1, QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
- connect(settingsButton, SIGNAL(clicked(bool)), SLOT(showGnomeSettings()));
- connect(mediaKeysIfaceCombo, SIGNAL(currentIndexChanged(int)), SLOT(mediaKeysIfaceChanged()));
- } else if (useQxt) {
- QBoxLayout *boxLay=new QBoxLayout(QBoxLayout::LeftToRight, box);
- mediaKeysEnabled = new QCheckBox(i18n("Use media keys to control Cantata"), box);
- boxLay->addWidget(mediaKeysEnabled);
- boxLay->addItem(new QSpacerItem(0, 1, QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
- mediaKeysEnabled->setProperty(constMkEnabledVal, (unsigned int)MediaKeys::QxtInterface);
- } else if (useDesktop) {
- QBoxLayout *boxLay=new QBoxLayout(QBoxLayout::LeftToRight, box);
- QWidget *controlWidget = new QWidget(box);
- mediaKeysEnabled = new QCheckBox(isGnome
- ? i18n("Use media keys, as configured in desktop settings, to control Cantata")
- : i18n("Use media keys, as configured in GNOME/Unity settings, to control Cantata"), controlWidget);
- settingsButton=new ToolButton(controlWidget);
- settingsButton->setToolTip(i18n("Configure..."));
- settingsButton->setIcon(Icons::self()->configureIcon);
- boxLay->addWidget(mediaKeysEnabled);
- boxLay->addWidget(settingsButton);
- boxLay->addItem(new QSpacerItem(0, 1, QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
- mediaKeysEnabled->setProperty(constMkEnabledVal, (unsigned int)MediaKeys::GnomeInteface);
- connect(mediaKeysEnabled, SIGNAL(toggled(bool)), settingsButton, SLOT(setEnabled(bool)));
- connect(settingsButton, SIGNAL(clicked(bool)), SLOT(showGnomeSettings()));
- }
- lay->addWidget(box);
- }
}
void ShortcutsSettingsPage::load()
{
- if (settingsButton) {
- settingsButton->setEnabled(false);
- }
- if (mediaKeysIfaceCombo) {
- unsigned int iface=(unsigned int)MediaKeys::toIface(Settings::self()->mediaKeysIface());
- for (int i=0; i<mediaKeysIfaceCombo->count(); ++i) {
- if (mediaKeysIfaceCombo->itemData(i).toUInt()==iface) {
- mediaKeysIfaceCombo->setCurrentIndex(i);
- if (settingsButton) {
- settingsButton->setEnabled(iface==MediaKeys::GnomeInteface);
- }
- break;
- }
- }
- } else if (mediaKeysEnabled) {
- mediaKeysEnabled->setChecked(MediaKeys::NoInterface!=MediaKeys::toIface(Settings::self()->mediaKeysIface()));
- if (settingsButton) {
- settingsButton->setEnabled(mediaKeysEnabled->isChecked());
- }
- }
}
void ShortcutsSettingsPage::save()
{
shortcuts->save();
- if (mediaKeysIfaceCombo) {
- Settings::self()->saveMediaKeysIface(MediaKeys::toString((MediaKeys::InterfaceType)mediaKeysIfaceCombo->itemData(mediaKeysIfaceCombo->currentIndex()).toUInt()));
- } else if (mediaKeysEnabled) {
- Settings::self()->saveMediaKeysIface(MediaKeys::toString(
- mediaKeysEnabled->isChecked()
- ? (MediaKeys::InterfaceType)mediaKeysEnabled->property(constMkEnabledVal).toUInt()
- : MediaKeys::NoInterface));
- }
-}
-
-void ShortcutsSettingsPage::mediaKeysIfaceChanged()
-{
- if (!settingsButton) {
- return;
- }
- settingsButton->setEnabled(MediaKeys::GnomeInteface==mediaKeysIfaceCombo->itemData(mediaKeysIfaceCombo->currentIndex()).toUInt());
-}
-
-void ShortcutsSettingsPage::showGnomeSettings()
-{
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
- if (Utils::Unity==Utils::currentDe() && !Utils::findExe("unity-control-center").isEmpty()) {
- QProcess::startDetached("unity-control-center", QStringList() << "keyboard");
- return;
- }
- #endif
- QProcess::startDetached("gnome-control-center", QStringList() << "keyboard");
}
diff --git a/gui/shortcutssettingspage.h b/gui/shortcutssettingspage.h
index f2a7363..8b71f51 100644
--- a/gui/shortcutssettingspage.h
+++ b/gui/shortcutssettingspage.h
@@ -33,23 +33,13 @@ class QCheckBox;
class ShortcutsSettingsPage : public QWidget
{
- Q_OBJECT
-
public:
ShortcutsSettingsPage(QWidget *p);
void load();
void save();
-
-private Q_SLOTS:
- void mediaKeysIfaceChanged();
- void showGnomeSettings();
-
private:
ShortcutsSettingsWidget *shortcuts;
- QComboBox *mediaKeysIfaceCombo;
- ToolButton *settingsButton;
- QCheckBox *mediaKeysEnabled;
};
#endif
diff --git a/gui/stdactions.cpp b/gui/stdactions.cpp
index 9f7aa48..9f83717 100644
--- a/gui/stdactions.cpp
+++ b/gui/stdactions.cpp
@@ -39,11 +39,7 @@ GLOBAL_STATIC(StdActions, instance)
StdActions::StdActions()
{
- #ifdef ENABLE_KDE_SUPPORT
- bool menuIcons=true;
- #else
- bool menuIcons=!QCoreApplication::testAttribute(Qt::AA_DontShowIconsInMenus);
- #endif
+ UNITY_MENU_ICON_CHECK
prevTrackAction = ActionCollection::get()->createAction("prevtrack", i18n("Previous Track"), Icons::self()->toolbarPrevIcon);
nextTrackAction = ActionCollection::get()->createAction("nexttrack", i18n("Next Track"), Icons::self()->toolbarNextIcon);
playPauseTrackAction = ActionCollection::get()->createAction("playpausetrack", i18n("Play/Pause"), Icons::self()->toolbarPlayIcon);
@@ -52,33 +48,32 @@ StdActions::StdActions()
stopAfterTrackAction = ActionCollection::get()->createAction("stopaftertrack", i18n("Stop After Track"), Icons::self()->toolbarStopIcon);
increaseVolumeAction = ActionCollection::get()->createAction("increasevolume", i18n("Increase Volume"));
decreaseVolumeAction = ActionCollection::get()->createAction("decreasevolume", i18n("Decrease Volume"));
- savePlayQueueAction = ActionCollection::get()->createAction("saveplaylist", i18n("Save As"), "document-save-as");
+ savePlayQueueAction = ActionCollection::get()->createAction("saveplaylist", i18n("Save As"), HIDE_MENU_ICON_NAME("document-save-as"));
addToPlayQueueAction = ActionCollection::get()->createAction("addtoplaylist", i18n("Add To Play Queue"), "list-add");
- addRandomToPlayQueueAction = ActionCollection::get()->createAction("addrandomalbumstoplaylist", i18n("Add Albums In Random Order"), Icons::self()->shuffleIcon);
replacePlayQueueAction = ActionCollection::get()->createAction("replaceplaylist", i18n("Replace Play Queue"), "media-playback-start");
- addWithPriorityAction = ActionCollection::get()->createAction("addwithprio", i18n("Add With Priority"), Icon("favorites"));
+ addWithPriorityAction = new Action(Icon("favorites"), i18n("Add With Priority"), 0);
addPrioHighestAction = new Action(i18n("Highest Priority (255)"), 0);
addPrioHighAction = new Action(i18n("High Priority (200)"), 0);
addPrioMediumAction = new Action(i18n("Medium Priority (125)"), 0);
addPrioLowAction = new Action(i18n("Low Priority (50)"), 0);
addPrioDefaultAction = new Action(i18n("Default Priority (0)"), 0);
addPrioCustomAction = new Action(i18n("Custom Priority..."), 0);
- addToStoredPlaylistAction = ActionCollection::get()->createAction("addtostoredplaylist", i18n("Add To Playlist"), Icons::self()->playlistIcon);
+ addToStoredPlaylistAction = new Action(Icons::self()->playlistIcon, i18n("Add To Playlist"), 0);
#ifdef TAGLIB_FOUND
organiseFilesAction = ActionCollection::get()->createAction("organizefiles", i18n("Organize Files"), "inode-directory");
- editTagsAction = ActionCollection::get()->createAction("edittags", i18n("Edit Tags"), "document-edit");
+ editTagsAction = ActionCollection::get()->createAction("edittags", i18n("Edit Track Information"), "document-edit");
#endif
#ifdef ENABLE_REPLAYGAIN_SUPPORT
replaygainAction = ActionCollection::get()->createAction("replaygain", i18n("ReplayGain"), Icons::self()->audioFileIcon);
#endif
#ifdef ENABLE_DEVICES_SUPPORT
- copyToDeviceAction = ActionCollection::get()->createAction("copytodevice", i18n("Copy Songs To Device"), "multimedia-player");
+ copyToDeviceAction = new Action(HIDE_MENU_ICON(Icon("multimedia-player")), i18n("Copy Songs To Device"), 0);
copyToDeviceAction->setMenu(DevicesModel::self()->menu());
deleteSongsAction = ActionCollection::get()->createAction("deletesongs", i18n("Delete Songs"), "edit-delete");
#endif
setCoverAction = ActionCollection::get()->createAction("setcover", i18n("Set Image"));
removeAction = ActionCollection::get()->createAction("removeitems", i18n("Remove"), "list-remove");
- searchAction = ActionCollection::get()->createAction("search", i18n("Find"), menuIcons ? "edit-find" : "");
+ searchAction = ActionCollection::get()->createAction("search", i18n("Find"), HIDE_MENU_ICON_NAME("edit-find"));
searchAction->setShortcut(Qt::ControlModifier+Qt::Key_F);
addToStoredPlaylistAction->setMenu(PlaylistsModel::self()->menu());
diff --git a/gui/stdactions.h b/gui/stdactions.h
index 0c53068..953310a 100644
--- a/gui/stdactions.h
+++ b/gui/stdactions.h
@@ -44,7 +44,6 @@ public:
Action *decreaseVolumeAction;
Action *savePlayQueueAction;
Action *addToPlayQueueAction;
- Action *addRandomToPlayQueueAction;
Action *replacePlayQueueAction;
Action *addWithPriorityAction;
Action *addToStoredPlaylistAction;
diff --git a/gui/trayitem.cpp b/gui/trayitem.cpp
index 6090c61..7a2fe8e 100644
--- a/gui/trayitem.cpp
+++ b/gui/trayitem.cpp
@@ -40,7 +40,11 @@
#endif
#include <QWheelEvent>
#include <QMenu>
+#ifdef Q_OS_MAC
+#include "mac/macnotify.h"
+#endif
+#ifndef Q_OS_MAC
class VolumeSliderEventHandler : public QObject
{
public:
@@ -66,20 +70,41 @@ protected:
return QObject::eventFilter(obj, event);
}
};
+#endif
TrayItem::TrayItem(MainWindow *p)
: QObject(p)
+ #ifndef Q_OS_MAC
, mw(p)
, trayItem(0)
, trayItemMenu(0)
#ifdef QT_QTDBUS_FOUND
, notification(0)
#endif
+ #endif
{
}
+void TrayItem::showMessage(const QString &title, const QString &text, const QImage &img)
+{
+ #ifdef Q_OS_MAC
+ MacNotify::showMessage(title, text, img);
+ #elif defined QT_QTDBUS_FOUND
+ if (!notification) {
+ notification=new Notify(this);
+ }
+ notification->show(title, text, img);
+ #else
+ Q_UNUSED(img)
+ if (trayItem) {
+ trayItem->showMessage(title, text, QSystemTrayIcon::Information, 5000);
+ }
+ #endif
+}
+
void TrayItem::setup()
{
+ #ifndef Q_OS_MAC
if (!Settings::self()->useSystemTray()) {
if (trayItem) {
#ifndef ENABLE_KDE_SUPPORT
@@ -103,6 +128,7 @@ void TrayItem::setup()
trayItem->setTitle(i18n("Cantata"));
trayItem->setIconByName(QIcon::hasThemeIcon("cantata-panel") ? QLatin1String("cantata-panel") : QLatin1String("cantata"));
trayItem->setToolTip("cantata", i18n("Cantata"), QString());
+ trayItem->setStandardActionsEnabled(false);
trayItemMenu = new KMenu(0);
trayItemMenu->addAction(StdActions::self()->prevTrackAction);
@@ -114,6 +140,9 @@ void TrayItem::setup()
trayItem->setStatus(KStatusNotifierItem::Active);
trayItemMenu->addSeparator();
trayItemMenu->addAction(mw->restoreAction);
+ trayItemMenu->addSeparator();
+ trayItemMenu->addAction(mw->quitAction);
+
connect(trayItem, SIGNAL(scrollRequested(int, Qt::Orientation)), this, SLOT(trayItemScrollRequested(int, Qt::Orientation)));
connect(trayItem, SIGNAL(secondaryActivateRequested(const QPoint &)), mw, SLOT(playPauseTrack()));
connect(trayItem, SIGNAL(activateRequested(bool, const QPoint &)), this, SLOT(clicked()));
@@ -141,6 +170,7 @@ void TrayItem::setup()
trayItem->show();
connect(trayItem, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayItemClicked(QSystemTrayIcon::ActivationReason)));
#endif
+ #endif
}
#ifdef ENABLE_KDE_SUPPORT
@@ -166,6 +196,9 @@ void TrayItem::trayItemScrollRequested(int delta, Qt::Orientation orientation)
#else
void TrayItem::trayItemClicked(QSystemTrayIcon::ActivationReason reason)
{
+ #ifdef Q_OS_MAC
+ Q_UNUSED(reason)
+ #else
switch (reason) {
case QSystemTrayIcon::Trigger:
if (mw->isHidden()) {
@@ -180,11 +213,26 @@ void TrayItem::trayItemClicked(QSystemTrayIcon::ActivationReason reason)
default:
break;
}
+ #endif
}
#endif
void TrayItem::songChanged(const Song &song, bool isPlaying)
{
+ #ifdef Q_OS_MAC
+ if (Settings::self()->showPopups()) {
+ bool useable=song.isStandardStream()
+ ? !song.title.isEmpty() && !song.name().isEmpty()
+ : !song.title.isEmpty() && !song.artist.isEmpty() && !song.album.isEmpty();
+ if (useable) {
+ QString text=song.describe(false);
+ if (song.time>0) {
+ text+=QLatin1String(" - ")+Utils::formatTime(song.time);
+ }
+ MacNotify::showMessage(i18n("Now playing"), text, CurrentCover::self()->image());
+ }
+ }
+ #else
if (Settings::self()->showPopups() || trayItem) {
bool useable=song.isStandardStream()
? !song.title.isEmpty() && !song.name().isEmpty()
@@ -207,7 +255,7 @@ void TrayItem::songChanged(const Song &song, bool isPlaying)
trayItem->setToolTip(i18n("Cantata")+"\n\n"+text);
// The pure Qt implementation needs both the tray icon and the setting checked.
if (Settings::self()->showPopups() && isPlaying) {
- trayItem->showMessage(i18n("Cantata"), text, QSystemTrayIcon::Information, 5000);
+ trayItem->showMessage(i18n("Now playing"), text, QSystemTrayIcon::Information, 5000);
}
#else
trayItem->setToolTip(i18n("Cantata")+"\n\n"+text);
@@ -229,4 +277,5 @@ void TrayItem::songChanged(const Song &song, bool isPlaying)
#endif
}
}
+ #endif
}
diff --git a/gui/trayitem.h b/gui/trayitem.h
index 5cc213b..9bbe36e 100644
--- a/gui/trayitem.h
+++ b/gui/trayitem.h
@@ -39,6 +39,7 @@ class QMenu;
class Notify;
#endif
class MainWindow;
+class QImage;
struct Song;
class TrayItem : public QObject
@@ -48,7 +49,13 @@ public:
TrayItem(MainWindow *p);
virtual ~TrayItem() { }
+ void showMessage(const QString &title, const QString &text, const QImage &img);
void setup();
+ #ifdef Q_OS_MAC
+ bool isActive() const { return false; }
+ void setIcon(const QIcon &) { }
+ void setToolTip(const QString &, const QString &, const QString &) { }
+ #else
bool isActive() const { return 0!=trayItem; }
#ifdef ENABLE_KDE_SUPPORT
void setIconByName(const QString &name) {
@@ -74,6 +81,7 @@ public:
#endif
}
}
+ #endif
void songChanged(const Song &song, bool isPlaying);
private Q_SLOTS:
@@ -85,6 +93,8 @@ private Q_SLOTS:
#endif
private:
+ #ifndef Q_OS_MAC
+
MainWindow *mw;
#ifdef ENABLE_KDE_SUPPORT
KStatusNotifierItem *trayItem;
@@ -96,6 +106,8 @@ private:
#ifdef QT_QTDBUS_FOUND
Notify *notification;
#endif
+
+ #endif
};
#endif
diff --git a/http/httpserver.cpp b/http/httpserver.cpp
index e75f983..caa4592 100644
--- a/http/httpserver.cpp
+++ b/http/httpserver.cpp
@@ -67,7 +67,6 @@ HttpServer::HttpServer()
, closeTimer(0)
{
force=Settings::self()->alwaysUseHttp();
- connect(MPDConnection::self(), SIGNAL(socketAddress(QString)), this, SLOT(mpdAddress(QString)));
connect(MPDConnection::self(), SIGNAL(cantataStreams(QList<Song>,bool)), this, SLOT(cantataStreams(QList<Song>,bool)));
connect(MPDConnection::self(), SIGNAL(cantataStreams(QStringList)), this, SLOT(cantataStreams(QStringList)));
connect(MPDConnection::self(), SIGNAL(removedIds(QSet<qint32>)), this, SLOT(removedIds(QSet<qint32>)));
@@ -92,7 +91,7 @@ bool HttpServer::start()
thread=new Thread("HttpServer");
}
socket=new HttpSocket(Settings::self()->httpInterface(), prevPort);
- socket->mpdAddress(mpdAddr);
+ socket->mpdAddress(MPDConnection::self()->ipAddress());
connect(this, SIGNAL(terminateSocket()), socket, SLOT(terminate()), Qt::QueuedConnection);
if (socket->serverPort()!=prevPort) {
Settings::self()->saveHttpAllocatedPort(socket->serverPort());
@@ -131,8 +130,7 @@ void HttpServer::readConfig()
QString HttpServer::address() const
{
- return socket ? QLatin1String("http://")+socket->address()+QChar(':')+QString::number(socket->serverPort())
- : QLatin1String("http://127.0.0.1:*");
+ return socket ? socket->urlAddress() : QLatin1String("http://127.0.0.1:*");
}
bool HttpServer::isOurs(const QString &url) const
@@ -316,11 +314,6 @@ void HttpServer::startCloseTimer()
closeTimer->start(1000);
}
-void HttpServer::mpdAddress(const QString &a)
-{
- mpdAddr=a;
-}
-
void HttpServer::cantataStreams(const QStringList &files)
{
DBUG << files;
diff --git a/http/httpserver.h b/http/httpserver.h
index 8e487cf..c4815aa 100644
--- a/http/httpserver.h
+++ b/http/httpserver.h
@@ -80,7 +80,6 @@ private:
private Q_SLOTS:
void stop();
void startCloseTimer();
- void mpdAddress(const QString &a);
void cantataStreams(const QStringList &files);
void cantataStreams(const QList<Song> &songs, bool isUpdate);
void removedIds(const QSet<qint32> &ids);
@@ -93,7 +92,6 @@ private:
Thread *thread;
HttpSocket *socket;
- QString mpdAddr;
QSet<qint32> streamIds; // Currently playing MPD stream IDs
QTimer *closeTimer;
#endif
diff --git a/http/httpserversettings.cpp b/http/httpserversettings.cpp
index 7e9e32a..8c2e5f3 100644
--- a/http/httpserversettings.cpp
+++ b/http/httpserversettings.cpp
@@ -36,15 +36,38 @@ static int isIfaceType(const QNetworkInterface &iface, const QString &prefix)
static QString details(const QNetworkInterface &iface)
{
QString d=iface.humanReadableName();
- if (!iface.addressEntries().isEmpty()) {
- d+=QLatin1String(" - ")+iface.addressEntries().first().ip().toString();
+ QList<QNetworkAddressEntry> addresses=iface.addressEntries();
+ if (!addresses.isEmpty()) {
+ QString ipV4, ipV6;
+ foreach (const QNetworkAddressEntry &addr, addresses) {
+ QString ip=addr.ip().toString();
+ if (ip.isEmpty()) {
+ continue;
+ }
+ if (ip.endsWith(QLatin1Char('%')+d)) {
+ ip=ip.left(ip.length()-(d.length()+1));
+ }
+ if (QAbstractSocket::IPv4Protocol==addr.ip().protocol()) {
+ ipV4=ip;
+ } else if (QAbstractSocket::IPv6Protocol==addr.ip().protocol()) {
+ ipV6=ip;
+ }
+ }
+
+ QString ipAddr;
+ if (!ipV4.isEmpty()) {
+ ipAddr=ipV4;
+ } else if (!ipV6.isEmpty()) {
+ ipAddr=ipV6;
+ }
+ d+=QLatin1String(" - ")+ipAddr;
}
return d;
}
static QString displayName(const QNetworkInterface &iface)
{
- if (iface.name()=="lo") {
+ if (iface.name()==QLatin1String("lo") || isIfaceType(iface , "lo")) {
return i18n("Local loopback (%1)", details(iface));
}
if (isIfaceType(iface, "eth")) {
@@ -72,6 +95,10 @@ HttpServerSettings::HttpServerSettings(QWidget *p)
{
setupUi(this);
initInterfaces(httpInterface);
+
+ #ifdef Q_OS_MAC
+ expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
+ #endif
}
void HttpServerSettings::load()
diff --git a/http/httpserversettings.ui b/http/httpserversettings.ui
index d53c354..56a32f6 100644
--- a/http/httpserversettings.ui
+++ b/http/httpserversettings.ui
@@ -35,44 +35,28 @@
</layout>
</item>
<item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>16</height>
- </size>
+ <widget class="NoteLabel" name="label_4">
+ <property name="text">
+ <string>MPD usually only plays songs that are stored within its folders. Cantata contains a minimal HTTP server that can be used to serve other files to MPD. This, however, will only work whilst Cantata is running.</string>
</property>
- </spacer>
+ </widget>
</item>
<item>
- <widget class="QLabel" name="label_4">
+ <widget class="NoteLabel" name="label_4b">
<property name="text">
- <string><i><b>NOTE:</b> MPD usually only plays songs that are stored within its folders. Cantata contains a minimal HTTP server that can be used to serve other files to MPD. This, however, will only work whilst Cantata is running.<br/><br/>
-<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> also be on this computer.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> also be on this computer.</string>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer">
+ <spacer name="expandingSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>13</height>
+ <height>0</height>
</size>
</property>
</spacer>
@@ -85,6 +69,11 @@
<extends>QLabel</extends>
<header>support/buddylabel.h</header>
</customwidget>
+ <customwidget>
+ <class>NoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
</customwidgets>
<tabstops/>
<resources/>
diff --git a/http/httpsocket.cpp b/http/httpsocket.cpp
index aaa689d..76b93fe 100644
--- a/http/httpsocket.cpp
+++ b/http/httpsocket.cpp
@@ -258,13 +258,15 @@ HttpSocket::HttpSocket(const QString &iface, quint16 port)
if (isListening() && ifaceAddress.isEmpty()) {
ifaceAddress=QLatin1String("127.0.0.1");
}
+ setUrlAddress();
- DBUG << isListening() << ifaceAddress << serverPort();
+ DBUG << isListening() << urlAddr;
connect(MPDConnection::self(), SIGNAL(socketAddress(QString)), this, SLOT(mpdAddress(QString)));
connect(MPDConnection::self(), SIGNAL(cantataStreams(QList<Song>,bool)), this, SLOT(cantataStreams(QList<Song>,bool)));
connect(MPDConnection::self(), SIGNAL(cantataStreams(QStringList)), this, SLOT(cantataStreams(QStringList)));
connect(MPDConnection::self(), SIGNAL(removedIds(QSet<qint32>)), this, SLOT(removedIds(QSet<qint32>)));
+ connect(this, SIGNAL(newConnection()), SLOT(handleNewConnection()));
}
bool HttpSocket::openPort(const QHostAddress &a, quint16 p)
@@ -304,12 +306,14 @@ void HttpSocket::terminate()
deleteLater();
}
-void HttpSocket::incomingConnection(int socket)
+void HttpSocket::handleNewConnection()
{
- QTcpSocket *s = new QTcpSocket(this);
- connect(s, SIGNAL(readyRead()), this, SLOT(readClient()));
- connect(s, SIGNAL(disconnected()), this, SLOT(discardClient()));
- s->setSocketDescriptor(socket);
+ DBUG;
+ while (hasPendingConnections()) {
+ QTcpSocket *s = nextPendingConnection();
+ connect(s, SIGNAL(readyRead()), this, SLOT(readClient()));
+ connect(s, SIGNAL(disconnected()), this, SLOT(discardClient()));
+ }
}
void HttpSocket::readClient()
@@ -565,3 +569,16 @@ bool HttpSocket::write(QTcpSocket *socket, char *buffer, qint32 bytesRead, bool
}
return true;
}
+
+void HttpSocket::setUrlAddress()
+{
+ if (ifaceAddress.isEmpty()) {
+ ifaceAddress=QString();
+ } else {
+ QUrl url;
+ url.setScheme("http");
+ url.setHost(ifaceAddress);
+ url.setPort(serverPort());
+ urlAddr=url.toString();
+ }
+}
diff --git a/http/httpsocket.h b/http/httpsocket.h
index 0f32c7a..9b0c0dd 100644
--- a/http/httpsocket.h
+++ b/http/httpsocket.h
@@ -41,9 +41,9 @@ public:
HttpSocket(const QString &iface, quint16 port);
virtual ~HttpSocket() { }
- void incomingConnection(int socket);
QString address() const { return ifaceAddress; }
QString configuredInterface() { return cfgInterface; }
+ QString urlAddress() const { return urlAddr; }
public Q_SLOTS:
void terminate();
@@ -55,6 +55,7 @@ private:
void sendErrorResponse(QTcpSocket *socket, int code);
private Q_SLOTS:
+ void handleNewConnection();
void readClient();
void discardClient();
void cantataStreams(const QStringList &files);
@@ -63,12 +64,14 @@ private Q_SLOTS:
private:
bool write(QTcpSocket *socket, char *buffer, qint32 bytesRead, bool &stop);
+ void setUrlAddress();
private:
QSet<QString> newlyAddedFiles; // Holds cantata strema filenames as added to MPD via "add"
QMap<qint32, QString> streamIds; // Maps MPD playqueue song ID to fileName
QString cfgInterface;
QString ifaceAddress;
+ QString urlAddr;
QString mpdAddr;
bool terminated;
};
diff --git a/icons/CMakeLists.txt b/icons/CMakeLists.txt
index 7ba2947..4da6e5c 100644
--- a/icons/CMakeLists.txt
+++ b/icons/CMakeLists.txt
@@ -46,3 +46,6 @@ if (NOT WIN32 AND NOT APPLE)
endif (NOT WIN32 AND NOT APPLE)
+#if (APPLE)
+# install(FILES trayicon-mono-dark.svg DESTINATION ${CANTATA_ICON_INSTALL_PREFIX}/scalable/apps RENAME cantata-panel.svg)
+#endif (APPLE)
diff --git a/icons/media-next-rtl-dark.svg b/icons/media-next-rtl-dark.svg
deleted file mode 100644
index 02fb388..0000000
--- a/icons/media-next-rtl-dark.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="128pt" width="128pt" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 128 128">
-<g id="surface1" fill="#404040">
-<path d="m120 32c-1.42 0.062-2.81 0.473-4 1.25l-40 24c-2.258 1.438-3.5 4.094-3.5 6.75s1.242 5.312 3.5 6.75l40 24c1.19 0.777 2.58 1.188 4 1.25h8v-64z"/>
-<path d="m16 32v64h-16v-64z"/>
-<path d="m64 32c-1.418 0.062-2.809 0.473-4 1.25l-40 24c-2.258 1.438-3.5 4.094-3.5 6.75s1.242 5.312 3.5 6.75l40 24c1.191 0.777 2.582 1.188 4 1.25h8v-64z"/>
-</g>
-</svg>
diff --git a/icons/media-next-rtl-light.svg b/icons/media-next-rtl-light.svg
deleted file mode 100644
index 386c313..0000000
--- a/icons/media-next-rtl-light.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="128pt" width="128pt" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 128 128">
-<g id="surface1" fill="#f0f0f0">
-<path d="m120 32c-1.42 0.062-2.81 0.473-4 1.25l-40 24c-2.258 1.438-3.5 4.094-3.5 6.75s1.242 5.312 3.5 6.75l40 24c1.19 0.777 2.58 1.188 4 1.25h8v-64z"/>
-<path d="m16 32v64h-16v-64z"/>
-<path d="m64 32c-1.418 0.062-2.809 0.473-4 1.25l-40 24c-2.258 1.438-3.5 4.094-3.5 6.75s1.242 5.312 3.5 6.75l40 24c1.191 0.777 2.582 1.188 4 1.25h8v-64z"/>
-</g>
-</svg>
diff --git a/icons/media-prev-rtl-dark.svg b/icons/media-prev-rtl-dark.svg
deleted file mode 100644
index 8839aac..0000000
--- a/icons/media-prev-rtl-dark.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="128pt" width="128pt" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 128 128">
-<g id="surface1" fill="#404040">
-<path d="m8 32c1.418 0.062 2.809 0.473 4 1.25l40 24c2.258 1.438 3.5 4.094 3.5 6.75s-1.242 5.312-3.5 6.75l-40 24c-1.191 0.777-2.582 1.188-4 1.25h-8v-64z"/>
-<path d="m112 32v64h16v-64z"/>
-<path d="m64 32c1.418 0.062 2.809 0.473 4 1.25l40 24c2.26 1.438 3.5 4.094 3.5 6.75s-1.24 5.312-3.5 6.75l-40 24c-1.191 0.777-2.582 1.188-4 1.25h-8v-64z"/>
-</g>
-</svg>
diff --git a/icons/media-prev-rtl-light.svg b/icons/media-prev-rtl-light.svg
deleted file mode 100644
index 9795e1b..0000000
--- a/icons/media-prev-rtl-light.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="128pt" width="128pt" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 128 128">
-<g id="surface1" fill="#f0f0f0">
-<path d="m8 32c1.418 0.062 2.809 0.473 4 1.25l40 24c2.258 1.438 3.5 4.094 3.5 6.75s-1.242 5.312-3.5 6.75l-40 24c-1.191 0.777-2.582 1.188-4 1.25h-8v-64z"/>
-<path d="m112 32v64h16v-64z"/>
-<path d="m64 32c1.418 0.062 2.809 0.473 4 1.25l40 24c2.26 1.438 3.5 4.094 3.5 6.75s-1.24 5.312-3.5 6.75l-40 24c-1.191 0.777-2.582 1.188-4 1.25h-8v-64z"/>
-</g>
-</svg>
diff --git a/icons/stars.svg b/icons/stars.svg
new file mode 100644
index 0000000..ba2aa46
--- /dev/null
+++ b/icons/stars.svg
@@ -0,0 +1,4 @@
+<svg id="stars" xmlns="http://www.w3.org/2000/svg" height="110" width="220" version="1.0">
+<path id="on" stroke-linejoin="round" d="m54 5 12.409 38.199 40.161-0.002-32.492 23.606 12.414 38.197-32.492-23.61-32.492 23.61 12.414-38.197-32.495-23.606 40.164 0.002 12.409-38.199z" fill-rule="evenodd" stroke="#000" stroke-width="3" fill="#000"/>
+<path id="off" stroke-linejoin="round" d="m166.07 5 12.409 38.199 40.161-0.002-32.492 23.606l12.41 38.197-32.49-23.61-32.49 23.61 12.414-38.197-32.495-23.606 40.164 0.002 12.409-38.199z" stroke="#000" stroke-width="3" fill="none"/>
+</svg>
diff --git a/icons/view-media-artist-various.svg b/icons/view-media-artist-various.svg
index 42f2c85..230515d 100644
--- a/icons/view-media-artist-various.svg
+++ b/icons/view-media-artist-various.svg
@@ -1,71 +1,32 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg1307" xmlns="http://www.w3.org/2000/svg" height="128" width="128" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs id="defs1309">
-<linearGradient id="linearGradient2928">
-<stop id="stop2930" stop-color="#f6f6f6" offset="0"/>
-<stop id="stop2932" stop-color="#f6f6f6" stop-opacity="0" offset="1"/>
-</linearGradient>
<linearGradient id="linearGradient2905">
<stop id="stop2907" stop-color="#fff" offset="0"/>
<stop id="stop2909" stop-color="#fff" stop-opacity="0" offset="1"/>
</linearGradient>
-<radialGradient id="radialGradient4433" gradientUnits="userSpaceOnUse" cy="115.71" cx="63.912" gradientTransform="matrix(1 0 0 .19780 0 92.822)" r="63.912">
-<stop id="stop3293-0" stop-color="#43ACE8" offset="0"/>
-<stop id="stop3295-3" stop-color="#43ACE8" stop-opacity="0" offset="1"/>
-</radialGradient>
-<linearGradient id="linearGradient4435" y2="68.546" gradientUnits="userSpaceOnUse" x2="8.878" gradientTransform="matrix(.97642 0 0 .97642 89.254 -30.605)" y1="68.546" x1="-36.688">
+<linearGradient id="linearGradient3155" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(.73049 0 0 .73049 174.64 -33.808)" y1="162.55" x1="-140.06"/>
+<linearGradient id="linearGradient3158" y2="68.546" gradientUnits="userSpaceOnUse" x2="8.878" gradientTransform="matrix(.73049 0 0 .73049 100.37 -16.64)" y1="68.546" x1="-36.688">
<stop id="stop2894-7" stop-color="#fff" offset="0"/>
<stop id="stop2896-3" stop-color="#fff" stop-opacity="0" offset="1"/>
</linearGradient>
-<linearGradient id="linearGradient4437" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(.97642 0 0 .97642 188.53 -53.552)" y1="162.55" x1="-140.06"/>
-<linearGradient id="linearGradient4439" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(-.97642 0 0 .97642 -58.973 -53.552)" y1="159.35" x1="-185.31"/>
-<linearGradient id="linearGradient4441" y2="169.16" xlink:href="#linearGradient2928" gradientUnits="userSpaceOnUse" x2="75.186" gradientTransform="matrix(.97642 0 0 .97642 1.5136 .0095408)" y1="-217.56" x1="91.829"/>
-<linearGradient id="linearGradient4443" y2="169.16" xlink:href="#linearGradient2928" gradientUnits="userSpaceOnUse" x2="75.186" gradientTransform="matrix(.97642 0 0 .97642 1.5136 .0095408)" y1="-92.147" x1="121.81"/>
-<radialGradient id="radialGradient4445" gradientUnits="userSpaceOnUse" cy="140.99" cx="64.203" gradientTransform="matrix(1.3871 0 0 .91142 -24.324 10.49)" r="59.669">
-<stop id="stop2820-1" stop-color="#fff" offset="0"/>
-<stop id="stop2822-0" stop-color="#fff" stop-opacity="0" offset="1"/>
-</radialGradient>
-<radialGradient id="radialGradient4447" gradientUnits="userSpaceOnUse" cy="115.71" cx="63.912" gradientTransform="matrix(1 0 0 .19780 0 92.822)" r="63.912">
-<stop id="stop3293" offset="0"/>
-<stop id="stop3295" stop-opacity="0" offset="1"/>
-</radialGradient>
-<linearGradient id="linearGradient4449" y2="68.546" gradientUnits="userSpaceOnUse" x2="8.878" gradientTransform="matrix(.97642 0 0 .97642 89.254 -30.605)" y1="68.546" x1="-36.688">
-<stop id="stop2894" stop-color="#fff" offset="0"/>
-<stop id="stop2896" stop-color="#fff" stop-opacity="0" offset="1"/>
+<linearGradient id="linearGradient4632" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(-.73049 0 0 .73049 -10.521 -33.808)" y1="159.35" x1="-185.31"/>
+<linearGradient id="linearGradient4634" y2="68.546" gradientUnits="userSpaceOnUse" x2="8.878" gradientTransform="matrix(.73049 0 0 .73049 64.84 3.9896)" y1="68.546" x1="-36.688">
+<stop id="stop2894-7-4" stop-color="#fff" offset="0"/>
+<stop id="stop2896-3-9" stop-color="#fff" stop-opacity="0" offset="1"/>
</linearGradient>
-<linearGradient id="linearGradient4451" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(.97642 0 0 .97642 188.53 -53.552)" y1="162.55" x1="-140.06"/>
-<linearGradient id="linearGradient4453" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(-.97642 0 0 .97642 -58.973 -53.552)" y1="159.35" x1="-185.31"/>
-<radialGradient id="radialGradient4459" gradientUnits="userSpaceOnUse" cy="140.99" cx="64.203" gradientTransform="matrix(1.3871 0 0 .91142 -24.856 13.662)" r="59.669">
-<stop id="stop2820" stop-color="#fff" offset="0"/>
-<stop id="stop2822" stop-color="#fff" stop-opacity="0" offset="1"/>
-</radialGradient>
+<linearGradient id="linearGradient4636" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(.73049 0 0 .73049 139.11 -13.178)" y1="162.55" x1="-140.06"/>
+<linearGradient id="linearGradient4638" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(-.73049 0 0 .73049 -46.051 -13.178)" y1="159.35" x1="-185.31"/>
</defs>
-<g id="layer1">
-<g id="g3972" transform="matrix(.74813 0 0 .74813 33.598 6.2562)">
-<path id="path2876-4" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" stroke-opacity=".20732" stroke="#43ace8" stroke-width="1.9528" fill="#43ace8"/>
-<path id="path2276-8" d="m50.893 3.2813v-2.7947 2.7947z" fill-opacity=".75688" fill="#fff"/>
-<path id="path3289-7" opacity=".38140" d="m127.82 115.71c0 6.982-28.614 12.642-63.912 12.642-35.294 0-63.908-5.66-63.908-12.64 0-6.982 28.614-12.642 63.912-12.642s63.912 5.66 63.912 12.642z" transform="matrix(1 0 0 .41667 .26644 74.258)" fill="url(#radialGradient4433)"/>
-<path id="path2375-0" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="#43ace8"/>
-<path id="path2878-8" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="#43ace8"/>
-<path id="path2882-6" d="m63.806 2.319c-3.601 0.046-7.123 1.1624-10.375 3.5395 2.947-1.8678 7.703-2.1105 10.896-1.8186 15.05 1.3757 34.238 22.173 32.403 43.103-0.909 10.362-5.947 18.101-12.877 23.19 7.479-5.064 12.989-13.063 13.944-23.953 1.836-20.93-16.89-44.28-33.991-44.061z" fill="url(#linearGradient4435)"/>
-<path id="path2900-2" d="m79.147 75.901c-0.04709 0.02225-0.09802 0.03604-0.14522 0.05809 0.06127 2.2431 0.46091 4.1689 1.1037 5.2571 1.9245 3.2581 6.3475 6.0308 14.058 8.2197 8.5937 2.4398 15.366 4.944 20.215 9.2073 4.0003 3.5169 6.6883 7.5432 7.087 12.577 0.0254-0.16046 0.0581-0.32964 0.0581-0.49377 0-5.6534-2.8037-10.067-7.1451-13.884-4.85-4.263-11.62-6.767-20.216-9.207-7.711-2.188-12.134-4.961-14.058-8.219-0.469-0.794-0.786-2.031-0.959-3.515z" fill="url(#linearGradient4437)"/>
-<path id="path2913-4" d="m50.41 75.901c0.04709 0.02225 0.09802 0.03604 0.14522 0.05809-0.06127 2.2431-0.46091 4.1689-1.1037 5.2571-1.9245 3.2581-6.3475 6.0308-14.058 8.2197-8.5937 2.4398-15.366 4.944-20.215 9.2073-4.0003 3.5169-6.6883 7.5432-7.087 12.577-0.025367-0.16046-0.058097-0.32964-0.058097-0.49377 0-5.6534 2.8037-10.067 7.1451-13.884 4.8494-4.2633 11.622-6.7675 20.215-9.2073 7.7103-2.189 12.133-4.9616 14.058-8.2197 0.46906-0.79411 0.78538-2.0306 0.95849-3.5144z" fill="url(#linearGradient4439)"/>
-<path id="path2923-7" opacity=".19262" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.971 2.546-16.087 5.021-21.238 9.55-1.107 0.973-2.0933 1.995-2.9906 3.051 34.74 13.124 77.188-5.218 111.4 1.374-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="url(#linearGradient4441)"/>
-<path id="path2936-9" opacity=".14754" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.009 11.343 2.9188 19.615 9.3065 24.929 5.592-25.64 19.346-45.543 41.009-59.837-5.48-4.6832-11.731-7.5838-17.789-7.5064zm27.462 19.009c-22.175 18.251-31.657 42.667-29.384 79.243 20.34-0.461 40.535-0.968 58.245 0.825-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 0.749-8.538-1.942-17.472-6.53-25.052z" fill="url(#linearGradient4443)"/>
-<path id="path1928-3" opacity=".41803" d="m64.658-1.7895c-5.7 0.0728-11.221 2.7578-15.744 9.0319-12.471 3.3416-15.687 21.063-16.783 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.479-12.21-7.11-21.24-9.673-8.1-2.3-12.747-5.212-14.769-8.635-0.675-1.144-1.095-3.167-1.159-5.523 9.916-4.632 17.762-13.575 18.918-26.76 1.84-20.931-16.89-44.28-33.992-44.062z" fill="url(#radialGradient4445)"/>
-</g>
-<g id="g4043" transform="matrix(.81216 0 0 .81216 -2.9537 22.876)">
-<path id="path2876" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" stroke-opacity=".20732" stroke="#000" stroke-width="1.9528"/>
-<path id="path2276" d="m50.893 3.2813v-2.7947 2.7947z" fill-opacity=".75688" fill="#fff"/>
-<path id="path3289" opacity=".38140" d="m127.82 115.71c0 6.982-28.614 12.642-63.912 12.642-35.294 0-63.908-5.66-63.908-12.64 0-6.982 28.614-12.642 63.912-12.642s63.912 5.66 63.912 12.642z" transform="matrix(1 0 0 .41667 .26644 74.258)" fill="url(#radialGradient4447)"/>
-<path id="path2375" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z"/>
-<path id="path2878" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z"/>
-<path id="path2882" d="m63.806 2.319c-3.601 0.046-7.123 1.1624-10.375 3.5395 2.947-1.8678 7.703-2.1105 10.896-1.8186 15.05 1.3757 34.238 22.173 32.403 43.103-0.909 10.362-5.947 18.101-12.877 23.19 7.479-5.064 12.989-13.063 13.944-23.953 1.836-20.93-16.89-44.28-33.991-44.061z" fill="url(#linearGradient4449)"/>
-<path id="path2900" d="m79.147 75.901c-0.04709 0.02225-0.09802 0.03604-0.14522 0.05809 0.06127 2.2431 0.46091 4.1689 1.1037 5.2571 1.9245 3.2581 6.3475 6.0308 14.058 8.2197 8.5937 2.4398 15.366 4.944 20.215 9.2073 4.0003 3.5169 6.6883 7.5432 7.087 12.577 0.0254-0.16046 0.0581-0.32964 0.0581-0.49377 0-5.6534-2.8037-10.067-7.1451-13.884-4.85-4.263-11.62-6.767-20.216-9.207-7.711-2.188-12.134-4.961-14.058-8.219-0.469-0.794-0.786-2.031-0.959-3.515z" fill="url(#linearGradient4451)"/>
-<path id="path2913" d="m50.41 75.901c0.04709 0.02225 0.09802 0.03604 0.14522 0.05809-0.06127 2.2431-0.46091 4.1689-1.1037 5.2571-1.9245 3.2581-6.3475 6.0308-14.058 8.2197-8.5937 2.4398-15.366 4.944-20.215 9.2073-4.0003 3.5169-6.6883 7.5432-7.087 12.577-0.025367-0.16046-0.058097-0.32964-0.058097-0.49377 0-5.6534 2.8037-10.067 7.1451-13.884 4.8494-4.2633 11.622-6.7675 20.215-9.2073 7.7103-2.189 12.133-4.9616 14.058-8.2197 0.46906-0.79411 0.78538-2.0306 0.95849-3.5144z" fill="url(#linearGradient4453)"/>
-<path id="path2923" opacity=".19262" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.971 2.546-16.087 5.021-21.238 9.55-1.107 0.973-2.0933 1.995-2.9906 3.051 34.74 13.124 77.188-5.218 111.4 1.374-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="url(#linearGradient4441)"/>
-<path id="path2936" opacity=".14754" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.009 11.343 2.9188 19.615 9.3065 24.929 5.592-25.64 19.346-45.543 41.009-59.837-5.48-4.6832-11.731-7.5838-17.789-7.5064zm27.462 19.009c-22.175 18.251-31.657 42.667-29.384 79.243 20.34-0.461 40.535-0.968 58.245 0.825-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 0.749-8.538-1.942-17.472-6.53-25.052z" fill="url(#linearGradient4443)"/>
-<path id="path1928" opacity=".41803" d="m64.127 1.3826c-5.7004 0.072827-11.221 2.7577-15.745 9.0319-12.471 3.3415-15.686 21.062-16.782 33.382-1.3923 15.651 6.6159 25.489 17.515 29.72-0.15881 1.7764-0.55426 3.2895-1.0985 4.2108-2.0478 3.467-6.6974 6.4746-14.738 8.7573-8.9704 2.5467-16.085 5.0215-21.237 9.5507-4.5609 4.0097-7.5063 8.6462-7.5063 14.585 0 15.416 119.34 16.232 119.34 0 0.00001-5.9391-2.9454-10.576-7.5063-14.585-5.1-4.482-12.21-7.113-21.242-9.676-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="url(#radialGradient4459)"/>
-</g>
+<path id="path2876-4" d="m81.573 7.2906c-4.2646 0.054484-8.3948 2.0631-11.779 6.757-9.3299 2.4999-11.735 15.757-12.555 24.974-1.0416 11.709 4.9496 19.069 13.103 22.234-0.11881 1.329-0.41466 2.461-0.82182 3.1502-1.532 2.5938-5.0105 4.8438-11.026 6.5516-6.711 1.9053-12.034 3.7567-15.888 7.1452-3.4121 2.9998-5.6157 6.4685-5.6157 10.911 0 11.533 89.282 12.144 89.282 0 0.00001-4.4432-2.2035-7.9122-5.6157-10.911-3.82-3.353-9.14-5.321-15.89-7.239-6.065-1.721-9.54-3.899-11.053-6.46-0.505-0.855-0.819-2.369-0.868-4.132 7.421-3.465 13.291-10.156 14.151-20.02 1.38-15.659-12.634-33.127-25.427-32.963z" stroke-opacity=".20784" stroke="#a0a0a0" stroke-width="1.4609" fill="#a0a0a0"/>
+<path id="path2276-8" fill-opacity=".75688" fill="#fff" d="m71.673 8.711v-2.0908 2.0908z"/>
+<path id="path2882-6" fill="url(#linearGradient3158)" d="m81.333 7.9911c-2.694 0.034414-5.3289 0.86963-7.7618 2.648 2.2047-1.3974 5.7628-1.5789 8.1516-1.3605 11.259 1.0292 25.614 16.588 24.242 32.247-0.68005 7.7521-4.4491 13.542-9.6337 17.349 5.5953-3.7885 9.7175-9.7728 10.432-17.92 1.38-15.658-12.633-33.127-25.427-32.963z"/>
+<path id="path2900-2" fill="url(#linearGradient3155)" d="m92.81 63.04c-0.03523 0.01665-0.07333 0.02696-0.10864 0.04346 0.04584 1.6781 0.34482 3.1189 0.82571 3.933 1.4398 2.4375 4.7488 4.5118 10.517 6.1494 6.4292 1.8253 11.496 3.6988 15.123 6.8883 2.9928 2.6311 5.0037 5.6433 5.302 9.4092 0.019-0.12004 0.0435-0.24661 0.0435-0.3694 0-4.2295-2.0975-7.5314-5.3455-10.387-3.6284-3.1893-8.6933-5.0626-15.124-6.888-5.7688-1.6369-9.0778-3.7115-10.517-6.1489-0.35087-0.59402-0.58803-1.5195-0.71746-2.6297z"/>
+<g id="g4624" transform="matrix(1.0926 0 0 1.0677 -.067653 -8.0791)">
+<path id="path2913-4" fill="url(#linearGradient4632)" d="m71.311 63.04c0.03523 0.01665 0.07333 0.02696 0.10864 0.04346-0.04584 1.6781-0.34482 3.1189-0.82571 3.933-1.4398 2.4375-4.7488 4.5118-10.517 6.1494-6.4292 1.8253-11.496 3.6988-15.123 6.8883-2.9927 2.6311-5.0037 5.6433-5.302 9.4092-0.01898-0.12004-0.04346-0.24661-0.04346-0.3694 0-4.2295 2.0975-7.5314 5.3455-10.387 3.628-3.1895 8.6948-5.063 15.123-6.8883 5.7683-1.6377 9.0771-3.7119 10.517-6.1494 0.35092-0.5941 0.58757-1.5192 0.71708-2.6292z"/>
+<path id="path2876-4-8" d="m46.043 27.92c-4.2646 0.05448-8.3948 2.0631-11.779 6.757-9.3299 2.4999-11.735 15.757-12.555 24.974-1.0416 11.709 4.9496 19.069 13.103 22.234-0.11881 1.329-0.41466 2.461-0.82182 3.1502-1.532 2.5938-5.0105 4.8438-11.026 6.5516-6.711 1.9053-12.034 3.7567-15.888 7.1452-3.4121 2.9998-5.6157 6.4685-5.6157 10.911 0 11.533 89.282 12.144 89.282 0 0.00001-4.4432-2.2035-7.9122-5.6157-10.911-3.82-3.353-9.14-5.321-15.89-7.239-6.065-1.721-9.54-3.899-11.053-6.46-0.505-0.855-0.819-2.369-0.868-4.132 7.421-3.465 13.291-10.156 14.151-20.02 1.38-15.659-12.634-33.127-25.427-32.963z" stroke-opacity=".20784" stroke="#000" stroke-width="1.4609"/>
+<path id="path2276-8-5" fill-opacity=".75688" fill="#fff" d="m36.143 29.341v-2.0908 2.0908z"/>
+<path id="path2882-6-5" fill="url(#linearGradient4634)" d="m45.803 28.621c-2.694 0.03441-5.3289 0.86963-7.7618 2.648 2.2047-1.3974 5.7628-1.5789 8.1516-1.3605 11.259 1.0292 25.614 16.588 24.242 32.247-0.68005 7.7521-4.4491 13.542-9.6337 17.349 5.5953-3.7885 9.7175-9.7728 10.432-17.92 1.38-15.658-12.633-33.127-25.427-32.963z"/>
+<path id="path2900-2-9" fill="url(#linearGradient4636)" d="m57.28 83.67c-0.03523 0.01665-0.07333 0.02696-0.10864 0.04346 0.04584 1.6781 0.34482 3.1189 0.82571 3.933 1.4398 2.4375 4.7488 4.5118 10.517 6.1494 6.4292 1.8253 11.496 3.6988 15.123 6.8883 2.9928 2.6311 5.0037 5.6433 5.302 9.4092 0.019-0.12004 0.0435-0.24661 0.0435-0.3694 0-4.2295-2.0975-7.5314-5.3455-10.387-3.6284-3.1893-8.6933-5.0626-15.124-6.888-5.7688-1.6369-9.0778-3.7115-10.517-6.1489-0.35087-0.59402-0.58803-1.5195-0.71746-2.6297z"/>
+<path id="path2913-4-5" fill="url(#linearGradient4638)" d="m35.781 83.67c0.03523 0.01665 0.07333 0.02696 0.10864 0.04346-0.04584 1.6781-0.34482 3.1189-0.82571 3.933-1.4398 2.4375-4.7488 4.5118-10.517 6.1494-6.4292 1.8253-11.496 3.6988-15.123 6.8883-2.9927 2.6311-5.0037 5.6433-5.302 9.4092-0.01898-0.12004-0.04346-0.24661-0.04346-0.3694 0-4.2295 2.0975-7.5314 5.3455-10.387 3.628-3.1895 8.6948-5.063 15.123-6.8883 5.7683-1.6377 9.0771-3.7119 10.517-6.1494 0.35092-0.5941 0.58757-1.5192 0.71708-2.6292z"/>
</g>
</svg>
diff --git a/icons/view-media-artist-various128.png b/icons/view-media-artist-various128.png
deleted file mode 100644
index 2b61f3a..0000000
Binary files a/icons/view-media-artist-various128.png and /dev/null differ
diff --git a/icons/view-media-artist-various16.png b/icons/view-media-artist-various16.png
deleted file mode 100644
index 4f96404..0000000
Binary files a/icons/view-media-artist-various16.png and /dev/null differ
diff --git a/icons/view-media-artist-various22.png b/icons/view-media-artist-various22.png
deleted file mode 100644
index 1cb4206..0000000
Binary files a/icons/view-media-artist-various22.png and /dev/null differ
diff --git a/icons/view-media-artist-various32.png b/icons/view-media-artist-various32.png
deleted file mode 100644
index 7ca124d..0000000
Binary files a/icons/view-media-artist-various32.png and /dev/null differ
diff --git a/icons/view-media-artist-various48.png b/icons/view-media-artist-various48.png
deleted file mode 100644
index 90e969f..0000000
Binary files a/icons/view-media-artist-various48.png and /dev/null differ
diff --git a/icons/view-media-artist-various64.png b/icons/view-media-artist-various64.png
deleted file mode 100644
index 03ce352..0000000
Binary files a/icons/view-media-artist-various64.png and /dev/null differ
diff --git a/icons/view-media-artist.svg b/icons/view-media-artist.svg
index 5a3813d..50530c7 100644
--- a/icons/view-media-artist.svg
+++ b/icons/view-media-artist.svg
@@ -1,42 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg1307" xmlns="http://www.w3.org/2000/svg" height="128" width="128" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs id="defs1309">
- <linearGradient id="linearGradient2928">
- <stop id="stop2930" stop-color="#f6f6f6" offset="0"/>
- <stop id="stop2932" stop-color="#f6f6f6" stop-opacity="0" offset="1"/>
- </linearGradient>
- <linearGradient id="linearGradient2905">
- <stop id="stop2907" stop-color="#fff" offset="0"/>
- <stop id="stop2909" stop-color="#fff" stop-opacity="0" offset="1"/>
- </linearGradient>
- <radialGradient id="radialGradient3297" gradientUnits="userSpaceOnUse" cy="115.71" cx="63.912" gradientTransform="matrix(1 0 0 .19780 0 92.822)" r="63.912">
- <stop id="stop3293" offset="0"/>
- <stop id="stop3295" stop-opacity="0" offset="1"/>
- </radialGradient>
- <linearGradient id="linearGradient2898" y2="68.546" gradientUnits="userSpaceOnUse" x2="8.878" gradientTransform="matrix(.97642 0 0 .97642 89.254 -30.605)" y1="68.546" x1="-36.688">
- <stop id="stop2894" stop-color="#fff" offset="0"/>
- <stop id="stop2896" stop-color="#fff" stop-opacity="0" offset="1"/>
- </linearGradient>
- <linearGradient id="linearGradient2911" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(.97642 0 0 .97642 188.53 -53.552)" y1="162.55" x1="-140.06"/>
- <linearGradient id="linearGradient2915" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(-.97642 0 0 .97642 -58.973 -53.552)" y1="159.35" x1="-185.31"/>
- <linearGradient id="linearGradient2934" y2="169.16" xlink:href="#linearGradient2928" gradientUnits="userSpaceOnUse" x2="75.186" gradientTransform="matrix(.97642 0 0 .97642 1.5136 .0095408)" y1="-217.56" x1="91.829"/>
- <linearGradient id="linearGradient2942" y2="169.16" xlink:href="#linearGradient2928" gradientUnits="userSpaceOnUse" x2="75.186" gradientTransform="matrix(.97642 0 0 .97642 1.5136 .0095408)" y1="-92.147" x1="121.81"/>
- <radialGradient id="radialGradient2824" gradientUnits="userSpaceOnUse" cy="140.99" cx="64.203" gradientTransform="matrix(1.3871 0 0 .91142 -24.856 13.662)" r="59.669">
- <stop id="stop2820" stop-color="#fff" offset="0"/>
- <stop id="stop2822" stop-color="#fff" stop-opacity="0" offset="1"/>
- </radialGradient>
- </defs>
- <g id="layer1">
- <path id="path2876" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-4.5612 4.005-7.5066 8.645-7.5066 14.585 0 15.42 119.34 16.23 119.34 0 0-5.94-2.94-10.58-7.5-14.585-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" stroke-opacity=".20732" stroke="#000" stroke-width="1.9528"/>
- <path id="path2276" d="m50.893 3.2813v-2.7947 2.7947z" fill-opacity=".75688" fill="#fff"/>
- <path id="path3289" opacity=".38140" d="m127.82 115.71a63.912 12.642 0 1 1 -127.82 0 63.912 12.642 0 1 1 127.82 0z" transform="matrix(1 0 0 .41667 .26644 74.258)" fill="url(#radialGradient3297)"/>
- <path id="path2375" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-4.5612 4.005-7.5066 8.645-7.5066 14.585 0 15.42 119.34 16.23 119.34 0 0-5.94-2.94-10.58-7.5-14.585-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z"/>
- <path id="path2878" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-4.5612 4.005-7.5066 8.645-7.5066 14.585 0 15.42 119.34 16.23 119.34 0 0-5.94-2.94-10.58-7.5-14.585-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z"/>
- <path id="path2882" d="m63.806 2.319c-3.601 0.046-7.123 1.1624-10.375 3.5395 2.947-1.8678 7.703-2.1105 10.896-1.8186 15.05 1.3757 34.238 22.173 32.403 43.103-0.909 10.362-5.947 18.101-12.877 23.19 7.479-5.064 12.989-13.063 13.944-23.953 1.836-20.93-16.89-44.28-33.991-44.061z" fill="url(#linearGradient2898)"/>
- <path id="path2900" d="m79.147 75.901c-0.047 0.023-0.098 0.036-0.145 0.058 0.061 2.244 0.461 4.169 1.104 5.258 1.924 3.258 6.347 6.03 14.058 8.219 8.596 2.44 15.366 4.944 20.216 9.208 4 3.516 6.69 7.546 7.09 12.576 0.02-0.16 0.05-0.33 0.05-0.49 0-5.66-2.8-10.07-7.14-13.887-4.85-4.264-11.62-6.768-20.216-9.208-7.711-2.188-12.134-4.961-14.058-8.219-0.469-0.794-0.786-2.031-0.959-3.515z" fill="url(#linearGradient2911)"/>
- <path id="path2913" d="m50.41 75.901c0.047 0.023 0.098 0.036 0.146 0.058-0.062 2.244-0.461 4.169-1.104 5.258-1.925 3.258-6.348 6.03-14.058 8.219-8.594 2.44-15.366 4.944-20.215 9.208-4.001 3.516-6.6885 7.546-7.0872 12.576-0.0254-0.16-0.0581-0.33-0.0581-0.49 0-5.66 2.8033-10.07 7.1453-13.887 4.849-4.264 11.621-6.768 20.215-9.208 7.71-2.188 12.133-4.961 14.058-8.219 0.469-0.794 0.785-2.031 0.958-3.515z" fill="url(#linearGradient2915)"/>
- <path id="path2923" opacity=".19262" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-1.107 0.973-2.0933 1.995-2.9906 3.051 34.74 13.124 77.188-5.218 111.4 1.374-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="url(#linearGradient2934)"/>
- <path id="path2936" opacity=".14754" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.009 11.343 2.918 19.615 9.306 24.929 5.593-25.639 19.347-45.542 41.01-59.836-5.48-4.6832-11.731-7.5838-17.789-7.5064zm27.462 19.009c-22.175 18.251-31.657 42.667-29.384 79.243 20.34-0.461 40.535-0.968 58.245 0.825-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 0.749-8.538-1.942-17.472-6.53-25.052z" fill="url(#linearGradient2942)"/>
- <path id="path1928" opacity=".41803" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-4.5612 4.005-7.5066 8.645-7.5066 14.585 0 15.42 119.34 16.23 119.34 0 0-5.94-2.94-10.58-7.5-14.585-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="url(#radialGradient2824)"/>
- </g>
+<defs id="defs1309">
+<linearGradient id="linearGradient2905">
+<stop id="stop2907" stop-color="#fff" offset="0"/>
+<stop id="stop2909" stop-color="#fff" stop-opacity="0" offset="1"/>
+</linearGradient>
+<linearGradient id="linearGradient3082" y2="169.16" gradientUnits="userSpaceOnUse" x2="75.186" gradientTransform="matrix(.97642 0 0 .97642 1.5136 .0095408)" y1="-217.56" x1="91.829">
+<stop id="stop2930" stop-color="#f6f6f6" offset="0"/>
+<stop id="stop2932" stop-color="#f6f6f6" stop-opacity="0" offset="1"/>
+</linearGradient>
+<linearGradient id="linearGradient3085" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(-.97642 0 0 .97642 -58.973 -53.552)" y1="159.35" x1="-185.31"/>
+<linearGradient id="linearGradient3088" y2="150.66" xlink:href="#linearGradient2905" gradientUnits="userSpaceOnUse" x2="-68.625" gradientTransform="matrix(.97642 0 0 .97642 188.53 -53.552)" y1="162.55" x1="-140.06"/>
+<linearGradient id="linearGradient3091" y2="68.546" gradientUnits="userSpaceOnUse" x2="8.878" gradientTransform="matrix(.97642 0 0 .97642 89.254 -30.605)" y1="68.546" x1="-36.688">
+<stop id="stop2894" stop-color="#fff" offset="0"/>
+<stop id="stop2896" stop-color="#fff" stop-opacity="0" offset="1"/>
+</linearGradient>
+</defs>
+<path id="path2876" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-4.5612 4.005-7.5066 8.645-7.5066 14.585 0 15.42 119.34 16.23 119.34 0 0-5.94-2.94-10.58-7.5-14.585-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" stroke-opacity=".20732" stroke="#000" stroke-width="1.9528"/>
+<path id="path2276" d="m50.893 3.2813v-2.7947 2.7947z" fill-opacity=".75688" fill="#fff"/>
+<path id="path2882" fill="url(#linearGradient3091)" d="m63.806 2.319c-3.601 0.046-7.123 1.1624-10.375 3.5395 2.947-1.8678 7.703-2.1105 10.896-1.8186 15.05 1.3757 34.238 22.173 32.403 43.103-0.909 10.362-5.947 18.101-12.877 23.19 7.479-5.064 12.989-13.063 13.944-23.953 1.836-20.93-16.89-44.28-33.991-44.061z"/>
+<path id="path2900" fill="url(#linearGradient3088)" d="m79.147 75.901c-0.047 0.023-0.098 0.036-0.145 0.058 0.061 2.244 0.461 4.169 1.104 5.258 1.924 3.258 6.347 6.03 14.058 8.219 8.596 2.44 15.366 4.944 20.216 9.208 4 3.516 6.69 7.546 7.09 12.576 0.02-0.16 0.05-0.33 0.05-0.49 0-5.66-2.8-10.07-7.14-13.887-4.85-4.264-11.62-6.768-20.216-9.208-7.711-2.188-12.134-4.961-14.058-8.219-0.469-0.794-0.786-2.031-0.959-3.515z"/>
+<path id="path2913" fill="url(#linearGradient3085)" d="m50.41 75.901c0.047 0.023 0.098 0.036 0.146 0.058-0.062 2.244-0.461 4.169-1.104 5.258-1.925 3.258-6.348 6.03-14.058 8.219-8.594 2.44-15.366 4.944-20.215 9.208-4.001 3.516-6.6885 7.546-7.0872 12.576-0.0254-0.16-0.0581-0.33-0.0581-0.49 0-5.66 2.8033-10.07 7.1453-13.887 4.849-4.264 11.621-6.768 20.215-9.208 7.71-2.188 12.133-4.961 14.058-8.219 0.469-0.794 0.785-2.031 0.958-3.515z"/>
+<path id="path2923" opacity=".19262" d="m64.127 1.3826c-5.701 0.0729-11.221 2.7578-15.745 9.0324-12.471 3.341-15.686 21.062-16.782 33.381-1.393 15.652 6.616 25.489 17.514 29.72-0.158 1.776-0.554 3.289-1.098 4.211-2.048 3.467-6.698 6.474-14.738 8.757-8.97 2.547-16.086 5.022-21.237 9.551-1.107 0.973-2.0933 1.995-2.9906 3.051 34.74 13.124 77.188-5.218 111.4 1.374-1.13-1.565-2.51-3.039-4.08-4.425-5.1-4.479-12.21-7.11-21.242-9.673-8.1-2.3-12.746-5.212-14.768-8.635-0.675-1.143-1.095-3.167-1.16-5.523 9.917-4.632 17.762-13.575 18.919-26.76 1.836-20.931-16.891-44.28-33.992-44.061z" fill="url(#linearGradient3082)"/>
</svg>
diff --git a/icons/view-media-artist128.png b/icons/view-media-artist128.png
deleted file mode 100644
index 69422c7..0000000
Binary files a/icons/view-media-artist128.png and /dev/null differ
diff --git a/icons/view-media-artist16.png b/icons/view-media-artist16.png
deleted file mode 100644
index c974107..0000000
Binary files a/icons/view-media-artist16.png and /dev/null differ
diff --git a/icons/view-media-artist22.png b/icons/view-media-artist22.png
deleted file mode 100644
index 014a1c3..0000000
Binary files a/icons/view-media-artist22.png and /dev/null differ
diff --git a/icons/view-media-artist32.png b/icons/view-media-artist32.png
deleted file mode 100644
index bb21b03..0000000
Binary files a/icons/view-media-artist32.png and /dev/null differ
diff --git a/icons/view-media-artist48.png b/icons/view-media-artist48.png
deleted file mode 100644
index e8e3ac5..0000000
Binary files a/icons/view-media-artist48.png and /dev/null differ
diff --git a/icons/view-media-artist64.png b/icons/view-media-artist64.png
deleted file mode 100644
index 2bfa381..0000000
Binary files a/icons/view-media-artist64.png and /dev/null differ
diff --git a/icons/view-media-repeat16.png b/icons/view-media-repeat16.png
index 8a52e1e..87a938a 100644
Binary files a/icons/view-media-repeat16.png and b/icons/view-media-repeat16.png differ
diff --git a/icons/view-media-repeat22.png b/icons/view-media-repeat22.png
index 7f24422..41387a7 100644
Binary files a/icons/view-media-repeat22.png and b/icons/view-media-repeat22.png differ
diff --git a/icons/view-media-repeat24.png b/icons/view-media-repeat24.png
new file mode 100644
index 0000000..161e72b
Binary files /dev/null and b/icons/view-media-repeat24.png differ
diff --git a/icons/view-media-repeat32.png b/icons/view-media-repeat32.png
index 705fc2c..07d70f1 100644
Binary files a/icons/view-media-repeat32.png and b/icons/view-media-repeat32.png differ
diff --git a/icons/view-media-repeat48.png b/icons/view-media-repeat48.png
index f0eacb1..739f20f 100644
Binary files a/icons/view-media-repeat48.png and b/icons/view-media-repeat48.png differ
diff --git a/icons/view-media-repeat64.png b/icons/view-media-repeat64.png
new file mode 100644
index 0000000..7eb3324
Binary files /dev/null and b/icons/view-media-repeat64.png differ
diff --git a/icons/view-media-shuffle16.png b/icons/view-media-shuffle16.png
index 12f64ef..9b461db 100644
Binary files a/icons/view-media-shuffle16.png and b/icons/view-media-shuffle16.png differ
diff --git a/icons/view-media-shuffle22.png b/icons/view-media-shuffle22.png
index dc99b9e..2f2af7d 100644
Binary files a/icons/view-media-shuffle22.png and b/icons/view-media-shuffle22.png differ
diff --git a/icons/view-media-shuffle24.png b/icons/view-media-shuffle24.png
new file mode 100644
index 0000000..163236d
Binary files /dev/null and b/icons/view-media-shuffle24.png differ
diff --git a/icons/view-media-shuffle32.png b/icons/view-media-shuffle32.png
index c094344..9e72752 100644
Binary files a/icons/view-media-shuffle32.png and b/icons/view-media-shuffle32.png differ
diff --git a/icons/view-media-shuffle48.png b/icons/view-media-shuffle48.png
index a7865f8..018fb33 100644
Binary files a/icons/view-media-shuffle48.png and b/icons/view-media-shuffle48.png differ
diff --git a/icons/view-media-shuffle64.png b/icons/view-media-shuffle64.png
new file mode 100644
index 0000000..a1f6f81
Binary files /dev/null and b/icons/view-media-shuffle64.png differ
diff --git a/mac/CMakeLists.txt b/mac/CMakeLists.txt
index 5ee4e51..471b7e8 100644
--- a/mac/CMakeLists.txt
+++ b/mac/CMakeLists.txt
@@ -1,5 +1,15 @@
install(FILES ${MACOSX_BUNDLE_ICON_FILE} DESTINATION ${MACOSX_BUNDLE_RESOURCES})
+# Qt translation files...
+file(GLOB qt_trans ${QT_TRANSLATIONS_DIR}/qt_*.qm)
+foreach(qm ${qt_trans})
+ if (NOT ${qm} MATCHES "(${QT_TRANSLATIONS_DIR}/qt_help*)")
+ list(APPEND qt_translations "${qm}")
+ endif (NOT ${qm} MATCHES "(${QT_TRANSLATIONS_DIR}/qt_help*)")
+endforeach(qm ${qt_trans})
+install(FILES ${qt_translations} DESTINATION ${MACOSX_BUNDLE_RESOURCES}/translations/)
+
if (CANTATA_OXYGEN_DIR)
add_subdirectory(icons)
endif (CANTATA_OXYGEN_DIR)
+
diff --git a/mac/Info.plist.cmake b/mac/Info.plist.cmake
new file mode 100755
index 0000000..1e2bb90
--- /dev/null
+++ b/mac/Info.plist.cmake
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>@MACOSX_BUNDLE_EXECUTABLE@</string>
+ <key>CFBundleGetInfoString</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string>@MACOSX_BUNDLE_ICON_FILE@</string>
+ <key>CFBundleIdentifier</key>
+ <string>@PROJECT_REV_URL@</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleLongVersionString</key>
+ <string>@MACOSX_BUNDLE_LONG_VERSION_STRING@</string>
+ <key>CFBundleName</key>
+ <string>@MACOSX_BUNDLE_BUNDLE_NAME@</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>@MACOSX_BUNDLE_SHORT_VERSION_STRING@</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string></string>
+ <key>CSResourcesFileMapped</key>
+ <true/>
+ <key>LSRequiresCarbon</key>
+ <true/>
+ <key>NSHumanReadableCopyright</key>
+ <string></string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+ <key>NSHighResolutionCapable</key>
+ <string>True</string>
+</dict>
+</plist>
diff --git a/mac/dmg/DS_Store.in b/mac/dmg/DS_Store.in
new file mode 100644
index 0000000..9383683
Binary files /dev/null and b/mac/dmg/DS_Store.in differ
diff --git a/mac/dmg/background.png b/mac/dmg/background.png
new file mode 100644
index 0000000..aaa4256
Binary files /dev/null and b/mac/dmg/background.png differ
diff --git a/mac/dmg/background.xcf b/mac/dmg/background.xcf
new file mode 100644
index 0000000..370094f
Binary files /dev/null and b/mac/dmg/background.xcf differ
diff --git a/mac/dmg/create-dmg.sh.in b/mac/dmg/create-dmg.sh.in
new file mode 100755
index 0000000..b4c373a
--- /dev/null
+++ b/mac/dmg/create-dmg.sh.in
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# This script has been copied, and modified from the orignal create-dmg.sh
+# in Clemtine 1.2.3 - which in turn was taken from Tomahawk.
+#
+# author: max at last.fm, muesli at tomahawk-player.org
+# brief: Produces a compressed DMG from a bundle directory
+
+tempFolder="dmg/@MACOSX_BUNDLE_BUNDLE_NAME@"
+tempFile=dmg/temp.dmg
+dmgFileName="@MACOSX_BUNDLE_BUNDLE_NAME at -@CANTATA_VERSION_WITH_SPIN at .dmg"
+
+rm -rf "$tempFolder"
+rm -f "$dmgFileName" "$tempFile"
+
+# Create folder structure for disk image
+mkdir -p "$tempFolder/.background"
+cp @CMAKE_CURRENT_SOURCE_DIR@/mac/dmg/background.png "$tempFolder/.background/background.png"
+cp @CMAKE_CURRENT_SOURCE_DIR@/mac/dmg/DS_Store.in "$tempFolder/.DS_Store"
+chmod go-rwx "$tempFolder/.DS_Store"
+ln -s /Applications "$tempFolder/Applications"
+cp -R "@CMAKE_INSTALL_PREFIX@/@MACOSX_BUNDLE_BUNDLE_NAME at .app" "$tempFolder"
+
+# Create DMG file
+hdiutil makehybrid -hfs -hfs-volume-name @MACOSX_BUNDLE_BUNDLE_NAME@ -hfs-openfolder "$tempFolder" "$tempFolder" -o "$tempFile"
+hdiutil convert -format UDZO -imagekey zlib-level=9 "$tempFile" -o "$dmgFileName"
+
+# Remove temporary files
+rm -rf "$tempFolder"
+rm -f "$tempFile"
diff --git a/context/onlineview.cpp b/mac/dockmenu.cpp
similarity index 54%
copy from context/onlineview.cpp
copy to mac/dockmenu.cpp
index 9b0d7dd..3dfbaed 100644
--- a/context/onlineview.cpp
+++ b/mac/dockmenu.cpp
@@ -21,32 +21,25 @@
* Boston, MA 02110-1301, USA.
*/
-#include "onlineview.h"
-#include "models/onlineservicesmodel.h"
+#include "dockmenu.h"
+#include "gui/stdactions.h"
+#include "mpd/mpdstatus.h"
#include "support/localize.h"
-OnlineView::OnlineView(QWidget *p)
- : View(p)
+DockMenu::DockMenu(QWidget *p)
+ : QMenu(p)
{
- setStandardHeader(i18n("Song Information"));
- int imageSize=fontMetrics().height()*18;
- setPicSize(QSize(imageSize, imageSize));
+ setAsDockMenu();
+ addAction(StdActions::self()->prevTrackAction);
+ playPauseAction=addAction(i18n("Play"));
+ addAction(StdActions::self()->stopPlaybackAction);
+ addAction(StdActions::self()->stopAfterCurrentTrackAction);
+ addAction(StdActions::self()->nextTrackAction);
+ connect(playPauseAction, SIGNAL(triggered()), StdActions::self()->playPauseTrackAction, SIGNAL(triggered()));
}
-void OnlineView::update(const Song &song, bool force)
+void DockMenu::update(MPDStatus * const status)
{
- if (force || song!=currentSong) {
- currentSong=song;
- if (!isVisible()) {
- needToUpdate=true;
- return;
- }
- setHeader(song.describe(true));
- Covers::Image cImg=OnlineServicesModel::self()->readImage(song);
- if (!cImg.img.isNull()) {
- setHtml(createPicTag(cImg.img, cImg.fileName));
- } else {
- setHtml(QString());
- }
- }
+ playPauseAction->setEnabled(status->playlistLength()>0);
+ playPauseAction->setText(MPDState_Playing==status->state() ? i18n("Pause") : i18n("Play"));
}
diff --git a/scrobbling/pausabletimer.h b/mac/dockmenu.h
similarity index 78%
copy from scrobbling/pausabletimer.h
copy to mac/dockmenu.h
index f769981..b1d5ac5 100644
--- a/scrobbling/pausabletimer.h
+++ b/mac/dockmenu.h
@@ -21,22 +21,24 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef PAUSABLETIMER_H
-#define PAUSABLETIMER_H
+#ifndef DOCKMENU_H
+#define DOCKMENU_H
-#include <QTimer>
-#include <QElapsedTimer>
+#include <QMenu>
-class PausableTimer : public QTimer
+class QAction;
+class MPDStatus;
+
+class DockMenu : public QMenu
{
public:
- PausableTimer();
- void start();
- void pause();
+ DockMenu(QWidget *w);
+ virtual ~DockMenu() { }
+
+ void update(MPDStatus * const status);
private:
- QElapsedTimer elapsedTimer;
- qint64 timePaused;
+ QAction *playPauseAction;
};
#endif
diff --git a/mac/icons/CMakeLists.txt b/mac/icons/CMakeLists.txt
index 18052e1..2ee54c7 100644
--- a/mac/icons/CMakeLists.txt
+++ b/mac/icons/CMakeLists.txt
@@ -197,9 +197,23 @@ set(OXYGEN_ICONS
32x32/actions/go-up.png
22x22/actions/go-up.png
16x16/actions/go-up.png
+64x64/actions/go-down.png
+48x48/actions/go-down.png
32x32/actions/go-down.png
22x22/actions/go-down.png
16x16/actions/go-down.png
+22x22/apps/clock.png
+48x48/apps/clock.png
+32x32/apps/clock.png
+64x64/apps/clock.png
+16x16/apps/clock.png
+48x48/actions/document-save-as.png
+48x48/mimetypes/inode-directory.png
+64x64/mimetypes/inode-directory.png
+48x48/mimetypes/audio-x-generic.png
+64x64/mimetypes/audio-x-generic.png
+48x48/places/document-multiple.png
+64x64/places/document-multiple.png
)
foreach(ICON ${OXYGEN_ICONS})
diff --git a/mac/icons/README b/mac/icons/README
index a00cf2f..a62b9c3 100644
--- a/mac/icons/README
+++ b/mac/icons/README
@@ -1,6 +1,7 @@
-The icons included here are (apart from the cantata icon) are taken from the
-Oxygen icon project (http://www.oxygen-icons.org/). Only the minimum set of
+The icons included here are (apart from the cantata icon) are taken from the
+Oxygen icon project (http://www.oxygen-icons.org/). Only the minimum set of
icons needed for Cantata are included.
-Oxygen icon theme is dual licensed. To facilitate this, a copy of each license
+Oxygen icon theme is dual licensed. To facilitate this, a copy of each license
is included.
+
diff --git a/mac/icons/index.theme b/mac/icons/index.theme
index 86ac146..5f4a563 100644
--- a/mac/icons/index.theme
+++ b/mac/icons/index.theme
@@ -17,7 +17,7 @@ PanelSizes=16,22,32,48,64,128,256
DialogDefault=32
DialogSizes=16,22,32,48,64,128,256
-Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/mimetypes,22x22/places,22x22/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/status,64x64/apps,64x64/categories,64x64/devices,64x64/status,128x128/categories,128x128/devices,256x256/categories,256x256/devices,scalable/apps
+Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/mimetypes,22x22/places,22x22/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/mimetypes,48x48/places,48x48/status,64x64/apps,64x64/categories,64x64/devices,64x64/mimetypes,64x64/places,64x64/status,128x128/categories,128x128/devices,256x256/categories,256x256/devices,scalable/apps
[16x16/actions]
Size=16
@@ -149,6 +149,16 @@ Size=48
Context=Devices
Type=Threshold
+[48x48/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Threshold
+
+[48x48/places]
+Size=48
+Context=Places
+Type=Threshold
+
[48x48/status]
Size=48
Context=Status
@@ -169,6 +179,16 @@ Size=64
Context=Devices
Type=Threshold
+[64x64/mimetypes]
+Size=64
+Context=MimeTypes
+Type=Threshold
+
+[64x64/places]
+Size=64
+Context=Places
+Type=Threshold
+
[64x64/status]
Size=64
Context=Status
diff --git a/widgets/sizegrip.h b/mac/macnotify.h
similarity index 82%
copy from widgets/sizegrip.h
copy to mac/macnotify.h
index 139ed68..7087d1e 100644
--- a/widgets/sizegrip.h
+++ b/mac/macnotify.h
@@ -21,15 +21,15 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef SIZEGRIP_H
-#define SIZEGRIP_H
+#ifndef MACNOTIFY_H
+#define MACNOTIFY_H
-#include <QWidget>
+class QString;
+class QImage;
-class SizeGrip : public QWidget
+namespace MacNotify
{
-public:
- explicit SizeGrip(QWidget *parent = 0);
-};
+ extern void showMessage(const QString &title, const QString &text, const QImage &img);
+}
#endif
diff --git a/mac/macnotify.mm b/mac/macnotify.mm
new file mode 100644
index 0000000..d221827
--- /dev/null
+++ b/mac/macnotify.mm
@@ -0,0 +1,84 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "macnotify.h"
+#include "config.h"
+#include <QString>
+#include <QSysInfo>
+#ifdef QT_MAC_EXTRAS_FOUND
+#include <qmacfunctions.h>
+#include <QImage>
+#include <QPixmap>
+#endif
+#include <Foundation/NSUserNotification.h>
+
+ at interface UserNotificationItem : NSObject<NSUserNotificationCenterDelegate> { }
+
+- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification;
+ at end
+
+ at implementation UserNotificationItem
+- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification {
+ Q_UNUSED(center);
+ Q_UNUSED(notification);
+ return YES;
+}
+ at end
+
+class UserNotificationItemClass
+{
+public:
+ UserNotificationItemClass() {
+ item = [UserNotificationItem alloc];
+ if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) {
+ [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:item];
+ }
+ }
+ ~UserNotificationItemClass() {
+ if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) {
+ [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:nil];
+ }
+ [item release];
+ }
+ UserNotificationItem *item;
+};
+
+void MacNotify::showMessage(const QString &title, const QString &text, const QImage &img)
+{
+ if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) {
+ static UserNotificationItemClass *n=0;
+ if (!n) {
+ n=new UserNotificationItemClass();
+ }
+
+ NSUserNotification *userNotification = [[[NSUserNotification alloc] init] autorelease];
+ userNotification.title = title.toNSString();
+ userNotification.informativeText = text.toNSString();
+ #ifdef QT_MAC_EXTRAS_FOUND
+ userNotification.contentImage = QtMac::toNSImage(QPixmap::fromImage(img));
+ #else
+ Q_UNUSED(img)
+ #endif
+ [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];
+ }
+}
diff --git a/mac/powermanagement.cpp b/mac/powermanagement.cpp
new file mode 100644
index 0000000..80864bc
--- /dev/null
+++ b/mac/powermanagement.cpp
@@ -0,0 +1,70 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "powermanagement.h"
+#include "support/globalstatic.h"
+#include "mpd/mpdstatus.h"
+#include <Carbon/Carbon.h>
+#include <IOKit/pwr_mgt/IOPMLib.h>
+#include <IOKit/IOMessage.h>
+
+GLOBAL_STATIC(PowerManagement, instance)
+
+static void powerEventCallback(void *rootPort, io_service_t, natural_t msg, void *arg)
+{
+ switch (msg) {
+ case kIOMessageSystemWillSleep:
+ IOAllowPowerChange(*(io_connect_t *) rootPort, (long)arg);
+ break;
+ case kIOMessageSystemHasPoweredOn:
+ PowerManagement::self()->emitResuming();
+ break;
+ case kIOMessageCanSystemSleep:
+ if (PowerManagement::self()->inhibitSuspend() && MPDState_Playing==MPDStatus::self()->state()) {
+ IOCancelPowerChange(*(io_connect_t *) rootPort, (long)arg);
+ } else {
+ IOAllowPowerChange(*(io_connect_t *) rootPort, (long)arg);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+PowerManagement::PowerManagement()
+ : inhibitSuspendWhilstPlaying(false)
+{
+ static io_connect_t rootPort;
+ IONotificationPortRef notificationPort;
+ io_object_t notifier;
+
+ rootPort = IORegisterForSystemPower(&rootPort, ¬ificationPort, powerEventCallback, ¬ifier);
+ if (rootPort) {
+ CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode);
+ }
+}
+
+void PowerManagement::emitResuming()
+{
+ emit resuming();
+}
diff --git a/tags/taghelper.h b/mac/powermanagement.h
similarity index 69%
copy from tags/taghelper.h
copy to mac/powermanagement.h
index ef72f3b..e255be3 100644
--- a/tags/taghelper.h
+++ b/mac/powermanagement.h
@@ -21,36 +21,28 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef TAG_HELPER_H
-#define TAG_HELPER_H
+#ifndef POWERMANAGEMENT_H
+#define POWERMANAGEMENT_H
#include <QObject>
-#include <QByteArray>
-
-class QLocalSocket;
-
-class TagHelper : public QObject
+
+class PowerManagement : public QObject
{
Q_OBJECT
public:
- static void enableDebug();
+ static PowerManagement * self();
+ PowerManagement();
- TagHelper(const QString &sockName, int parent);
- ~TagHelper();
+ void setInhibitSuspend(bool i) { inhibitSuspendWhilstPlaying=i; }
+ bool inhibitSuspend() const { return inhibitSuspendWhilstPlaying; }
+ void emitResuming();
-private Q_SLOTS:
- void dataReady();
- void checkParent();
-
-private:
- void process();
+Q_SIGNALS:
+ void resuming();
private:
- int parentPid;
- QLocalSocket *socket;
- qint32 dataSize;
- QByteArray data;
+ bool inhibitSuspendWhilstPlaying;
};
#endif
diff --git a/models/albumsmodel.cpp b/models/albumsmodel.cpp
index 890a01f..146fd15 100644
--- a/models/albumsmodel.cpp
+++ b/models/albumsmodel.cpp
@@ -54,53 +54,6 @@ static int sortAlbums=AlbumsModel::Sort_AlbumArtist;
GLOBAL_STATIC(AlbumsModel, instance)
-#ifndef ENABLE_UBUNTU
-static MusicLibraryItemAlbum::CoverSize coverSize=MusicLibraryItemAlbum::CoverMedium;
-static QPixmap *theDefaultIcon=0;
-static QSize itemSize;
-static bool iconMode=true;
-
-int AlbumsModel::iconSize()
-{
- return MusicLibraryItemAlbum::iconSize(coverSize, iconMode);
-}
-
-static int stdIconSize()
-{
- return iconMode ? 128 : MusicLibraryItemAlbum::iconSize(coverSize);
-}
-
-void AlbumsModel::setIconMode(bool u)
-{
- if (iconMode!=u && theDefaultIcon) {
- delete theDefaultIcon;
- theDefaultIcon=0;
- }
- iconMode=u;
-}
-
-MusicLibraryItemAlbum::CoverSize AlbumsModel::currentCoverSize()
-{
- return coverSize;
-}
-
-void AlbumsModel::setItemSize(const QSize &sz)
-{
- itemSize=sz;
-}
-
-void AlbumsModel::setCoverSize(MusicLibraryItemAlbum::CoverSize size)
-{
- if (size!=coverSize) {
- if (theDefaultIcon) {
- delete theDefaultIcon;
- theDefaultIcon=0;
- }
- coverSize=size;
- }
-}
-#endif
-
AlbumsModel::Sort AlbumsModel::toSort(const QString &str)
{
for (int i=0; i<=Sort_YearArtist; ++i) {
@@ -225,32 +178,17 @@ QVariant AlbumsModel::data(const QModelIndex &index, int role) const
QString cover=al->cover();
return cover.isEmpty() ? constDefaultCover : cover;
}
- #else
- case Cantata::Role_Image:
- case Qt::DecorationRole: {
- int iSize=iconSize();
- if (iSize) {
- QPixmap *pix=al->cover();
- if (pix) {
- return *pix;
- }
- } else if (Qt::DecorationRole==role) {
- return Icons::self()->albumIcon;
- }
-
- if (!theDefaultIcon) {
- int cSize=iSize;
- int stdSize=stdIconSize();
- if (0==cSize) {
- cSize=stdSize=22;
- }
- theDefaultIcon = new QPixmap(Icons::self()->albumIcon.pixmap(stdSize, stdSize)
- .scaled(QSize(cSize, cSize), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
- }
- return *theDefaultIcon;
- }
+ #endif
+ case Cantata::Role_ListImage:
+ return true;
+ #ifndef ENABLE_UBUNTU
+ case Qt::DecorationRole:
+ return Icons::self()->albumIcon;
#endif
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return 0==al->songs.count()
? QString()
: (al->artist+QLatin1Char('\n')+al->albumDisplay()+QLatin1Char('\n')+
@@ -268,19 +206,15 @@ QVariant AlbumsModel::data(const QModelIndex &index, int role) const
return al->albumDisplay();
case Cantata::Role_BriefMainText:
return al->album;
- #ifndef ENABLE_UBUNTU
- case Cantata::Role_ImageSize:
- return iconSize();
- case Qt::SizeHintRole:
- if (!itemSize.isNull()) {
- return itemSize;
- }
- break;
- #endif
case Cantata::Role_SubText:
return al->artist;
case Cantata::Role_TitleText:
return i18nc("Album by Artist", "%1 by %2", al->album, al->artist);
+ case Cantata::Role_CoverSong: {
+ QVariant v;
+ v.setValue<Song>(al->coverSong());
+ return v;
+ }
}
} else {
SongItem *si=static_cast<SongItem *>(item);
@@ -291,11 +225,17 @@ QVariant AlbumsModel::data(const QModelIndex &index, int role) const
#ifdef ENABLE_UBUNTU
case Cantata::Role_Image:
return QString();
- #else
+ #endif
+ case Cantata::Role_ListImage:
+ return false;
+ #ifndef ENABLE_UBUNTU
case Qt::DecorationRole:
return Song::Playlist==si->type ? Icons::self()->playlistIcon : Icons::self()->audioFileIcon;
#endif
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return si->toolTip();
case Cantata::Role_MainText:
case Qt::DisplayRole:
@@ -383,14 +323,19 @@ QMimeData * AlbumsModel::mimeData(const QModelIndexList &indexes) const
}
#endif
-void AlbumsModel::update(const MusicLibraryItemRoot *root)
+void AlbumsModel::update(const MusicLibraryItemRoot *root, bool incremental)
{
if (!enabled) {
return;
}
bool changesMade=false;
- bool resettingModel=items.isEmpty() || 0==root->childCount();
+ bool resettingModel=!incremental || items.isEmpty() || 0==root->childCount();
+
+ if (!incremental) {
+ clear();
+ }
+
if (resettingModel) {
beginResetModel();
}
@@ -446,7 +391,10 @@ void AlbumsModel::update(const MusicLibraryItemRoot *root)
if (!found) {
changesMade=true;
- AlbumItem *a=new AlbumItem(artist, albumItem->data(), albumId, albumItem->year());
+ AlbumItem *a=new AlbumItem(artist, albumItem->data(), albumId,
+ artistItem->hasSort() ? artistItem->sortString() : QString(),
+ albumItem->hasSort() ? albumItem->sortString() : QString(),
+ albumItem->year());
a->setSongs(albumItem);
a->genres=albumItem->genres();
a->updated=true;
@@ -486,9 +434,10 @@ void AlbumsModel::update(const MusicLibraryItemRoot *root)
void AlbumsModel::setCover(const Song &song, const QImage &img, const QString &file)
{
#ifdef ENABLE_UBUNTU
- if (img.isNull() || file.isEmpty()) {
- return;
+ if (img.isNull()) {
+ if (!file.isEmpty()) return; //If empty, we need to execute the stuff below to set m_coverRequested to false
}
+
QList<AlbumItem *>::Iterator it=items.begin();
QList<AlbumItem *>::Iterator end=items.end();
QString artist=MusicLibraryItemRoot::artistName(song);
@@ -497,10 +446,12 @@ void AlbumsModel::setCover(const Song &song, const QImage &img, const QString &f
for (int row=0; it!=end; ++it, ++row) {
if ((*it)->artist==artist && (*it)->albumId()==albumId) {
if ((*it)->coverRequested) {
- (*it)->coverFile="file://"+file;
(*it)->coverRequested=false;
- QModelIndex idx=index(row, 0, QModelIndex());
- emit dataChanged(idx, idx);
+ if (!file.isEmpty()) {
+ (*it)->coverFile="file://"+file;
+ QModelIndex idx=index(row, 0, QModelIndex());
+ emit dataChanged(idx, idx);
+ }
}
return;
}
@@ -514,11 +465,11 @@ void AlbumsModel::setCover(const Song &song, const QImage &img, const QString &f
void AlbumsModel::coverLoaded(const Song &song, int s)
{
+ Q_UNUSED(s)
#ifdef ENABLE_UBUNTU
Q_UNUSED(song)
- Q_UNUSED(s)
#else
- if (s==iconSize() && !song.isArtistImageRequest()) {
+ if (!song.isArtistImageRequest()) {
QList<AlbumItem *>::Iterator it=items.begin();
QList<AlbumItem *>::Iterator end=items.end();
const QString &albumArtist=song.albumArtist();
@@ -572,7 +523,7 @@ void AlbumsModel::setEnabled(bool e)
#else
connect(Covers::self(), SIGNAL(loaded(Song,int)), this, SLOT(coverLoaded(Song,int)));
#endif
- update(MusicLibraryModel::self()->root());
+ update(MusicLibraryModel::self()->root(), false);
} else {
clear();
#ifdef ENABLE_UBUNTU
@@ -598,9 +549,10 @@ void AlbumsModel::setAlbumSort(int s)
}
}
-AlbumsModel::AlbumItem::AlbumItem(const QString &ar, const QString &al, const QString &i, quint16 y)
+AlbumsModel::AlbumItem::AlbumItem(const QString &ar, const QString &al, const QString &i, const QString &arSort, const QString &alSort, quint16 y)
: artist(ar)
, album(al)
+ , albumSortString(alSort)
, id(i)
, year(y)
, updated(false)
@@ -611,8 +563,10 @@ AlbumsModel::AlbumItem::AlbumItem(const QString &ar, const QString &al, const QS
, coverRequested(false)
#endif
{
- if (artist.startsWith(QLatin1String("The "))) {
- nonTheArtist=artist.mid(4);
+ if (!arSort.isEmpty()) {
+ artistSortString=arSort;
+ } else if (artist.startsWith(QLatin1String("The "))) {
+ artistSortString=artist.mid(4);
}
}
@@ -625,8 +579,8 @@ bool AlbumsModel::AlbumItem::operator<(const AlbumItem &o) const
{
switch (sortAlbums) {
default:
- case Sort_AlbumArtist: {
- int compare=album.localeAwareCompare(o.album);
+ case Sort_AlbumArtist: {
+ int compare=sortAlbum().localeAwareCompare(o.sortAlbum());
if (0!=compare) {
return compare<0;
}
@@ -637,7 +591,7 @@ bool AlbumsModel::AlbumItem::operator<(const AlbumItem &o) const
return year==o.year ? id.compare(o.id)<0 : year<o.year;
}
case Sort_AlbumYear: {
- int compare=album.localeAwareCompare(o.album);
+ int compare=sortAlbum().localeAwareCompare(o.sortAlbum());
if (0!=compare) {
return compare<0;
}
@@ -652,7 +606,7 @@ bool AlbumsModel::AlbumItem::operator<(const AlbumItem &o) const
if (0!=compare) {
return compare<0;
}
- compare=album.localeAwareCompare(o.album);
+ compare=sortAlbum().localeAwareCompare(o.sortAlbum());
if (0!=compare) {
return compare<0;
}
@@ -666,12 +620,12 @@ bool AlbumsModel::AlbumItem::operator<(const AlbumItem &o) const
if (year!=o.year) {
return year<o.year;
}
- compare=album.localeAwareCompare(o.album);
+ compare=sortAlbum().localeAwareCompare(o.sortAlbum());
return 0==compare ? id.compare(o.id)<0 : compare<0;
}
case Sort_YearAlbum:
if (year==o.year) {
- int compare=album.localeAwareCompare(o.album);
+ int compare=sortAlbum().localeAwareCompare(o.sortAlbum());
if (0!=compare) {
return compare<0;
}
@@ -685,7 +639,7 @@ bool AlbumsModel::AlbumItem::operator<(const AlbumItem &o) const
if (0!=compare) {
return compare<0;
}
- compare=album.localeAwareCompare(o.album);
+ compare=sortAlbum().localeAwareCompare(o.sortAlbum());
return 0==compare ? id.compare(o.id)<0 : compare<0;
}
return year<o.year;
@@ -745,14 +699,6 @@ QString AlbumsModel::AlbumItem::cover()
return coverFile;
}
-#else
-QPixmap * AlbumsModel::AlbumItem::cover()
-{
- if (Song::SingleTracks!=type && songs.count()) {
- return Covers::self()->get(coverSong(), iconSize());
- }
- return 0;
-}
#endif
const Song & AlbumsModel::AlbumItem::coverSong()
diff --git a/models/albumsmodel.h b/models/albumsmodel.h
index a28c529..023cf18 100644
--- a/models/albumsmodel.h
+++ b/models/albumsmodel.h
@@ -40,14 +40,6 @@ class AlbumsModel : public ActionModel
Q_OBJECT
public:
- #ifndef ENABLE_UBUNTU
- static MusicLibraryItemAlbum::CoverSize currentCoverSize();
- static void setCoverSize(MusicLibraryItemAlbum::CoverSize size);
- static int iconSize();
- static void setItemSize(const QSize &sz);
- static void setIconMode(bool u);
- #endif
-
enum Sort
{
Sort_AlbumArtist,
@@ -84,7 +76,7 @@ public:
struct AlbumItem : public Item
{
- AlbumItem(const QString &ar, const QString &al, const QString &i, quint16 y);
+ AlbumItem(const QString &ar, const QString &al, const QString &i, const QString &arSort, const QString &alSort, quint16 y);
virtual ~AlbumItem();
bool operator<(const AlbumItem &o) const;
bool isAlbum() { return true; }
@@ -95,18 +87,18 @@ public:
void updateStats();
#ifdef ENABLE_UBUNTU
QString cover();
- #else
- QPixmap *cover();
#endif
bool isSingleTracks() const { return Song::SingleTracks==type; }
const SongItem *getCueFile() const;
QString albumDisplay() const { return Song::displayAlbum(album, year); }
- const QString & sortArtist() const { return nonTheArtist.isEmpty() ? artist : nonTheArtist; }
+ const QString & sortArtist() const { return artistSortString.isEmpty() ? artist : artistSortString; }
+ const QString & sortAlbum() const { return albumSortString.isEmpty() ? album : albumSortString; }
const QString & albumId() const { return id.isEmpty() ? album : id; }
const Song & coverSong();
QString artist;
- QString nonTheArtist;
+ QString artistSortString;
QString album;
+ QString albumSortString;
QString id;
quint16 year;
QList<SongItem *> songs;
@@ -154,7 +146,7 @@ public Q_SLOTS:
void coverLoaded(const Song &song, int s);
// Touch version...
void setCover(const Song &song, const QImage &img, const QString &file);
- void update(const MusicLibraryItemRoot *root);
+ void update(const MusicLibraryItemRoot *root, bool incremental=true);
private:
bool enabled;
diff --git a/models/devicesmodel.cpp b/models/devicesmodel.cpp
index 8b4430b..5e0a3df 100644
--- a/models/devicesmodel.cpp
+++ b/models/devicesmodel.cpp
@@ -71,8 +71,14 @@
#include "modeltest.h"
#endif
+
#include <QDebug>
-#define DBUG qDebug()
+static bool debugIsEnabled=false;
+#define DBUG if (debugIsEnabled) qWarning() << metaObject()->className() << __FUNCTION__
+void DevicesModel::enableDebug()
+{
+ debugIsEnabled=true;
+}
QString DevicesModel::fixDevicePath(const QString &path)
{
@@ -180,6 +186,8 @@ QVariant DevicesModel::data(const QModelIndex &index, int role) const
}
return v;
}
+ case Cantata::Role_ListImage:
+ return MusicLibraryItem::Type_Album==item->itemType();
default:
break;
}
@@ -272,11 +280,14 @@ Device * DevicesModel::device(const QString &udi)
void DevicesModel::setCover(const Song &song, const QImage &img, const QString &file)
{
#if defined CDDB_FOUND || defined MUSICBRAINZ5_FOUND
+ DBUG << "Set CDDA cover" << song.file << img.isNull() << file << song.isCdda();
if (song.isCdda()) {
int idx=indexOf(song.title);
if (idx>=0) {
Device *dev=static_cast<Device *>(collections.at(idx));
if (Device::AudioCd==dev->devType()) {
+ DBUG << "Set cover of CD";
+ Covers::self()->updateCover(song, img, file);
static_cast<AudioCdDevice *>(dev)->setCover(song, img, file);
}
}
@@ -290,10 +301,7 @@ void DevicesModel::setCover(const Song &song, const QImage &img, const QString &
void DevicesModel::setCover(const Song &song, const QImage &img)
{
- if (MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize()) {
- return;
- }
-
+ DBUG << "Set album cover" << song.file << img.isNull();
if (img.isNull()) {
return;
}
@@ -309,7 +317,9 @@ void DevicesModel::setCover(const Song &song, const QImage &img)
MusicLibraryItemArtist *artistItem = dev->artist(song, false);
if (artistItem) {
MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
- if (albumItem && albumItem->saveToCache(img)) {
+ if (albumItem) {
+ DBUG << "Set cover of album";
+ Covers::self()->updateCover(song, img, QString());
QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, index(i, 0, QModelIndex())));
emit dataChanged(idx, idx);
}
diff --git a/models/devicesmodel.h b/models/devicesmodel.h
index 7450b81..92bc55f 100644
--- a/models/devicesmodel.h
+++ b/models/devicesmodel.h
@@ -42,6 +42,7 @@ class DevicesModel : public MultiMusicModel
public:
static DevicesModel * self();
+ static void enableDebug();
static QString fixDevicePath(const QString &path);
DevicesModel(QObject *parent = 0);
diff --git a/models/digitallyimported.cpp b/models/digitallyimported.cpp
index b145a1a..0a70230 100644
--- a/models/digitallyimported.cpp
+++ b/models/digitallyimported.cpp
@@ -125,6 +125,22 @@ void DigitallyImported::save()
emit updated();
}
+bool DigitallyImported::isDiUrl(const QString &u) const
+{
+ if (!u.startsWith(QLatin1String("http://"))) {
+ return false;
+ }
+ QUrl url(u);
+ if (!url.host().startsWith(QLatin1String("listen."))) {
+ return false;
+ }
+ QStringList pathParts=url.path().split(QLatin1Char('/'), QString::SkipEmptyParts);
+ if (2!=pathParts.count()) {
+ return false;
+ }
+ return pathParts.at(0)==constPublicValue;
+}
+
QString DigitallyImported::modifyUrl(const QString &u) const
{
if (listenHash.isEmpty()) {
diff --git a/models/digitallyimported.h b/models/digitallyimported.h
index ded116c..bf9b8d9 100644
--- a/models/digitallyimported.h
+++ b/models/digitallyimported.h
@@ -60,6 +60,7 @@ public:
const QString & statusString() const { return status; }
+ bool isDiUrl(const QString &u) const;
QString modifyUrl(const QString &u) const;
public Q_SLOTS:
diff --git a/models/dirviewmodel.cpp b/models/dirviewmodel.cpp
index 2ba697c..6850d83 100644
--- a/models/dirviewmodel.cpp
+++ b/models/dirviewmodel.cpp
@@ -204,6 +204,9 @@ QVariant DirViewModel::data(const QModelIndex &index, int role) const
case Qt::DisplayRole:
return item->data();
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return 0==item->childCount()
? item->data()
: item->data()+"\n"+Plurals::entries(item->childCount());
diff --git a/models/modeltest.cpp b/models/modeltest.cpp
index 4bc757d..9cbc957 100644
--- a/models/modeltest.cpp
+++ b/models/modeltest.cpp
@@ -472,7 +472,7 @@ void ModelTest::data()
*/
void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int end )
{
-// Q_UNUSED(end);
+// Q_UNUSED(end)
// qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString()
// << "current count of parent=" << model->rowCount ( parent ); // << "display of last=" << model->data( model->index(start-1, 0, parent) );
// qDebug() << model->index(start-1, 0, parent) << model->data( model->index(start-1, 0, parent) );
diff --git a/models/musiclibraryitemalbum.cpp b/models/musiclibraryitemalbum.cpp
index d62edf9..d812c7b 100644
--- a/models/musiclibraryitemalbum.cpp
+++ b/models/musiclibraryitemalbum.cpp
@@ -42,92 +42,11 @@
#include <QApplication>
#include <QFontMetrics>
-static MusicLibraryItemAlbum::CoverSize coverSize=MusicLibraryItemAlbum::CoverNone;
#ifdef ENABLE_UBUNTU
static const QString constDefaultCover=QLatin1String("qrc:/album.svg");
-#else
-static QPixmap *theDefaultIcon=0;
#endif
static bool dateSort=false;
-#ifndef ENABLE_UBUNTU
-static QSize iconItemSize;
-
-static inline int adjust(int v)
-{
- if (v>48) {
- static const int constStep=4;
- return (((int)(v/constStep))*constStep)+((v%constStep) ? constStep : 0);
- } else {
- return Icon::stdSize(v);
- }
-}
-
-static int fontHeight=16;
-
-void MusicLibraryItemAlbum::setup()
-{
- fontHeight=QApplication::fontMetrics().height();
-}
-
-int MusicLibraryItemAlbum::iconSize(MusicLibraryItemAlbum::CoverSize sz, bool iconMode)
-{
- if (CoverNone==sz) {
- return 0;
- }
-
- if (iconMode) {
- switch (sz) {
- case CoverSmall: return qMax(76, adjust((4.75*fontHeight)+0.5));
- default:
- case CoverMedium: return qMax(100, adjust((6.25*fontHeight)+0.5));
- case CoverLarge: return qMax(128, adjust(8*fontHeight));
- case CoverExtraLarge: return qMax(160, adjust(10*fontHeight));
- }
- } else {
- switch (sz) {
- case CoverSmall: return qMax(22, adjust((1.375*fontHeight)+0.5));
- default:
- case CoverMedium: return qMax(32, adjust(2*fontHeight));
- case CoverLarge: return qMax(48, adjust(3*fontHeight));
- case CoverExtraLarge: return qMax(64, adjust(4*fontHeight));
- }
- }
-}
-
-int MusicLibraryItemAlbum::iconSize(bool iconMode)
-{
- return MusicLibraryItemAlbum::iconSize(coverSize, iconMode);
-}
-
-void MusicLibraryItemAlbum::setItemSize(const QSize &sz)
-{
- iconItemSize=sz;
-}
-
-QSize MusicLibraryItemAlbum::itemSize()
-{
- return iconItemSize;
-}
-
-MusicLibraryItemAlbum::CoverSize MusicLibraryItemAlbum::currentCoverSize()
-{
- return coverSize;
-}
-
-void MusicLibraryItemAlbum::setCoverSize(MusicLibraryItemAlbum::CoverSize size)
-{
- if (size!=coverSize) {
- if (theDefaultIcon) {
- delete theDefaultIcon;
- theDefaultIcon=0;
- }
- MusicLibraryItemArtist::clearDefaultCover();
- coverSize=size;
- }
-}
-#endif
-
void MusicLibraryItemAlbum::setSortByDate(bool sd)
{
dateSort=sd;
@@ -148,13 +67,13 @@ bool MusicLibraryItemAlbum::lessThan(const MusicLibraryItem *a, const MusicLibra
}
if (!MusicLibraryItemAlbum::sortByDate() || aa->year()==ab->year()) {
- int compare=aa->data().localeAwareCompare(ab->data());
+ int compare=aa->sortString().localeAwareCompare(ab->sortString());
return compare==0 ? aa->id().compare(ab->id())<0 : compare<0;
}
return aa->year()<ab->year();
}
-MusicLibraryItemAlbum::MusicLibraryItemAlbum(const QString &data, const QString &original, const QString &mbId, quint32 year, MusicLibraryItemContainer *parent)
+MusicLibraryItemAlbum::MusicLibraryItemAlbum(const QString &data, const QString &original, const QString &mbId, quint32 year, const QString &sort, MusicLibraryItemContainer *parent)
: MusicLibraryItemContainer(data, parent)
, m_year(year)
, m_yearOfTrack(0xFFFF)
@@ -162,8 +81,11 @@ MusicLibraryItemAlbum::MusicLibraryItemAlbum(const QString &data, const QString
, m_totalTime(0)
, m_numTracks(0)
, m_originalName(original!=data ? original : QString())
+ , m_sortString(sort)
, m_id(mbId)
+ #ifdef ENABLE_UBUNTU
, m_coverRequested(false)
+ #endif
, m_type(Song::Standard)
{
}
@@ -181,94 +103,13 @@ QString MusicLibraryItemAlbum::displayData(bool full) const
const QString & MusicLibraryItemAlbum::cover() const
{
if (Song::SingleTracks!=m_type && m_coverName.isEmpty() && !m_coverRequested && childCount()) {
- MusicLibraryItemSong *firstSong=static_cast<MusicLibraryItemSong*>(childItem(0));
- Song song;
- song.artist=firstSong->song().artist;
- song.albumartist=Song::useComposer() && !firstSong->song().composer().isEmpty() ? firstSong->song().albumArtist() : parentItem()->data();
- song.album=Song::useComposer() ? firstSong->song().album : m_itemData;
- song.year=m_year;
- song.file=firstSong->file();
- song.type=m_type;
- song.setComposer(firstSong->song().composer());
- song.setMbAlbumId(firstSong->song().mbAlbumId());
- m_coverName=Covers::self()->requestImage(song).fileName;
+ m_coverName=Covers::self()->requestImage(coverSong()).fileName;
if (!m_coverName.isEmpty()) {
m_coverRequested=false;
}
}
-
return m_coverName.isEmpty() ? constDefaultCover : m_coverName;
}
-#else
-QPixmap *MusicLibraryItemAlbum::saveToCache(const QImage &img) const
-{
- int size=MusicLibraryItemAlbum::iconSize(largeImages());
- return Covers::self()->saveScaledCover(img.scaled(size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation), coverSong(), size);
-}
-
-const QPixmap & MusicLibraryItemAlbum::cover() const
-{
- int iSize=iconSize(largeImages());
- if (Song::SingleTracks!=m_type && parentItem() && iSize && childCount()) {
- Song song=coverSong();
-
- QPixmap *pix=Covers::self()->getScaledCover(song, iSize);
- if (pix) {
- return *pix;
- }
-
- if (!m_coverRequested) {
- MusicLibraryItemSong *firstSong=static_cast<MusicLibraryItemSong*>(childItem(0));
- song.year=m_year;
- song.file=firstSong->file();
- song.type=m_type;
- song.setComposer(firstSong->song().composer());
- song.setMbAlbumId(firstSong->song().mbAlbumId());
- Covers::Image img;
- MusicLibraryItemRoot *root=parentItem() && parentItem()->parentItem() && MusicLibraryItem::Type_Root==parentItem()->parentItem()->itemType()
- ? static_cast<MusicLibraryItemRoot *>(parentItem()->parentItem()) : 0;
- m_coverRequested=true;
- if (root && !root->useAlbumImages()) {
- // Not showing album images in this model, so dont request any!
- }
- #ifdef ENABLE_DEVICES_SUPPORT
- else if (root && root->isDevice()) {
- song.id=firstSong->song().id;
- static_cast<Device *>(parentItem()->parentItem())->requestCover(song);
- }
- #endif
- #ifdef ENABLE_ONLINE_SERVICES
- else if (root && root->isOnlineService()) {
- img.img=OnlineServicesModel::self()->requestImage(static_cast<OnlineService *>(root)->id(), parentItem()->data(), data(), m_imageUrl);
- }
- #endif
- else {
- img=Covers::self()->requestImage(song);
- }
-
- if (!img.img.isNull()) {
- pix=saveToCache(img.img);
- if (pix) {
- return *pix;
- }
- }
- }
- }
-
- int cSize=iSize;
- if (0==cSize) {
- cSize=22;
- }
-
- if (!theDefaultIcon || theDefaultIcon->width()!=cSize) {
- if (theDefaultIcon) {
- delete theDefaultIcon;
- }
- theDefaultIcon = new QPixmap(Icons::self()->albumIcon.pixmap(cSize, cSize)
- .scaled(QSize(cSize, cSize), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
- }
- return *theDefaultIcon;
-}
#endif
quint32 MusicLibraryItemAlbum::totalTime()
@@ -429,12 +270,35 @@ bool MusicLibraryItemAlbum::containsArtist(const QString &a)
Song MusicLibraryItemAlbum::coverSong() const
{
- MusicLibraryItemSong *firstSong=static_cast<MusicLibraryItemSong*>(childItem(0));
Song song;
- song.artist=firstSong->song().artist;
- song.albumartist=Song::useComposer() && !firstSong->song().composer().isEmpty() ? firstSong->song().albumArtist() : parentItem()->data();
- song.album=Song::useComposer() ? firstSong->song().album : m_itemData;
- song.setMbAlbumId(firstSong->song().mbAlbumId());
+ if (childCount()) {
+ MusicLibraryItemSong *firstSong=static_cast<MusicLibraryItemSong*>(childItem(0));
+ song.artist=firstSong->song().artist;
+ song.albumartist=Song::useComposer() && !firstSong->song().composer().isEmpty() ? firstSong->song().albumArtist() : parentItem()->data();
+ song.album=Song::useComposer() ? firstSong->song().album : m_itemData;
+ song.setMbAlbumId(firstSong->song().mbAlbumId());
+ song.setComposer(firstSong->song().composer());
+ song.year=m_year;
+ song.file=firstSong->file();
+ song.type=m_type;
+ #if defined ENABLE_ONLINE_SERVICES || defined ENABLE_DEVICES_SUPPORT
+ MusicLibraryItemRoot *root=parentItem() && parentItem()->parentItem() && MusicLibraryItem::Type_Root==parentItem()->parentItem()->itemType()
+ ? static_cast<MusicLibraryItemRoot *>(parentItem()->parentItem()) : 0;
+ if (root) {
+ #ifdef ENABLE_ONLINE_SERVICES
+ if (root->isOnlineService()) {
+ song.setIsFromOnlineService(static_cast<OnlineService *>(root)->id());
+ song.setExtraField(Song::OnlineImageUrl, m_imageUrl);
+ }
+ #endif
+ #ifdef ENABLE_DEVICES_SUPPORT
+ if (root->isDevice()) {
+ song.setIsFromDevice(static_cast<Device *>(root)->id());
+ }
+ #endif
+ }
+ #endif
+ }
return song;
}
@@ -449,9 +313,3 @@ void MusicLibraryItemAlbum::setYear(const MusicLibraryItemSong *song)
Song::storeAlbumYear(song->song());
}
}
-
-bool MusicLibraryItemAlbum::largeImages() const
-{
- return m_parentItem && m_parentItem->parentItem() && Type_Root==m_parentItem->parentItem()->itemType() &&
- static_cast<MusicLibraryItemRoot *>(m_parentItem->parentItem())->useLargeImages();
-}
diff --git a/models/musiclibraryitemalbum.h b/models/musiclibraryitemalbum.h
index c9a2079..aa985cf 100644
--- a/models/musiclibraryitemalbum.h
+++ b/models/musiclibraryitemalbum.h
@@ -40,38 +40,17 @@ class MusicLibraryItemSong;
class MusicLibraryItemAlbum : public MusicLibraryItemContainer
{
public:
- enum CoverSize
- {
- CoverNone = 0,
- CoverSmall = 1,
- CoverMedium = 2,
- CoverLarge = 3,
- CoverExtraLarge = 4
- };
-
- #ifndef ENABLE_UBUNTU
- static void setup();
- static CoverSize currentCoverSize();
- static void setCoverSize(CoverSize size);
- static int iconSize(MusicLibraryItemAlbum::CoverSize sz, bool iconMode=false);
- static int iconSize(bool iconMode=false);
- static void setItemSize(const QSize &sz);
- static QSize itemSize();
- #endif
static void setSortByDate(bool sd);
static bool sortByDate();
static bool lessThan(const MusicLibraryItem *a, const MusicLibraryItem *b);
- MusicLibraryItemAlbum(const QString &data, const QString &original, const QString &mbId, quint32 year, MusicLibraryItemContainer *parent);
+ MusicLibraryItemAlbum(const QString &data, const QString &original, const QString &mbId, quint32 year, const QString &sort, MusicLibraryItemContainer *parent);
virtual ~MusicLibraryItemAlbum();
QString displayData(bool full=false) const;
#ifdef ENABLE_UBUNTU
const QString & cover() const;
- #else
- QPixmap * saveToCache(const QImage &img) const;
- const QPixmap & cover() const;
#endif
quint32 year() const { return m_year; }
quint32 totalTime();
@@ -95,16 +74,17 @@ public:
// Return orignal album name. If we are grouping by composer, then album will appear as "Album (Artist)"
const QString & originalName() const { return m_originalName; }
const QString & id() const { return m_id; }
- const QString & albumId() const { return m_id.isEmpty() ? m_id : m_originalName; }
+ const QString & albumId() const { return m_id.isEmpty() ? m_itemData : m_id; }
+ const QString & sortString() const { return m_sortString.isEmpty() ? m_itemData : m_sortString; }
+ bool hasSort() const { return !m_sortString.isEmpty(); }
#ifdef ENABLE_UBUNTU
void setCover(const QString &c) { m_coverName="file://"+c; m_coverRequested=false; }
const QString & coverName() { return m_coverName; }
#endif
-
-private:
Song coverSong() const;
+
+private:
void setYear(const MusicLibraryItemSong *song);
- bool largeImages() const;
void updateStats();
private:
@@ -114,10 +94,11 @@ private:
quint32 m_totalTime;
quint32 m_numTracks;
QString m_originalName;
+ QString m_sortString;
QString m_id;
- mutable bool m_coverRequested;
mutable Song m_coverSong;
#ifdef ENABLE_UBUNTU
+ mutable bool m_coverRequested;
mutable QString m_coverName;
#endif
Song::Type m_type;
diff --git a/models/musiclibraryitemartist.cpp b/models/musiclibraryitemartist.cpp
index ce07855..fa5fb25 100644
--- a/models/musiclibraryitemartist.cpp
+++ b/models/musiclibraryitemartist.cpp
@@ -50,42 +50,31 @@ bool MusicLibraryItemArtist::lessThan(const MusicLibraryItem *a, const MusicLibr
if (aa->isVarious() != ab->isVarious()) {
return aa->isVarious() > ab->isVarious();
}
- return aa->baseArtist().localeAwareCompare(ab->baseArtist())<0;
+ return aa->sortString().localeAwareCompare(ab->sortString())<0;
}
#ifdef ENABLE_UBUNTU
static const QString constDefaultCover=QLatin1String("qrc:/artist.svg");
static const QString constDefaultVariousCover=QLatin1String("qrc:/variousartists.svg");
-#else
-static QPixmap *theDefaultIcon=0;
-static QPixmap *theVariousArtistsIcon=0;
#endif
-void MusicLibraryItemArtist::clearDefaultCover()
-{
- #ifndef ENABLE_UBUNTU
- if (theDefaultIcon) {
- delete theDefaultIcon;
- theDefaultIcon=0;
- }
- if (theVariousArtistsIcon) {
- delete theVariousArtistsIcon;
- theVariousArtistsIcon=0;
- }
- #endif
-}
-
-MusicLibraryItemArtist::MusicLibraryItemArtist(const QString &data, const QString &artistName, MusicLibraryItemContainer *parent)
+MusicLibraryItemArtist::MusicLibraryItemArtist(const QString &data, const QString &artistName, const QString &artistSort, MusicLibraryItemContainer *parent)
: MusicLibraryItemContainer(data, parent)
#ifdef ENABLE_UBUNTU
, m_coverRequested(false)
#endif
, m_various(false)
+ , m_haveSort(false)
, m_actualArtist(artistName==data ? QString() : artistName)
{
- if (m_itemData.startsWith(QLatin1String("The "))) {
- m_nonTheArtist=m_itemData.mid(4);
- } else if (Song::isVariousArtists(m_itemData)) {
+ if (!artistSort.isEmpty()) {
+ m_sortString=artistSort;
+ m_haveSort=true;
+ } else if (m_itemData.startsWith(QLatin1String("The "))) {
+ m_sortString=m_itemData.mid(4);
+ }
+
+ if (Song::isVariousArtists(m_itemData)) {
m_various=true;
}
}
@@ -98,21 +87,8 @@ const QString & MusicLibraryItemArtist::cover() const
}
if (m_coverName.isEmpty() && !m_coverRequested && childCount()) {
- Song coverSong;
- coverSong.albumartist=coverSong.title=m_itemData; // If title is empty, then Song::isUnknown() will be true!!!
-
- MusicLibraryItemAlbum *firstAlbum=static_cast<MusicLibraryItemAlbum *>(childItem(0));
- MusicLibraryItemSong *firstSong=firstAlbum ? static_cast<MusicLibraryItemSong *>(firstAlbum->childItem(0)) : 0;
-
- if (firstSong) {
- coverSong.file=firstSong->file();
- if (Song::useComposer() && !firstSong->song().composer().isEmpty()) {
- coverSong.albumartist=firstSong->song().albumArtist();
- }
- }
- coverSong.setArtistImageRequest();
m_coverRequested=true;
- m_coverName=Covers::self()->requestImage(coverSong).fileName;
+ m_coverName=Covers::self()->requestImage(coverSong()).fileName;
if (!m_coverName.isEmpty()) {
m_coverRequested=false;
}
@@ -120,64 +96,20 @@ const QString & MusicLibraryItemArtist::cover() const
return m_coverName.isEmpty() ? constDefaultCover : m_coverName;
}
-#else
-const QPixmap & MusicLibraryItemArtist::cover() const
-{
- int iSize=MusicLibraryItemAlbum::iconSize(largeImages());
- int cSize=iSize;
- if (0==cSize) {
- cSize=22;
- }
- if (m_various) {
- if (!theVariousArtistsIcon || theVariousArtistsIcon->width()!=cSize) {
- if (theVariousArtistsIcon) {
- delete theVariousArtistsIcon;
- }
- theVariousArtistsIcon = new QPixmap(Icons::self()->variousArtistsIcon.pixmap(cSize, cSize)
- .scaled(QSize(cSize, cSize), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
- }
- return *theVariousArtistsIcon;
- }
-
- if (m_coverSong.isEmpty()) {
- m_coverSong.albumartist=m_coverSong.title=m_itemData; // If title is empty, then Song::isUnknown() will be true!!!
-
- MusicLibraryItemAlbum *firstAlbum=static_cast<MusicLibraryItemAlbum *>(childItem(0));
- MusicLibraryItemSong *firstSong=firstAlbum ? static_cast<MusicLibraryItemSong *>(firstAlbum->childItem(0)) : 0;
-
- if (firstSong) {
- m_coverSong.file=firstSong->file();
- if (Song::useComposer() && !firstSong->song().composer().isEmpty()) {
- m_coverSong.albumartist=firstSong->song().albumArtist();
- }
- }
- m_coverSong.setArtistImageRequest();
- }
-
- QPixmap *pix=Covers::self()->get(m_coverSong, iSize);
- if (pix) {
- return *pix;
- }
- if (!theDefaultIcon || theDefaultIcon->width()!=cSize) {
- if (theDefaultIcon) {
- delete theDefaultIcon;
- }
- theDefaultIcon = new QPixmap(Icons::self()->artistIcon.pixmap(cSize, cSize)
- .scaled(QSize(cSize, cSize), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+void MusicLibraryItemArtist::setCover(const QString &c)
+{
+ if (!c.isEmpty()) {
+ m_coverName="file://"+c;
}
- return *theDefaultIcon;
+ m_coverRequested=false;
}
#endif
MusicLibraryItemAlbum * MusicLibraryItemArtist::album(const Song &s, bool create)
{
- QHash<QString, int>::ConstIterator it=m_indexes.find(s.albumId());
-
- if (m_indexes.end()==it) {
- return create ? createAlbum(s) : 0;
- }
- return static_cast<MusicLibraryItemAlbum *>(m_childItems.at(*it));
+ MusicLibraryItemAlbum *albumItem=getAlbum(s.albumId());
+ return albumItem ? albumItem : (create ? createAlbum(s) : 0);
}
MusicLibraryItemAlbum * MusicLibraryItemArtist::createAlbum(const Song &s)
@@ -186,17 +118,12 @@ MusicLibraryItemAlbum * MusicLibraryItemArtist::createAlbum(const Song &s)
// So, when creating an album entry we need to use the "Album (Artist)" value for display/sort, and still store just
// "Album" (for saving to cache, tag editing, etc.)
QString albumId=s.albumId();
- MusicLibraryItemAlbum *item=new MusicLibraryItemAlbum(s.albumName(), s.album, s.mbAlbumId(), s.year, this);
+ MusicLibraryItemAlbum *item=new MusicLibraryItemAlbum(s.albumName(), s.album, s.mbAlbumId(), s.year, s.albumSort(), this);
m_indexes.insert(albumId, m_childItems.count());
m_childItems.append(item);
return item;
}
-const QString & MusicLibraryItemArtist::baseArtist() const
-{
- return m_nonTheArtist.isEmpty() ? m_itemData : m_nonTheArtist;
-}
-
bool MusicLibraryItemArtist::allSingleTrack() const
{
foreach (MusicLibraryItem *a, m_childItems) {
@@ -223,12 +150,8 @@ bool MusicLibraryItemArtist::isFromSingleTracks(const Song &s) const
return true;
}
- QHash<QString, int>::ConstIterator it=m_indexes.find(i18n("Single Tracks"));
-
- if (m_indexes.end()!=it) {
- return static_cast<MusicLibraryItemAlbum *>(m_childItems.at(*it))->isSingleTrackFile(s);
- }
- return false;
+ MusicLibraryItemAlbum *st=getAlbum(i18n("Single Tracks"));
+ return st && st->isSingleTrackFile(s);
}
void MusicLibraryItemArtist::remove(MusicLibraryItemAlbum *album)
@@ -247,23 +170,66 @@ void MusicLibraryItemArtist::remove(MusicLibraryItemAlbum *album)
(*it)--;
}
}
- m_indexes.remove(album->data());
+ m_indexes.remove(album->albumId());
delete m_childItems.takeAt(index);
resetRows();
}
-void MusicLibraryItemArtist::updateIndexes()
+Song MusicLibraryItemArtist::coverSong() const
{
- m_indexes.clear();
- QList<MusicLibraryItem *>::iterator it=m_childItems.begin();
- QList<MusicLibraryItem *>::iterator end=m_childItems.end();
- for (int i=0; it!=end; ++it, ++i) {
- m_indexes.insert((*it)->data(), i);
+ Song song;
+ song.albumartist=song.title=m_itemData; // If title is empty, then Song::isUnknown() will be true!!!
+
+ if (childCount()) {
+ MusicLibraryItemAlbum *firstAlbum=static_cast<MusicLibraryItemAlbum *>(childItem(0));
+ MusicLibraryItemSong *firstSong=firstAlbum ? static_cast<MusicLibraryItemSong *>(firstAlbum->childItem(0)) : 0;
+
+ if (firstSong) {
+ song.file=firstSong->file();
+ if (Song::useComposer() && !firstSong->song().composer().isEmpty()) {
+ song.albumartist=firstSong->song().albumArtist();
+ }
+ }
}
+ song.setArtistImageRequest();
+ return song;
}
-bool MusicLibraryItemArtist::largeImages() const
+MusicLibraryItemAlbum * MusicLibraryItemArtist::getAlbum(const QString &key) const
{
- return m_parentItem && Type_Root==m_parentItem->itemType() &&
- static_cast<MusicLibraryItemRoot *>(m_parentItem)->useLargeImages();
+ if (m_indexes.count()==m_childItems.count()) {
+ if (m_childItems.isEmpty()) {
+ return 0;
+ }
+
+ QHash<QString, int>::ConstIterator idx=m_indexes.find(key);
+
+ if (m_indexes.end()==idx) {
+ return 0;
+ }
+
+ // Check index value is within range
+ if (*idx>=0 && *idx<m_childItems.count()) {
+ MusicLibraryItemAlbum *a=static_cast<MusicLibraryItemAlbum *>(m_childItems.at(*idx));
+ // Check id actually matches!
+ if (a->albumId()==key) {
+ return a;
+ }
+ }
+ }
+
+ // Something wrong with m_indexes??? So, refresh them...
+ MusicLibraryItemAlbum *al=0;
+ m_indexes.clear();
+ QList<MusicLibraryItem *>::ConstIterator it=m_childItems.constBegin();
+ QList<MusicLibraryItem *>::ConstIterator end=m_childItems.constEnd();
+ for (int i=0; it!=end; ++it, ++i) {
+ MusicLibraryItemAlbum *currenAlbum=static_cast<MusicLibraryItemAlbum *>(*it);
+ if (!al && currenAlbum->albumId()==key) {
+ al=currenAlbum;
+ }
+ m_indexes.insert(currenAlbum->albumId(), i);
+ }
+ return al;
}
+
diff --git a/models/musiclibraryitemartist.h b/models/musiclibraryitemartist.h
index 88c2d5f..da93695 100644
--- a/models/musiclibraryitemartist.h
+++ b/models/musiclibraryitemartist.h
@@ -42,46 +42,43 @@ class MusicLibraryItemArtist : public MusicLibraryItemContainer
public:
static bool lessThan(const MusicLibraryItem *a, const MusicLibraryItem *b);
- MusicLibraryItemArtist(const QString &data, const QString &artistName, MusicLibraryItemContainer *parent = 0);
+ MusicLibraryItemArtist(const QString &data, const QString &artistName, const QString &artistSort, MusicLibraryItemContainer *parent = 0);
virtual ~MusicLibraryItemArtist() { }
MusicLibraryItemAlbum * album(const Song &s, bool create=true);
MusicLibraryItemAlbum * createAlbum(const Song &s);
- const QString & baseArtist() const;
+ const QString & sortString() const { return m_sortString.isEmpty() ? m_itemData : m_sortString; }
+ bool hasSort() const { return m_haveSort && !m_sortString.isEmpty(); }
bool isVarious() const { return m_various; }
bool allSingleTrack() const;
void addToSingleTracks(MusicLibraryItemArtist *other);
bool isFromSingleTracks(const Song &s) const;
void remove(MusicLibraryItemAlbum *album);
- void updateIndexes();
Type itemType() const { return Type_Artist; }
- static void clearDefaultCover();
#ifdef ENABLE_UBUNTU
const QString & cover() const;
- #else
- const QPixmap & cover() const;
#endif
// 'data' could be 'Composer' if we are set to use that, but need to save real artist...
const QString & actualArtist() const { return m_actualArtist; }
#ifdef ENABLE_UBUNTU
- void setCover(const QString &c) { m_coverName="file://"+c; m_coverRequested=false; }
+ void setCover(const QString &c);
const QString & coverName() { return m_coverName; }
#endif
-
+ Song coverSong() const;
+
private:
- bool largeImages() const;
+ MusicLibraryItemAlbum * getAlbum(const QString &key) const;
private:
#ifdef ENABLE_UBUNTU
mutable QString m_coverName;
mutable bool m_coverRequested;
- #else
- mutable Song m_coverSong;
#endif
bool m_various;
- QString m_nonTheArtist;
+ bool m_haveSort;
+ QString m_sortString; // Do we have an actual artist-sort, or is m_sortString just "Artist, The" ??? - needed for cache saving
QString m_actualArtist;
- QHash<QString, int> m_indexes;
+ mutable QHash<QString, int> m_indexes;
};
#endif
diff --git a/models/musiclibraryitempodcast.cpp b/models/musiclibraryitempodcast.cpp
index 069258a..036d856 100644
--- a/models/musiclibraryitempodcast.cpp
+++ b/models/musiclibraryitempodcast.cpp
@@ -33,6 +33,7 @@
#include "support/utils.h"
#include "gui/covers.h"
#include "online/rssparser.h"
+#include "online/podcastservice.h"
#include <QPixmap>
#include <QFile>
#include <QXmlStreamReader>
@@ -40,8 +41,6 @@
#include <QCryptographicHash>
#include <QNetworkReply>
-static QPixmap *theDefaultIcon=0;
-
static QLatin1String constTopTag("podcast");
static QLatin1String constImageAttribute("img");
static QLatin1String constRssAttribute("rss");
@@ -76,8 +75,6 @@ static QString generateFileName(const QUrl &url, bool creatingNew)
MusicLibraryItemPodcast::MusicLibraryItemPodcast(const QString &fileName, MusicLibraryItemContainer *parent)
: MusicLibraryItemContainer(QString(), parent)
- , m_coverRequested(false)
- , m_cover(0)
, m_fileName(fileName)
, m_unplayedEpisodeCount(0)
{
@@ -229,58 +226,20 @@ bool MusicLibraryItemPodcast::save()
return true;
}
-void MusicLibraryItemPodcast::setCoverImage(const QImage &img) const
-{
- if (m_cover) {
- delete m_cover;
- }
- int size=MusicLibraryItemAlbum::iconSize(largeImages());
- QImage scaled=img.scaled(QSize(size, size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
- m_cover = new QPixmap(QPixmap::fromImage(scaled));
- m_coverRequested=false;
-}
-
-bool MusicLibraryItemPodcast::setCover(const QImage &img, bool update) const
-{
- if ((update || m_coverRequested) && !img.isNull()) {
- setCoverImage(img);
- return true;
- }
-
- return false;
-}
-
-const QPixmap & MusicLibraryItemPodcast::cover() const
+Song MusicLibraryItemPodcast::coverSong() const
{
- if (m_cover) {
- return *m_cover;
- }
-
- int iSize=MusicLibraryItemAlbum::iconSize(largeImages());
- int cSize=iSize;
- if (0==cSize) {
- cSize=22;
- }
-
- if (!m_cover && !m_coverRequested) {
- m_coverRequested = true;
- QImage img=OnlineServicesModel::self()->requestImage(static_cast<OnlineService *>(parentItem())->id(), data(), QString(), m_imageUrl.toString(), // ??
- m_imageFile, 300);
-
- if (!img.isNull()) {
- setCoverImage(img);
- return *m_cover;
- }
+ Song song;
+ if (childCount()) {
+ song.artist=PodcastService::constName;
+ song.album=data();
+ song.title=data();
+ song.type=Song::OnlineSvrTrack;
+ song.setIsFromOnlineService(PodcastService::constName);
+ song.setExtraField(Song::OnlineImageUrl, m_imageUrl.toString());
+ song.setExtraField(Song::OnlineImageCacheName, m_imageFile);
+ song.file=m_rssUrl.toString();
}
-
- if (!theDefaultIcon || theDefaultIcon->width()!=cSize) {
- if (theDefaultIcon) {
- delete theDefaultIcon;
- }
- theDefaultIcon = new QPixmap(Icons::self()->podcastIcon.pixmap(cSize, cSize)
- .scaled(QSize(cSize, cSize), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
- }
- return *theDefaultIcon;
+ return song;
}
void MusicLibraryItemPodcast::remove(int row)
@@ -297,14 +256,6 @@ void MusicLibraryItemPodcast::remove(MusicLibraryItemSong *i)
}
}
-void MusicLibraryItemPodcast::clearImage() const
-{
- if (m_cover) {
- delete m_cover;
- m_cover=0;
- }
-}
-
void MusicLibraryItemPodcast::removeFiles()
{
if (!m_fileName.isEmpty() && QFile::exists(m_fileName)) {
@@ -325,11 +276,15 @@ void MusicLibraryItemPodcast::setUnplayedCount()
}
}
-void MusicLibraryItemPodcast::setPlayed(MusicLibraryItemSong *song)
+void MusicLibraryItemPodcast::setPlayed(MusicLibraryItemSong *song, bool played)
{
- if (!song->song().hasBeenPlayed()) {
- song->setPlayed(true);
- m_unplayedEpisodeCount--;
+ if (played!=song->song().hasBeenPlayed()) {
+ song->setPlayed(played);
+ if (played) {
+ m_unplayedEpisodeCount--;
+ } else {
+ m_unplayedEpisodeCount++;
+ }
}
}
@@ -351,12 +306,6 @@ MusicLibraryItemPodcastEpisode * MusicLibraryItemPodcast::getEpisode(const QStri
return 0;
}
-bool MusicLibraryItemPodcast::largeImages() const
-{
- return m_parentItem && Type_Root==m_parentItem->itemType() &&
- static_cast<MusicLibraryItemRoot *>(m_parentItem)->useLargeImages();
-}
-
const QString & MusicLibraryItemPodcastEpisode::published()
{
if (publishedDate.isEmpty()) {
diff --git a/models/musiclibraryitempodcast.h b/models/musiclibraryitempodcast.h
index 2877e20..1679a8d 100644
--- a/models/musiclibraryitempodcast.h
+++ b/models/musiclibraryitempodcast.h
@@ -58,30 +58,25 @@ public:
bool load();
RssStatus loadRss(QNetworkReply *dev);
bool save();
- bool setCover(const QImage &img, bool update=false) const;
- const QPixmap & cover() const;
void remove(int row);
void remove(MusicLibraryItemSong *i);
Type itemType() const { return Type_Podcast; }
const QUrl & imageUrl() const { return m_imageUrl; }
void setImageUrl(const QString &u) { m_imageUrl=u; }
- void clearImage() const;
const QUrl & rssUrl() const { return m_rssUrl; }
void removeFiles();
void setUnplayedCount();
quint32 unplayedEpisodes() const { return m_unplayedEpisodeCount; }
- void setPlayed(MusicLibraryItemSong *song);
+ void setPlayed(MusicLibraryItemSong *song, bool played=true);
void addAll(const QList<MusicLibraryItemPodcastEpisode *> &others);
MusicLibraryItemPodcastEpisode * getEpisode(const QString &file) const;
+ Song coverSong() const;
private:
- void setCoverImage(const QImage &img) const;
- bool largeImages() const;
void updateStats();
private:
mutable bool m_coverRequested;
- mutable QPixmap *m_cover;
QUrl m_imageUrl;
QUrl m_rssUrl;
QString m_fileName;
@@ -92,8 +87,13 @@ private:
class MusicLibraryItemPodcastEpisode : public MusicLibraryItemSong
{
public:
+ enum DownloadState {
+ NotDownloading = -1,
+ QueuedForDownload = -2
+ };
+
MusicLibraryItemPodcastEpisode(const Song &s, MusicLibraryItemContainer *parent)
- : MusicLibraryItemSong(s, parent), downloadProg(-1) { }
+ : MusicLibraryItemSong(s, parent), downloadProg(NotDownloading) { }
virtual ~MusicLibraryItemPodcastEpisode() { }
const QString & published();
diff --git a/models/musiclibraryitemroot.cpp b/models/musiclibraryitemroot.cpp
index dcceb26..37adb7b 100644
--- a/models/musiclibraryitemroot.cpp
+++ b/models/musiclibraryitemroot.cpp
@@ -45,18 +45,14 @@
MusicLibraryItemArtist * MusicLibraryItemRoot::artist(const Song &s, bool create)
{
QString aa=songArtist(s);
- QHash<QString, int>::ConstIterator it=m_indexes.find(aa);
-
- if (m_indexes.end()==it) {
- return create ? createArtist(s) : 0;
- }
- return static_cast<MusicLibraryItemArtist *>(m_childItems.at(*it));
+ MusicLibraryItemArtist *artistItem=getArtist(aa);
+ return artistItem ? artistItem : (create ? createArtist(s) : 0);
}
MusicLibraryItemArtist * MusicLibraryItemRoot::createArtist(const Song &s)
{
QString aa=songArtist(s);
- MusicLibraryItemArtist *item=new MusicLibraryItemArtist(aa, Song::Standard==s.type ? s.albumArtist() : QString(), this);
+ MusicLibraryItemArtist *item=new MusicLibraryItemArtist(aa, Song::Standard==s.type ? s.albumArtist() : QString(), s.artistSortString(), this);
m_indexes.insert(aa, m_childItems.count());
m_childItems.append(item);
return item;
@@ -75,12 +71,10 @@ void MusicLibraryItemRoot::groupSingleTracks()
for (; it!=m_childItems.end(); ) {
if (various!=(*it) && static_cast<MusicLibraryItemArtist *>(*it)->allSingleTrack()) {
if (!various) {
- QHash<QString, int>::ConstIterator it=m_indexes.find(Song::variousArtists());
- if (m_indexes.end()==it) {
- various=new MusicLibraryItemArtist(Song::variousArtists(), QString(), this);
+ various=getArtist(Song::variousArtists());
+ if (!various) {
+ various=new MusicLibraryItemArtist(Song::variousArtists(), QString(), QString(), this);
created=true;
- } else {
- various=static_cast<MusicLibraryItemArtist *>(m_childItems.at(*it));
}
}
various->addToSingleTracks(static_cast<MusicLibraryItemArtist *>(*it));
@@ -92,26 +86,18 @@ void MusicLibraryItemRoot::groupSingleTracks()
}
if (various) {
- m_indexes.clear();
if (created) {
m_childItems.append(various);
}
- it=m_childItems.begin();
- QList<MusicLibraryItem *>::iterator end=m_childItems.end();
- for (int i=0; it!=end; ++it, ++i) {
- m_indexes.insert((*it)->data(), i);
- }
+ refreshIndexes();
}
}
bool MusicLibraryItemRoot::isFromSingleTracks(const Song &s) const
{
if (!isFlat && (supportsAlbumArtist && !s.file.isEmpty())) {
- QHash<QString, int>::ConstIterator it=m_indexes.find(Song::variousArtists());
-
- if (m_indexes.end()!=it) {
- return static_cast<MusicLibraryItemArtist *>(m_childItems.at(*it))->isFromSingleTracks(s);
- }
+ MusicLibraryItemArtist *various=getArtist(Song::variousArtists());
+ return various && various->isFromSingleTracks(s);
}
return false;
}
@@ -265,6 +251,7 @@ static const QString constArtistElement=QLatin1String("Artist");
static const QString constAlbumElement=QLatin1String("Album");
static const QString constTrackElement=QLatin1String("Track");
static const QString constNameAttribute=QLatin1String("name");
+static const QString constSortAttribute=QLatin1String("sort");
static const QString constArtistAttribute=QLatin1String("artist");
static const QString constAlbumArtistAttribute=QLatin1String("albumartist");
static const QString constComposerAttribute=QLatin1String("composer");
@@ -338,6 +325,9 @@ void MusicLibraryItemRoot::toXML(QXmlStreamWriter &writer, const QDateTime &date
if (!artist->actualArtist().isEmpty()) {
writer.writeAttribute(constActualAttribute, artist->actualArtist());
}
+ if (artist->hasSort()) {
+ writer.writeAttribute(constSortAttribute, artist->sortString());
+ }
foreach (const MusicLibraryItem *al, artist->childItems()) {
if (prog && prog->wasStopped()) {
return;
@@ -359,6 +349,9 @@ void MusicLibraryItemRoot::toXML(QXmlStreamWriter &writer, const QDateTime &date
if (!album->id().isEmpty()) {
writer.writeAttribute(constMbIdAttribute, album->id());
}
+ if (album->hasSort()) {
+ writer.writeAttribute(constSortAttribute, album->sortString());
+ }
QString artistName=artist->actualArtist().isEmpty() ? artist->data() : artist->actualArtist();
foreach (const MusicLibraryItem *t, album->childItems()) {
@@ -447,7 +440,7 @@ quint32 MusicLibraryItemRoot::fromXML(const QString &filename, const QDateTime &
#endif
return rv;
}
-#include <QDebug>
+
quint32 MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, const QDateTime &date, bool *dateUnreliable, const QString &baseFolder, MusicLibraryProgressMonitor *prog)
{
if (isFlat) {
@@ -502,12 +495,14 @@ quint32 MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, const QDateTime
song.artist=song.albumartist=actual;
song.setComposer(attributes.value(constNameAttribute).toString());
}
+ song.setAlbumArtistSort(attributes.value(constSortAttribute).toString());
artistItem = createArtist(song);
} else if (constAlbumElement==element) {
song.album=attributes.value(constNameAttribute).toString();
song.year=attributes.value(constYearAttribute).toString().toUInt();
song.genre=attributes.value(constGenreAttribute).toString();
song.setMbAlbumId(attributes.value(constMbIdAttribute).toString());
+ song.setAlbumSort(attributes.value(constSortAttribute).toString());
if (!song.file.isEmpty()) {
song.file.append("dummy.mp3");
}
@@ -952,3 +947,41 @@ QString MusicLibraryItemRoot::songArtist(const Song &s) const
return artistName(s);
}
+
+MusicLibraryItemArtist * MusicLibraryItemRoot::getArtist(const QString &key) const
+{
+ if (m_indexes.count()==m_childItems.count()) {
+ if (m_childItems.isEmpty()) {
+ return 0;
+ }
+
+ QHash<QString, int>::ConstIterator idx=m_indexes.find(key);
+
+ if (m_indexes.end()==idx) {
+ return 0;
+ }
+
+ // Check index value is within range
+ if (*idx>=0 && *idx<m_childItems.count()) {
+ MusicLibraryItemArtist *a=static_cast<MusicLibraryItemArtist *>(m_childItems.at(*idx));
+ // Check id actually matches!
+ if (a->data()==key) {
+ return a;
+ }
+ }
+ }
+
+ // Something wrong with m_indexes??? So, refresh them...
+ MusicLibraryItemArtist *ar=0;
+ m_indexes.clear();
+ QList<MusicLibraryItem *>::ConstIterator it=m_childItems.constBegin();
+ QList<MusicLibraryItem *>::ConstIterator end=m_childItems.constEnd();
+ for (int i=0; it!=end; ++it, ++i) {
+ MusicLibraryItemArtist *currenArtist=static_cast<MusicLibraryItemArtist *>(*it);
+ if (!ar && currenArtist->data()==key) {
+ ar=currenArtist;
+ }
+ m_indexes.insert(currenArtist->data(), i);
+ }
+ return ar;
+}
diff --git a/models/musiclibraryitemroot.h b/models/musiclibraryitemroot.h
index e28e250..c1bdb7e 100644
--- a/models/musiclibraryitemroot.h
+++ b/models/musiclibraryitemroot.h
@@ -59,9 +59,6 @@ public:
MusicLibraryItemRoot(const QString &name=QString(), bool albumArtistSupport=true, bool flatHierarchy=false)
: MusicLibraryItemContainer(name, 0)
, supportsAlbumArtist(albumArtistSupport)
- , albumImages(true)
- , artistImages(false)
- , largeImages(false)
, isFlat(flatHierarchy)
, m_model(0) {
}
@@ -92,12 +89,6 @@ public:
void add(const QSet<Song> &songs);
bool supportsAlbumArtistTag() const { return supportsAlbumArtist; }
void setSupportsAlbumArtistTag(bool s) { supportsAlbumArtist=s; }
- bool useAlbumImages() const { return albumImages; }
- void setUseAlbumImages(bool a) { albumImages=a; }
- bool useArtistImages() const { return artistImages; }
- void setUseArtistImages(bool a) { artistImages=a; }
- bool useLargeImages() const { return largeImages; }
- void setLargeImages(bool a) { largeImages=a; }
virtual void toggleGrouping();
void applyGrouping();
void clearItems();
@@ -115,14 +106,12 @@ public:
protected:
QString songArtist(const Song &s) const;
+ MusicLibraryItemArtist * getArtist(const QString &key) const;
protected:
bool supportsAlbumArtist; // TODO: ALBUMARTIST: Remove when libMPT supports album artist!
- bool albumImages:1;
- bool artistImages:1;
- bool largeImages:1;
- bool isFlat:1;
- QHash<QString, int> m_indexes;
+ bool isFlat;
+ mutable QHash<QString, int> m_indexes;
MusicModel *m_model;
};
diff --git a/models/musiclibraryitemsong.cpp b/models/musiclibraryitemsong.cpp
index fcd9929..cf5bca2 100644
--- a/models/musiclibraryitemsong.cpp
+++ b/models/musiclibraryitemsong.cpp
@@ -56,12 +56,12 @@ void MusicLibraryItemSong::initGenres() const
{
// Reduce memory usage by only storing genres in a set if required...
if (0==m_genres) {
- QSet<QString> g=m_song.genre.split(QLatin1Char(';'), QString::SkipEmptyParts).toSet();
+ QStringList g=m_song.genres();
if (g.count()<2) {
m_genres=(QSet<QString> *)1;
} else {
m_genres=new QSet<QString>();
- *m_genres=g;
+ *m_genres=g.toSet();
}
}
}
diff --git a/models/musiclibrarymodel.cpp b/models/musiclibrarymodel.cpp
index 5b9044d..8b82673 100644
--- a/models/musiclibrarymodel.cpp
+++ b/models/musiclibrarymodel.cpp
@@ -33,6 +33,7 @@
#include "playqueuemodel.h"
#include "dirviewmodel.h"
#include "config.h"
+#include "roles.h"
#include "gui/covers.h"
#include "mpd/mpdparseutils.h"
#include "mpd/mpdconnection.h"
@@ -133,6 +134,7 @@ MusicLibraryModel::MusicLibraryModel(QObject *parent, bool isMpdModel, bool isCh
: MusicModel(parent)
, mpdModel(isMpdModel)
, checkable(isCheckable)
+ , artistImages(false)
, rootItem(new MusicLibraryItemRoot)
, databaseTimeUnreliable(false)
{
@@ -160,6 +162,20 @@ MusicLibraryModel::~MusicLibraryModel()
delete rootItem;
}
+void MusicLibraryModel::readConfig()
+{
+ #ifndef ENABLE_UBUNTU
+ bool aa=Settings::self()->libraryArtistImage();
+ if (aa!=artistImages) {
+ artistImages=aa;
+ for (int r=0; r<rowCount(); ++r) {
+ QModelIndex index=createIndex(r, 0, rootItem->childItem(r));
+ emit dataChanged(index, index);
+ }
+ }
+ #endif
+}
+
QModelIndex MusicLibraryModel::index(int row, int column, const QModelIndex &parent) const
{
if (!hasIndex(row, column, parent)) {
@@ -234,6 +250,12 @@ QVariant MusicLibraryModel::data(const QModelIndex &index, int role) const
return f;
}
}
+
+ if (Cantata::Role_ListImage==role && artistImages) {
+ MusicLibraryItem *item = static_cast<MusicLibraryItem *>(index.internalPointer());
+ return MusicLibraryItem::Type_Album==item->itemType() || MusicLibraryItem::Type_Artist==item->itemType();
+ }
+
return MusicModel::data(index, role);
}
@@ -348,14 +370,11 @@ void MusicLibraryModel::clear()
databaseTime = QDateTime();
rootItem = new MusicLibraryItemRoot;
rootItem->setModel(this);
- rootItem->setLargeImages(oldRoot->useLargeImages());
- rootItem->setUseAlbumImages(oldRoot->useAlbumImages());
- rootItem->setUseArtistImages(oldRoot->useArtistImages());
delete oldRoot;
endResetModel();
if (mpdModel) {
- AlbumsModel::self()->update(rootItem);
+ AlbumsModel::self()->update(rootItem, false);
}
}
@@ -465,8 +484,6 @@ void MusicLibraryModel::updateMusicLibrary(MusicLibraryItemRoot *newroot, QDateT
return;
}
- newroot->setUseAlbumImages(rootItem->useAlbumImages());
- newroot->setUseArtistImages(rootItem->useArtistImages());
bool updatedSongs=false;
bool needToSave=!databaseTime.isValid() || (validCacheDate(dbUpdate) && dbUpdate>databaseTime);
bool incremental=rootItem->childCount() && newroot->childCount();
@@ -487,9 +504,6 @@ void MusicLibraryModel::updateMusicLibrary(MusicLibraryItemRoot *newroot, QDateT
beginResetModel();
rootItem = newroot;
rootItem->setModel(this);
- rootItem->setLargeImages(oldRoot->useLargeImages());
- rootItem->setUseAlbumImages(oldRoot->useAlbumImages());
- rootItem->setUseArtistImages(oldRoot->useArtistImages());
delete oldRoot;
endResetModel();
updatedSongs=true;
@@ -512,7 +526,7 @@ void MusicLibraryModel::updateMusicLibrary(MusicLibraryItemRoot *newroot, QDateT
rootItem->toXML(cacheFileName(), databaseTime, databaseTimeUnreliable);
}
- AlbumsModel::self()->update(rootItem);
+ AlbumsModel::self()->update(rootItem, incremental);
emit updateGenres(rootItem->genres());
#ifdef ENABLE_UBUNTU
if (updatedSongs) {
@@ -536,16 +550,19 @@ void MusicLibraryModel::updatingMpd()
void MusicLibraryModel::setArtistImage(const Song &song, const QImage &img, const QString &file)
{
#ifdef ENABLE_UBUNTU
- if (!rootItem->useArtistImages() || img.isNull() || file.isEmpty() ||
- song.file.startsWith("http://") || song.name().startsWith("http://")) {
- return;
+
+ if (img.isNull() || song.file.startsWith("http://") || song.name().startsWith("http://")) {
+ if (!file.isEmpty()) return; //If empty, we need to execute the stuff below to set m_coverRequested to false
}
MusicLibraryItemArtist *artistItem = rootItem->artist(song, false);
+
if (artistItem && artistItem->coverName().isEmpty()) {
- artistItem->setCover(file);
- QModelIndex idx=index(artistItem->row(), 0, QModelIndex());
- emit dataChanged(idx, idx);
+ artistItem->setCover(file); //Always execute to set m_coverRequested to false
+ if (!file.isEmpty()) {
+ QModelIndex idx=index(artistItem->row(), 0, QModelIndex());
+ emit dataChanged(idx, idx);
+ }
}
#else
Q_UNUSED(song)
@@ -652,7 +669,7 @@ void MusicLibraryModel::toggleGrouping()
rootItem->toXML(cacheFileName(), databaseTime, databaseTimeUnreliable);
endResetModel();
if (mpdModel) {
- AlbumsModel::self()->update(rootItem);
+ AlbumsModel::self()->update(rootItem, false);
}
}
@@ -714,66 +731,61 @@ QList<Song> MusicLibraryModel::getArtistAlbumsFirstTracks(const Song &song) cons
// Currently ONLY artist images are always loaded from non UI thread.
void MusicLibraryModel::coverLoaded(const Song &song, int size)
{
- if (
- #ifndef ENABLE_UBUNTU
- MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize() || size!=MusicLibraryItemAlbum::iconSize(rootItem->useLargeImages()) ||
- #endif
- //song.isCdda() || (song.isArtistImageRequest() && !rootItem->useArtistImages()) ||
- song.isCdda() || !song.isArtistImageRequest() || !rootItem->useArtistImages() ||
- song.file.startsWith("http://") || song.name().startsWith("http://")) {
+ Q_UNUSED(size)
+ #ifdef ENABLE_ONLINE_SERVICES
+ if (song.isFromOnlineService()) {
+ return;
+ }
+ #endif
+ if (song.isCdda() || song.file.startsWith("http://") || song.name().startsWith("http://")) {
return;
}
- //if (song.isArtistImageRequest()) {
+ if (song.isArtistImageRequest()) {
MusicLibraryItemArtist *artistItem = rootItem->artist(song, false);
if (artistItem) {
QModelIndex idx=index(artistItem->row(), 0, QModelIndex());
emit dataChanged(idx, idx);
}
-// } else {
-// MusicLibraryItemArtist *artistItem = rootItem->artist(song, false);
-// if (artistItem) {
-// MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
-// if (albumItem) {
-// QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, QModelIndex()));
-// emit dataChanged(idx, idx);
-// }
-// }
-// }
+ } else {
+ MusicLibraryItemArtist *artistItem = rootItem->artist(song, false);
+ if (artistItem) {
+ MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
+ if (albumItem) {
+ QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, QModelIndex()));
+ emit dataChanged(idx, idx);
+ }
+ }
+ }
}
void MusicLibraryModel::setCover(const Song &song, const QImage &img, const QString &file)
{
- #ifdef ENABLE_UBUNTU
- if (!rootItem->useAlbumImages() || img.isNull() || file.isEmpty() ||
+ if (img.isNull() || file.isEmpty() ||
song.isCdda() || song.file.startsWith("http:/") || song.name().startsWith("http:/")) {
return;
}
+ #ifdef ENABLE_ONLINE_SERVICES
+ if (song.isFromOnlineService()) {
+ return;
+ }
+ #endif
MusicLibraryItemArtist *artistItem = rootItem->artist(song, false);
if (artistItem) {
MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
+ #ifdef ENABLE_UBUNTU
if (albumItem && albumItem->coverName().isEmpty()) {
albumItem->setCover(file);
QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, QModelIndex()));
emit dataChanged(idx, idx);
}
- }
- #else
- Q_UNUSED(file)
- if (!rootItem->useAlbumImages() || img.isNull() || MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize() ||
- song.isCdda() || song.file.startsWith("http:/") || song.name().startsWith("http:/")) {
- return;
- }
-
- MusicLibraryItemArtist *artistItem = rootItem->artist(song, false);
- if (artistItem) {
- MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
- if (albumItem && albumItem->saveToCache(img)) {
+ #else
+ if (albumItem) {
QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, QModelIndex()));
emit dataChanged(idx, idx);
}
+ #endif
}
- #endif
}
/**
diff --git a/models/musiclibrarymodel.h b/models/musiclibrarymodel.h
index fea6a9a..ecbb0b8 100644
--- a/models/musiclibrarymodel.h
+++ b/models/musiclibrarymodel.h
@@ -55,6 +55,7 @@ public:
MusicLibraryModel(QObject *parent=0, bool isMpdModel=true, bool isCheckable=false);
~MusicLibraryModel();
+ void readConfig();
QModelIndex index(int, int, const QModelIndex & = QModelIndex()) const;
QModelIndex parent(const QModelIndex &) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
@@ -87,13 +88,7 @@ public:
QSet<QString> getAlbumArtists();
bool update(const QSet<Song> &songs);
// void uncheckAll();
- bool useAlbumImages() const { return rootItem->useAlbumImages(); }
- void setUseAlbumImages(bool a) { rootItem->setUseAlbumImages(a); }
- bool useArtistImages() const { return rootItem->useArtistImages(); }
- void setUseArtistImages(bool a) { rootItem->setUseArtistImages(a); }
const QDateTime & lastUpdate() { return databaseTime; }
- bool useLargeImages() const { return rootItem->useLargeImages(); }
- void setLargeImages(bool a) { rootItem->setLargeImages(a); }
void setSupportsAlbumArtistTag(bool s) { rootItem->setSupportsAlbumArtistTag(s); }
void toggleGrouping();
const QSet<QString> & genres() const { return rootItem->genres(); }
@@ -127,6 +122,7 @@ private:
private:
bool mpdModel;
bool checkable;
+ bool artistImages;
MusicLibraryItemRoot *rootItem;
QDateTime databaseTime;
bool databaseTimeUnreliable;
diff --git a/models/musicmodel.cpp b/models/musicmodel.cpp
index ef07c33..e619f17 100644
--- a/models/musicmodel.cpp
+++ b/models/musicmodel.cpp
@@ -37,6 +37,7 @@
#include "roles.h"
#include "support/localize.h"
#include "gui/plurals.h"
+#include "gui/settings.h"
#include "widgets/icons.h"
#include "gui/covers.h"
#include <QStringList>
@@ -102,33 +103,20 @@ QVariant MusicModel::data(const QModelIndex &index, int role) const
#ifndef ENABLE_UBUNTU
case Qt::DecorationRole:
switch (item->itemType()) {
- case MusicLibraryItem::Type_Root: {
- QImage img=static_cast<MusicLibraryItemRoot *>(item)->image();
- if (!img.isNull()) {
- return img;
- }
+ case MusicLibraryItem::Type_Root:
return static_cast<MusicLibraryItemRoot *>(item)->icon();
- }
- case MusicLibraryItem::Type_Artist: {
- MusicLibraryItemArtist *artist = static_cast<MusicLibraryItemArtist *>(item);
- return artist->isVarious() ? Icons::self()->variousArtistsIcon : Icons::self()->artistIcon;
- }
+ case MusicLibraryItem::Type_Artist:
+ return static_cast<MusicLibraryItemArtist *>(item)->isVarious() ? Icons::self()->variousArtistsIcon : Icons::self()->artistIcon;
#ifdef ENABLE_ONLINE_SERVICES
case MusicLibraryItem::Type_Podcast:
- if (MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize()) {
- return Icons::self()->podcastIcon;
- } else {
- return static_cast<MusicLibraryItemPodcast *>(item)->cover();
- }
+ return Icons::self()->podcastIcon;
#endif
case MusicLibraryItem::Type_Album:
- if (MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize() || !root(item)->useAlbumImages()) {
- return Icons::self()->albumIcon;
- } else {
- return static_cast<MusicLibraryItemAlbum *>(item)->cover();
- }
- case MusicLibraryItem::Type_Song: return Song::Playlist==static_cast<MusicLibraryItemSong *>(item)->song().type ? Icons::self()->playlistIcon : Icons::self()->audioFileIcon;
- default: return QVariant();
+ return Icons::self()->albumIcon;
+ case MusicLibraryItem::Type_Song:
+ return Song::Playlist==static_cast<MusicLibraryItemSong *>(item)->song().type ? Icons::self()->playlistIcon : Icons::self()->audioFileIcon;
+ default:
+ return QVariant();
}
#endif
case Cantata::Role_BriefMainText:
@@ -157,6 +145,9 @@ QVariant MusicModel::data(const QModelIndex &index, int role) const
}
return item->displayData();
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
if (MusicLibraryItem::Type_Song==item->itemType()) {
#ifdef ENABLE_ONLINE_SERVICES
if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) {
@@ -172,17 +163,6 @@ QVariant MusicModel::data(const QModelIndex &index, int role) const
(0==item->childCount()
? item->displayData(true)
: (item->displayData(true)+"<br/>"+data(index, Cantata::Role_SubText).toString()));
- #ifndef ENABLE_UBUNTU
- case Cantata::Role_ImageSize: {
- const MusicLibraryItemRoot *r=root(item);
- if (MusicLibraryItem::Type_Song!=item->itemType() && !MusicLibraryItemAlbum::itemSize().isNull()) { // icon/list style view...
- return MusicLibraryItemAlbum::iconSize(r->useLargeImages());
- } else if ((r->useAlbumImages() && MusicLibraryItem::Type_Album==item->itemType()) || MusicLibraryItem::Type_Podcast==item->itemType() || (r->useArtistImages() && MusicLibraryItem::Type_Artist==item->itemType())) {
- return MusicLibraryItemAlbum::iconSize();
- }
- break;
- }
- #endif
case Cantata::Role_SubText:
switch (item->itemType()) {
case MusicLibraryItem::Type_Root: {
@@ -204,35 +184,43 @@ QVariant MusicModel::data(const QModelIndex &index, int role) const
Utils::formatTime(static_cast<MusicLibraryItemAlbum *>(item)->totalTime()));
default: return QVariant();
}
- case Cantata::Role_Image: {
+ case Cantata::Role_ListImage:
+ switch (item->itemType()) {
+ case MusicLibraryItem::Type_Album:
+ return true;
+ #ifdef ENABLE_ONLINE_SERVICES
+ case MusicLibraryItem::Type_Podcast:
+ return true;
+ #endif
+ default:
+ return false;
+ }
+ #ifdef ENABLE_UBUNTU
+ case Cantata::Role_Image:
+ switch (item->itemType()) {
+ case MusicLibraryItem::Type_Album:
+ return static_cast<MusicLibraryItemAlbum *>(item)->cover();
+ case MusicLibraryItem::Type_Artist:
+ return static_cast<MusicLibraryItemArtist *>(item)->cover();
+ default:
+ return QString();
+ }
+ #endif
+ case Cantata::Role_CoverSong: {
QVariant v;
switch (item->itemType()) {
case MusicLibraryItem::Type_Album:
- #ifndef ENABLE_UBUNTU
- if (MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize()) {
- return Icons::self()->albumIcon;
- } else
- #endif
- {
- return static_cast<MusicLibraryItemAlbum *>(item)->cover();
- }
+ v.setValue<Song>(static_cast<MusicLibraryItemAlbum *>(item)->coverSong());
+ break;
case MusicLibraryItem::Type_Artist:
- if (static_cast<MusicLibraryItemRoot *>(item->parentItem())->useArtistImages()) {
- return static_cast<MusicLibraryItemArtist *>(item)->cover();
- }
+ v.setValue<Song>(static_cast<MusicLibraryItemArtist *>(item)->coverSong());
break;
#ifdef ENABLE_ONLINE_SERVICES
case MusicLibraryItem::Type_Podcast:
- if (MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize()) {
- return Icons::self()->podcastIcon;
- } else {
- return static_cast<MusicLibraryItemPodcast *>(item)->cover();
- }
+ v.setValue<Song>(static_cast<MusicLibraryItemPodcast *>(item)->coverSong());
+ break;
#endif
default:
- #ifdef ENABLE_UBUNTU
- return QString();
- #endif
break;
}
return v;
@@ -242,17 +230,6 @@ QVariant MusicModel::data(const QModelIndex &index, int role) const
return i18nc("Album by Artist", "%1 by %2", item->data(), item->parentItem()->data());
}
return item->data();
- #ifndef ENABLE_UBUNTU
- case Qt::SizeHintRole: {
- const MusicLibraryItemRoot *r=root(item);
- if (!r->useArtistImages() && MusicLibraryItem::Type_Artist==item->itemType()) {
- return QVariant();
- }
- if (r->useLargeImages() && MusicLibraryItem::Type_Song!=item->itemType() && !MusicLibraryItemAlbum::itemSize().isNull()) {
- return MusicLibraryItemAlbum::itemSize();
- }
- }
- #endif
default:
break;
}
diff --git a/models/onlineservicesmodel.cpp b/models/onlineservicesmodel.cpp
index 6ed6eb2..041b848 100644
--- a/models/onlineservicesmodel.cpp
+++ b/models/onlineservicesmodel.cpp
@@ -58,7 +58,6 @@
#include <QMimeData>
#include <QFile>
#include <QDir>
-#include <QDebug>
#if defined ENABLE_MODEL_TEST
#include "modeltest.h"
#endif
@@ -78,15 +77,14 @@ OnlineServicesModel::OnlineServicesModel(QObject *parent)
subscribeAction = ActionCollection::get()->createAction("subscribeonlineservice", i18n("Add Subscription"), "list-add");
unSubscribeAction = ActionCollection::get()->createAction("unsubscribeonlineservice", i18n("Remove Subscription"), "list-remove");
refreshSubscriptionAction = ActionCollection::get()->createAction("refreshsubscription", i18n("Refresh Subscription"), "view-refresh");
- #ifdef ENABLE_STREAMS
+ #if defined ENABLE_STREAMS || !defined UNITY_MENU_HACK
searchAction = StreamsModel::self()->searchAct();
#else
- // For Mac/Unity we try to hide icons from menubar menus. However, search is used in the menubar AND in the streams view. We
- // need the icon on the streams view. Therefore, if the StdAction has no icon - we create a new one and forward all signals...
+ // For Unity we try to hide icons from menubar menus. However, search is used in the menubar AND in the streams view. We
+ // need the icon on the streams view. Therefore, if the StdAction has no icon - we create a new one and forward all signals...
if (StdActions::self()->searchAction->icon().isNull()) {
searchAction = new Action(Icon("edit-find"), StdActions::self()->searchAction->text(), this);
searchAction->setToolTip(StdActions::self()->searchAction->toolTip());
- connect(searchAction, SIGNAL(triggered(bool)), StdActions::self()->searchAction, SIGNAL(triggered(bool)));
connect(searchAction, SIGNAL(triggered()), StdActions::self()->searchAction, SIGNAL(triggered()));
connect(ActionCollection::get(), SIGNAL(tooltipUpdated(QAction *)), SLOT(tooltipUpdated(QAction *)));
} else {
@@ -178,6 +176,8 @@ QVariant OnlineServicesModel::data(const QModelIndex &index, int role) const
if (static_cast<MusicLibraryItemPodcastEpisode *>(item)->downloadProgress()>=0) {
return MultiMusicModel::data(index, role).toString()+QLatin1Char(' ')+
i18n("(Downloading: %1%)", static_cast<MusicLibraryItemPodcastEpisode *>(item)->downloadProgress());
+ } else if (MusicLibraryItemPodcastEpisode::QueuedForDownload==static_cast<MusicLibraryItemPodcastEpisode *>(item)->downloadProgress()) {
+ return MultiMusicModel::data(index, role).toString()+QLatin1Char(' ')+i18n("(Download Queued)");
}
}
break;
@@ -217,10 +217,16 @@ QVariant OnlineServicesModel::data(const QModelIndex &index, int role) const
}
break;
}
+ case Cantata::Role_ListImage:
+ return MusicLibraryItem::Type_Album==item->itemType() || MusicLibraryItem::Type_Podcast==item->itemType();
case Qt::DecorationRole:
if (MusicLibraryItem::Type_Song==item->itemType() && item->parentItem() && MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) {
if (!static_cast<MusicLibraryItemPodcastEpisode *>(item)->localPath().isEmpty()) {
return Icons::self()->downloadedPodcastEpisodeIcon;
+ } else if (static_cast<MusicLibraryItemPodcastEpisode *>(item)->downloadProgress()>=0) {
+ return Icon("go-down");
+ } else if (MusicLibraryItemPodcastEpisode::QueuedForDownload==static_cast<MusicLibraryItemPodcastEpisode *>(item)->downloadProgress()) {
+ return Icon("clock");
}
}
break;
@@ -264,6 +270,12 @@ void OnlineServicesModel::setEnabled(bool e)
return;
}
+ if (e) {
+ connect(Covers::self(), SIGNAL(loaded(Song,int)), this, SLOT(coverLoaded(Song,int)));
+ } else {
+ disconnect(Covers::self(), SIGNAL(loaded(Song,int)), this, SLOT(coverLoaded(Song,int)));
+ }
+
enabled=e;
if (!enabled) {
stop();
@@ -433,6 +445,11 @@ void OnlineServicesModel::deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod,
podcast->deleteDownloadedPodcasts(pod, episodes);
}
+void OnlineServicesModel::setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes, bool listened)
+{
+ podcast->setPodcastsAsListened(pod, episodes, listened);
+}
+
bool OnlineServicesModel::isDownloading() const
{
return podcast->isDownloading();
@@ -443,197 +460,46 @@ void OnlineServicesModel::cancelAll()
podcast->cancelAllJobs();
}
-void OnlineServicesModel::resetModel()
-{
- OnlineService *srv=service(PodcastService::constName);
- if (srv) {
- foreach (MusicLibraryItem *p, srv->childItems()) {
- if (MusicLibraryItem::Type_Podcast==p->itemType()) {
- MusicLibraryItemPodcast *pc=static_cast<MusicLibraryItemPodcast *>(p);
- pc->clearImage();
- }
- }
- }
- ActionModel::resetModel();
-}
-
-static const char * constExtensions[]={".jpg", ".png", 0};
-static const char * constIdProperty="id";
-static const char * constArtistProperty="artist";
-static const char * constAlbumProperty="album";
-static const char * constCacheProperty="cacheName";
-static const char * constMaxSizeProperty="maxSize";
-
-#define DBUG if (Covers::debugEnabled()) qWarning() << "OnlineServicesModel" << __FUNCTION__
-
-static Covers::Image readCache(const QString &id, const QString &artist, const QString &album)
-{
- DBUG << id << artist << album;
- Covers::Image i;
- QString baseName=Utils::cacheDir(id.toLower(), false)+Covers::encodeName(album.isEmpty() ? artist : (artist+" - "+album));
- for (int e=0; constExtensions[e]; ++e) {
- QString fileName=baseName+constExtensions[e];
- if (QFile::exists(fileName)) {
- QImage img(fileName);
-
- if (!img.isNull()) {
- DBUG << "Read from cache" << fileName;
- i.img=img;
- i.fileName=fileName;
- break;
- }
- }
- }
- return i;
-}
-
-Covers::Image OnlineServicesModel::readImage(const Song &song)
-{
- DBUG << song.file << song.albumArtist() << song.album;
- QUrl u(song.file);
- Covers::Image img;
- QString id;
- if (u.host().contains(JamendoService::constName, Qt::CaseInsensitive)) {
- id=JamendoService::constName;
- } else if (u.host().contains(MagnatuneService::constName, Qt::CaseInsensitive)) {
- id=MagnatuneService::constName;
- }
-
- if (!id.isEmpty()) {
- img=readCache(id, song.albumArtist(), song.album);
- }
-
- return img;
-}
-
-QImage OnlineServicesModel::requestImage(const QString &id, const QString &artist, const QString &album, const QString &url,
- const QString cacheName, int maxSize)
+// Required due to icon missing for StdActions::searchAction for Unity... See note in constructor above.
+void OnlineServicesModel::tooltipUpdated(QAction *act)
{
- DBUG << id << artist << album << url << cacheName << maxSize;
- if (cacheName.isEmpty()) {
- Covers::Image i=readCache(id, artist, album);
- if (!i.img.isNull()) {
- return i.img;
- }
- } else if (QFile::exists(cacheName)) {
- QImage img(cacheName);
- if (!img.isNull()) {
- DBUG << "Used cache filename";
- return img;
- }
- }
-
- QString imageUrl=url;
- // Jamendo image URL is just the album ID!
- if (!imageUrl.isEmpty() && !imageUrl.startsWith("http:/") && imageUrl.length()<15 && id==JamendoService::constName) {
- imageUrl=JamendoService::imageUrl(imageUrl);
- DBUG << "Built jamendo url" << imageUrl;
- }
-
- if (!imageUrl.isEmpty()) {
- DBUG << "Download url";
- // Need to download image...
- NetworkJob *j=NetworkAccessManager::self()->get(QUrl(imageUrl));
- j->setProperty(constIdProperty, id);
- j->setProperty(constArtistProperty, artist);
- j->setProperty(constAlbumProperty, album);
- j->setProperty(constCacheProperty, cacheName);
- j->setProperty(constMaxSizeProperty, maxSize);
-
- connect(j, SIGNAL(finished()), this, SLOT(imageDownloaded()));
+ #if defined ENABLE_STREAMS || !defined UNITY_MENU_HACK
+ Q_UNUSED(act)
+ #else
+ if (act!=searchAction && act==StdActions::self()->searchAction) {
+ searchAction->setToolTip(StdActions::self()->searchAction->toolTip());
}
-
- return QImage();
+ #endif
}
-void OnlineServicesModel::imageDownloaded()
+void OnlineServicesModel::coverLoaded(const Song &song, int size)
{
- NetworkJob *j=qobject_cast<NetworkJob *>(sender());
-
- if (!j) {
- return;
- }
-
- j->deleteLater();
- QByteArray data=QNetworkReply::NoError==j->error() ? j->readAll() : QByteArray();
- if (data.isEmpty()) {
- DBUG << j->url().toString() << "empty!";
+ Q_UNUSED(size)
+ if (song.isArtistImageRequest() || !song.isFromOnlineService()) {
return;
}
- QString url=j->url().toString();
- QImage img=QImage::fromData(data, Covers::imageFormat(data));
- if (img.isNull()) {
- DBUG << url << "null image";
- return;
- }
-
- bool png=Covers::isPng(data);
- QString id=j->property(constIdProperty).toString();
- Song song;
- song.albumartist=song.artist=j->property(constArtistProperty).toString();
- song.album=j->property(constAlbumProperty).toString();
- DBUG << "Got image" << id << song.artist << song.album << png;
+ QString id=song.onlineService();
OnlineService *srv=service(id);
- if (id==PodcastService::constName) {
- MusicLibraryItem *podcast=srv->childItem(song.artist);
- if (podcast && static_cast<MusicLibraryItemPodcast *>(podcast)->setCover(img)) {
- QModelIndex idx=index(podcast->row(), 0, index(row(srv), 0, QModelIndex()));
- emit dataChanged(idx, idx);
- }
- } else if (!song.album.isEmpty() && srv->useAlbumImages() && !srv->isPodcasts() && srv->id()==id) {
- MusicLibraryItemArtist *artistItem = srv->artist(song, false);
- if (artistItem) {
- MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
- if (albumItem && albumItem->saveToCache(img)) {
- QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, index(row(srv), 0, QModelIndex())));
+ if (srv) {
+ if (PodcastService::constName==id) {
+ MusicLibraryItemPodcast *pod = static_cast<PodcastService *>(srv)->getPodcast(QUrl(song.file));
+ if (pod) {
+ QModelIndex idx=index(pod->row(), 0, index(srv->row(), 0, QModelIndex()));
emit dataChanged(idx, idx);
}
+ } else {
+ MusicLibraryItemArtist *artistItem = srv->artist(song, false);
+ if (artistItem) {
+ MusicLibraryItemAlbum *albumItem = artistItem->album(song, false);
+ if (albumItem) {
+ QModelIndex idx=index(albumItem->row(), 0, index(artistItem->row(), 0, QModelIndex()));
+ emit dataChanged(idx, idx);
+ }
+ }
}
}
-
- int maxSize=j->property(constMaxSizeProperty).toInt();
- QString cacheName=j->property(constCacheProperty).toString();
- QString fileName=(cacheName.isEmpty()
- ? Utils::cacheDir(id.toLower(), true)+Covers::encodeName(song.album.isEmpty() ? song.artist : (song.artist+" - "+song.album))+(png ? ".png" : ".jpg")
- : cacheName);
-
- if (!img.isNull() && (maxSize>0 || !cacheName.isEmpty())) {
- if (maxSize>32 && (img.width()>maxSize || img.height()>maxSize)) {
- img=img.scaled(maxSize, maxSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- }
- DBUG << "Saved scaled image to" << fileName << maxSize;
- img.save(fileName);
- if (!song.album.isEmpty()) {
- song.track=1;
- //song.setKey();
- Covers::self()->emitCoverUpdated(song, img, fileName);
- }
- return;
- }
- QFile f(fileName);
- if (f.open(QIODevice::WriteOnly)) {
- DBUG << "Saved image to" << fileName;
- f.write(data);
- if (!song.album.isEmpty()) {
- song.track=1;
- //song.setKey();
- Covers::self()->emitCoverUpdated(song, img, fileName);
- }
- }
-}
-
-// Required due to icon missing for StdActions::searchAction for Mac/Unity... See note in constructor above.
-void OnlineServicesModel::tooltipUpdated(QAction *act)
-{
- #ifdef ENABLE_STREAMS
- Q_UNUSED(act)
- #else
- if (act!=searchAction && act==StdActions::self()->searchAction) {
- searchAction->setToolTip(StdActions::self()->searchAction->toolTip());
- }
- #endif
}
void OnlineServicesModel::save()
diff --git a/models/onlineservicesmodel.h b/models/onlineservicesmodel.h
index bdba195..8ae0721 100644
--- a/models/onlineservicesmodel.h
+++ b/models/onlineservicesmodel.h
@@ -84,15 +84,11 @@ public:
bool subscribePodcast(const QUrl &url);
void downloadPodcasts(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes);
void deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes);
+ void setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes, bool listened);
bool isDownloading() const;
void cancelAll();
- void resetModel();
bool isHidden(OnlineService *srv) { return hiddenServices.contains(srv); }
- Covers::Image readImage(const Song &song);
- QImage requestImage(const QString &id, const QString &artist, const QString &album, const QString &url,
- const QString cacheName=QString(), int maxSize=-1);
-
void save();
QList<Provider> getProviders() const;
void setHiddenProviders(const QSet<QString> &prov);
@@ -108,8 +104,8 @@ private:
void setBusy(const QString &id, bool b);
private Q_SLOTS:
- void imageDownloaded();
void tooltipUpdated(QAction *act);
+ void coverLoaded(const Song &song, int size);
Q_SIGNALS:
void error(const QString &text);
diff --git a/models/playlistsmodel.cpp b/models/playlistsmodel.cpp
index 31db811..f907686 100644
--- a/models/playlistsmodel.cpp
+++ b/models/playlistsmodel.cpp
@@ -35,6 +35,8 @@
#include "widgets/groupedview.h"
#include "roles.h"
#include "gui/plurals.h"
+#include "gui/covers.h"
+#include "gui/settings.h"
#include "support/localize.h"
#include "support/utils.h"
#include "support/globalstatic.h"
@@ -95,8 +97,9 @@ PlaylistsModel::PlaylistsModel(QObject *parent)
connect(this, SIGNAL(moveInPlaylist(const QString &, const QList<quint32> &, quint32, quint32)), MPDConnection::self(), SLOT(moveInPlaylist(const QString &, const
QList<quint32> &, quint32, quint32)));
#ifndef ENABLE_UBUNTU
+ connect(Covers::self(), SIGNAL(loaded(Song,int)), this, SLOT(coverLoaded(Song,int)));
newAction=new QAction(Icon("document-new"), i18n("New Playlist..."), this);
- connect(newAction, SIGNAL(triggered(bool)), this, SIGNAL(addToNew()));
+ connect(newAction, SIGNAL(triggered()), this, SIGNAL(addToNew()));
Action::initIcon(newAction);
#endif
#if defined ENABLE_MODEL_TEST
@@ -218,8 +221,9 @@ QVariant PlaylistsModel::headerData(int section, Qt::Orientation orientation, in
case COL_YEAR:
return int(Qt::AlignVCenter|Qt::AlignRight);
}
+ case Cantata::Role_InitiallyHidden:
case Cantata::Role_Hideable:
- return COL_YEAR==section || COL_GENRE==section || COL_COMPOSER==section || COL_PERFORMER==section ? true : false;
+ return COL_YEAR==section || COL_GENRE==section || COL_COMPOSER==section || COL_PERFORMER==section;
case Cantata::Role_Width:
switch (section) {
case COL_TITLE: return 0.4;
@@ -272,12 +276,15 @@ QVariant PlaylistsModel::data(const QModelIndex &index, int role) const
case Cantata::Role_Image:
return QString();
#endif
+ case Cantata::Role_ListImage:
+ return false;
case Cantata::Role_IsCollection:
return true;
case Cantata::Role_CollectionId:
return pl->key;
case Cantata::Role_Key:
return 0;
+ case Cantata::Role_SongWithRating:
case Cantata::Role_Song: {
QVariant var;
var.setValue<Song>(Song());
@@ -326,6 +333,9 @@ QVariant PlaylistsModel::data(const QModelIndex &index, int role) const
}
return pl->visibleName();
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
if (!pl->loaded) {
pl->loaded=true;
emit playlistInfo(pl->name);
@@ -357,12 +367,16 @@ QVariant PlaylistsModel::data(const QModelIndex &index, int role) const
case Cantata::Role_Image:
return QString();
#endif
+ case Cantata::Role_ListImage:
+ return true;
case Cantata::Role_IsCollection:
return false;
case Cantata::Role_CollectionId:
return s->parent->key;
case Cantata::Role_Key:
return s->key;
+ case Cantata::Role_CoverSong:
+ case Cantata::Role_SongWithRating:
case Cantata::Role_Song: {
QVariant var;
var.setValue<Song>(*s);
@@ -445,6 +459,9 @@ QVariant PlaylistsModel::data(const QModelIndex &index, int role) const
}
return s->entryName();
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return s->toolTip();
#ifndef ENABLE_UBUNTU
case Qt::DecorationRole:
@@ -946,6 +963,33 @@ void PlaylistsModel::mpdConnectionStateChanged(bool connected)
}
}
+void PlaylistsModel::coverLoaded(const Song &song, int s)
+{
+ Q_UNUSED(s)
+ #ifdef ENABLE_UBUNTU
+ Q_UNUSED(song)
+ #else
+ if (!song.isArtistImageRequest()) {
+ int plRow=0;
+ foreach (const PlaylistItem *pl, items) {
+ QModelIndex plIdx;
+ int songRow=0;
+ foreach (const SongItem *s, pl->songs) {
+ if (s->albumArtist()==song.albumArtist() && s->album==song.album) {
+ if (!plIdx.isValid()) {
+ plIdx=index(plRow, 0, QModelIndex());
+ }
+ QModelIndex idx=index(songRow, 0, plIdx);
+ emit dataChanged(idx, idx);
+ }
+ songRow++;
+ }
+ plRow++;
+ }
+ }
+ #endif
+}
+
void PlaylistsModel::updateItemMenu(bool create)
{
#ifndef ENABLE_UBUNTU
@@ -1053,7 +1097,7 @@ void PlaylistsModel::PlaylistItem::updateGenres()
genres.clear();
foreach (const SongItem *s, songs) {
if (!s->genre.isEmpty()) {
- genres.insert(s->genre);
+ genres+=s->allGenres();
}
}
}
diff --git a/models/playlistsmodel.h b/models/playlistsmodel.h
index d1a0f54..a7754c8 100644
--- a/models/playlistsmodel.h
+++ b/models/playlistsmodel.h
@@ -67,6 +67,7 @@ public:
{
SongItem() : parent(0), genreSet(0) { }
SongItem(const Song &s, PlaylistItem *p=0);
+ virtual ~SongItem() { delete genreSet; }
bool isPlaylist() { return false; }
bool hasGenre(const QString &g) const { return genreSet ? genreSet->contains(g) : genre==g; }
QSet<QString> allGenres() const { return genreSet ? *genreSet : genres().toSet(); }
@@ -102,7 +103,7 @@ public:
PlaylistsModel(QObject *parent = 0);
~PlaylistsModel();
int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent); return COL_COUNT; }
+ int columnCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent) return COL_COUNT; }
bool canFetchMore(const QModelIndex &index) const;
void fetchMore(const QModelIndex &index);
bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
@@ -159,6 +160,7 @@ private Q_SLOTS:
void emitAddToExisting();
void playlistRenamed(const QString &from, const QString &to);
void mpdConnectionStateChanged(bool connected);
+ void coverLoaded(const Song &song, int s);
private:
void updateGenreList();
diff --git a/models/playqueuemodel.cpp b/models/playqueuemodel.cpp
index 884547e..d25141b 100644
--- a/models/playqueuemodel.cpp
+++ b/models/playqueuemodel.cpp
@@ -175,6 +175,7 @@ QString PlayQueueModel::headerText(int col)
case COL_PRIO: return i18n("Priority");
case COL_COMPOSER: return i18n("Composer");
case COL_PERFORMER: return i18n("Performer");
+ case COL_RATING: return i18n("Rating");
default: return QString();
}
}
@@ -217,6 +218,10 @@ PlayQueueModel::PlayQueueModel(QObject *parent)
connect(this, SIGNAL(clearEntries()), MPDConnection::self(), SLOT(clear()));
connect(this, SIGNAL(addAndPlay(QString)), MPDConnection::self(), SLOT(addAndPlay(QString)));
connect(this, SIGNAL(startPlayingSongId(qint32)), MPDConnection::self(), SLOT(startPlayingSongId(qint32)));
+ connect(this, SIGNAL(getRating(QString)), MPDConnection::self(), SLOT(getRating(QString)));
+ connect(this, SIGNAL(setRating(QStringList,quint8)), MPDConnection::self(), SLOT(setRating(QStringList,quint8)));
+ connect(MPDConnection::self(), SIGNAL(rating(QString,quint8)), SLOT(ratingResult(QString,quint8)));
+ connect(MPDConnection::self(), SIGNAL(stickerDbChanged()), SLOT(stickerDbChanged()));
#ifdef ENABLE_DEVICES_SUPPORT //TODO: Problems here with devices support!!!
connect(DevicesModel::self(), SIGNAL(invalid(QList<Song>)), SLOT(remove(QList<Song>)));
connect(DevicesModel::self(), SIGNAL(updatedDetails(QList<Song>)), SLOT(updateDetails(QList<Song>)));
@@ -230,28 +235,23 @@ PlayQueueModel::PlayQueueModel(QObject *parent)
SLOT(setCover(const Song &, const QImage &, const QString &)));
#else
- #ifdef ENABLE_KDE_SUPPORT
- bool menuIcons=true;
- #else
- bool menuIcons=!QCoreApplication::testAttribute(Qt::AA_DontShowIconsInMenus);
- #endif
-
+ UNITY_MENU_ICON_CHECK
removeDuplicatesAction=new Action(i18n("Remove Duplicates"), this);
removeDuplicatesAction->setEnabled(false);
- undoAction=ActionCollection::get()->createAction("playqueue-undo", i18n("Undo"), menuIcons ? "edit-undo" : "");
+ undoAction=ActionCollection::get()->createAction("playqueue-undo", i18n("Undo"), HIDE_MENU_ICON_NAME("edit-undo"));
undoAction->setShortcut(Qt::ControlModifier+Qt::Key_Z);
- redoAction=ActionCollection::get()->createAction("playqueue-redo", i18n("Redo"), menuIcons ? "edit-redo" : "");
+ redoAction=ActionCollection::get()->createAction("playqueue-redo", i18n("Redo"), HIDE_MENU_ICON_NAME("edit-redo"));
redoAction->setShortcut(Qt::ControlModifier+Qt::ShiftModifier+Qt::Key_Z);
- connect(undoAction, SIGNAL(triggered(bool)), this, SLOT(undo()));
- connect(redoAction, SIGNAL(triggered(bool)), this, SLOT(redo()));
- connect(removeDuplicatesAction, SIGNAL(triggered(bool)), this, SLOT(removeDuplicates()));
+ connect(undoAction, SIGNAL(triggered()), this, SLOT(undo()));
+ connect(redoAction, SIGNAL(triggered()), this, SLOT(redo()));
+ connect(removeDuplicatesAction, SIGNAL(triggered()), this, SLOT(removeDuplicates()));
shuffleAction=new Action(i18n("Shuffle"), this);
shuffleAction->setMenu(new QMenu(0));
Action *shuffleTracksAction = new Action(i18n("Tracks"), shuffleAction);
Action *shuffleAlbumsAction = new Action(i18n("Albums"), shuffleAction);
- connect(shuffleTracksAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(shuffle()));
- connect(shuffleAlbumsAction, SIGNAL(triggered(bool)), this, SLOT(shuffleAlbums()));
+ connect(shuffleTracksAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(shuffle()));
+ connect(shuffleAlbumsAction, SIGNAL(triggered()), this, SLOT(shuffleAlbums()));
shuffleAction->menu()->addAction(shuffleTracksAction);
shuffleAction->menu()->addAction(shuffleAlbumsAction);
@@ -306,9 +306,14 @@ QVariant PlayQueueModel::headerData(int section, Qt::Orientation orientation, in
case COL_YEAR:
case COL_PRIO:
return int(Qt::AlignVCenter|Qt::AlignRight);
+ case COL_RATING:
+ return int(Qt::AlignCenter);
}
+ case Cantata::Role_InitiallyHidden:
+ return COL_YEAR==section || COL_DISC==section || COL_GENRE==section || COL_PRIO==section ||
+ COL_COMPOSER==section || COL_PERFORMER==section || COL_RATING==section;
case Cantata::Role_Hideable:
- return COL_YEAR==section || COL_DISC==section || COL_GENRE==section || COL_PRIO==section || COL_COMPOSER==section || COL_PERFORMER==section ? true : false;
+ return COL_TITLE!=section && COL_ARTIST!=section;
case Cantata::Role_Width:
switch (section) {
case COL_TRACK: return 0.075;
@@ -322,6 +327,7 @@ QVariant PlayQueueModel::headerData(int section, Qt::Orientation orientation, in
case COL_PRIO: return 0.015;
case COL_COMPOSER: return 0.2;
case COL_PERFORMER: return 0.2;
+ case COL_RATING: return 0.08;
}
default:
break;
@@ -369,19 +375,10 @@ QHash<int, QByteArray> PlayQueueModel::roleNames() const
QVariant PlayQueueModel::data(const QModelIndex &index, int role) const
{
- if (Qt::SizeHintRole!=role && (!index.isValid() || index.row() >= songs.size())) {
+ if (!index.isValid() || index.row() >= songs.size()) {
return QVariant();
}
- // Mark background of song currently being played
-
-// if (role == Qt::BackgroundRole && songs.at(index.row()).id == currentSongId) {
-// QPalette palette;
-// QColor col(palette.color(QPalette::Highlight));
-// col.setAlphaF(0.2);
-// return QVariant(col);
-// }
-
switch (role) {
case Cantata::Role_MainText: {
const Song &s=songs.at(index.row());
@@ -419,9 +416,15 @@ QVariant PlayQueueModel::data(const QModelIndex &index, int role) const
return songs.at(index.row()).key;
case Cantata::Role_Id:
return songs.at(index.row()).id;
+ case Cantata::Role_SongWithRating:
case Cantata::Role_Song: {
QVariant var;
- var.setValue<Song>(songs.at(index.row()));
+ const Song &s=songs.at(index.row());
+ if (Cantata::Role_SongWithRating==role && Song::Standard==s.type && Song::Rating_Null==s.rating) {
+ emit getRating(s.file);
+ s.rating=Song::Rating_Requested;
+ }
+ var.setValue<Song>(s);
return var;
}
case Cantata::Role_AlbumDuration: {
@@ -566,12 +569,25 @@ QVariant PlayQueueModel::data(const QModelIndex &index, int role) const
return song.composer();
case COL_PERFORMER:
return song.performer();
+// case COL_RATING:{
+// QVariant var;
+// const Song &s=songs.at(index.row());
+// if (Song::Standard==s.type && Song::constNullRating==s.rating) {
+// emit getRating(s.file);
+// s.rating=Song::constRatingRequested;
+// }
+// var.setValue(s.rating);
+// return var;
+// }
default:
break;
}
break;
}
case Qt::ToolTipRole: {
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
Song s=songs.at(index.row());
if (s.album.isEmpty() && s.isStream()) {
return basicPath(s);
@@ -595,6 +611,8 @@ QVariant PlayQueueModel::data(const QModelIndex &index, int role) const
case COL_YEAR:
case COL_PRIO:
return int(Qt::AlignVCenter|Qt::AlignRight);
+ case COL_RATING:
+ return int(Qt::AlignCenter);
}
#ifndef ENABLE_UBUNTU
case Cantata::Role_Decoration: {
@@ -849,6 +867,15 @@ void PlayQueueModel::updateCurrentSong(quint32 id)
}
currentSongRowNum=getRowById(currentSongId);
+ if (currentSongRowNum>0 && currentSongRowNum<=songs.count()) {
+ const Song &song=songs.at(currentSongRowNum);
+ if (Song::Rating_Null==song.rating) {
+ song.rating=Song::Rating_Requested;
+ emit getRating(song.file);
+ } else if (Song::Rating_Requested!=song.rating) {
+ emit currentSongRating(song.file, song.rating);
+ }
+ }
emit dataChanged(index(currentSongRowNum, 0), index(currentSongRowNum, columnCount(QModelIndex())-1));
if (-1!=currentSongId && stopAfterTrackId==currentSongId) {
@@ -947,10 +974,10 @@ void PlayQueueModel::update(const QList<Song> &songList)
for (qint32 i=0; i<songList.count(); ++i) {
Song s=songList.at(i);
bool newSong=i>=songs.count();
- Song curentSongAtPos=newSong ? Song() : songs.at(i);
+ Song currentSongAtPos=newSong ? Song() : songs.at(i);
bool isEmpty=s.isEmpty();
- if (newSong || s.id!=curentSongAtPos.id) {
+ if (newSong || s.id!=currentSongAtPos.id) {
qint32 existingPos=newSong ? -1 : getRowById(s.id);
if (-1==existingPos) {
beginInsertRows(QModelIndex(), i, i);
@@ -963,6 +990,7 @@ void PlayQueueModel::update(const QList<Song> &songList)
beginMoveRows(QModelIndex(), existingPos, existingPos, QModelIndex(), i>existingPos ? i+1 : i);
Song old=songs.takeAt(existingPos);
// old.pos=s.pos;
+ s.rating=old.rating;
songs.insert(i, isEmpty ? old : s);
#ifdef ENABLE_UBUNTU
currentKeys.insert(isEmpty ? old.key : s.key);
@@ -970,17 +998,18 @@ void PlayQueueModel::update(const QList<Song> &songList)
endMoveRows();
}
} else if (isEmpty) {
- s=curentSongAtPos;
+ s=currentSongAtPos;
#ifdef ENABLE_UBUNTU
currentKeys.insert(s.key);
#endif
} else {
- s.key=curentSongAtPos.key;
+ s.key=currentSongAtPos.key;
+ s.rating=currentSongAtPos.rating;
#ifdef ENABLE_UBUNTU
currentKeys.insert(s.key);
#endif
songs.replace(i, s);
- if (s.title!=curentSongAtPos.title || s.artist!=curentSongAtPos.artist || s.name()!=curentSongAtPos.name()) {
+ if (s.title!=currentSongAtPos.title || s.artist!=currentSongAtPos.artist || s.name()!=currentSongAtPos.name()) {
emit dataChanged(index(i, 0), index(i, columnCount(QModelIndex())-1));
}
}
@@ -1093,6 +1122,20 @@ void PlayQueueModel::crop(const QList<int> &rowsToKeep)
}
}
+void PlayQueueModel::setRating(const QList<int> &rows, quint8 rating) const
+{
+ QSet<QString> files;
+ foreach (const int &r, rows) {
+ if (r>-1 && r<songs.count()) {
+ const Song &s=songs.at(r);
+ if (Song::Standard==s.type && !files.contains(s.file)) {
+ files.insert(s.file);
+ }
+ }
+ }
+ emit setRating(files.toList(), rating);
+}
+
void PlayQueueModel::enableUndo(bool e)
{
if (e==undoEnabled) {
@@ -1204,7 +1247,7 @@ void PlayQueueModel::addSortAction(const QString &name, const QString &key)
Action *action=new Action(name, sortAction);
action->setProperty(constSortByKey, key);
sortAction->menu()->addAction(action);
- connect(action, SIGNAL(triggered(bool)), SLOT(sortBy()));
+ connect(action, SIGNAL(triggered()), SLOT(sortBy()));
}
static bool artistSort(const Song &s1, const Song &s2)
@@ -1289,6 +1332,35 @@ void PlayQueueModel::removeDuplicates()
}
}
+void PlayQueueModel::ratingResult(const QString &file, quint8 r)
+{
+ QList<Song>::iterator it=songs.begin();
+ QList<Song>::iterator end=songs.end();
+ int numCols=columnCount(QModelIndex())-1;
+
+ for (int row=0; it!=end; ++it, ++row) {
+ if (Song::Standard==(*it).type && r!=(*it).rating && (*it).file==file) {
+ (*it).rating=r;
+ emit dataChanged(index(row, 0), index(row, numCols));
+ if ((*it).id==currentSongId) {
+ emit currentSongRating(file, r);
+ }
+ }
+ }
+}
+
+void PlayQueueModel::stickerDbChanged()
+{
+ // Sticker DB changed, need to re-request ratings...
+ QSet<QString> requests;
+ foreach (const Song &song, songs) {
+ if (Song::Standard==song.type && song.rating<=Song::Rating_Max && !requests.contains(song.file)) {
+ emit getRating(song.file);
+ requests.insert(song.file);
+ }
+ }
+}
+
void PlayQueueModel::setCover(const Song &song, const QImage &img, const QString &file)
{
Q_UNUSED(img)
diff --git a/models/playqueuemodel.h b/models/playqueuemodel.h
index 67b9847..1951edd 100644
--- a/models/playqueuemodel.h
+++ b/models/playqueuemodel.h
@@ -58,6 +58,7 @@ public:
COL_PRIO,
COL_COMPOSER,
COL_PERFORMER,
+ COL_RATING,
COL_COUNT
};
@@ -124,6 +125,7 @@ public:
void removeAll();
void remove(const QList<int> &rowsToRemove);
void crop(const QList<int> &rowsToKeep);
+ void setRating(const QList<int> &rows, quint8 rating) const;
#ifndef ENABLE_UBUNTU
Action * shuffleAct() { return shuffleAction; }
Action * removeDuplicatesAct() { return removeDuplicatesAction; }
@@ -159,6 +161,8 @@ private Q_SLOTS:
void undo();
void redo();
void removeDuplicates();
+ void ratingResult(const QString &file, quint8 r);
+ void stickerDbChanged();
// Touch version...
void setCover(const Song &song, const QImage &img, const QString &file);
@@ -168,6 +172,8 @@ Q_SIGNALS:
void filesAdded(const QStringList filenames, const quint32 row, const quint32 size, int action, quint8 priority);
void populate(const QStringList &items, const QList<quint8> &priority);
void move(const QList<quint32> &items, const quint32 row, const quint32 size);
+ void getRating(const QString &file) const;
+ void setRating(const QStringList &files, quint8 rating) const;
void statsUpdated(int songs, quint32 time);
void fetchingStreams();
void streamsFetched();
@@ -177,6 +183,7 @@ Q_SIGNALS:
void clearEntries();
void addAndPlay(const QString &file);
void startPlayingSongId(qint32 id);
+ void currentSongRating(const QString &file, quint8 r);
private:
QList<Song> songs;
diff --git a/models/proxymodel.cpp b/models/proxymodel.cpp
index 6029712..bc851e7 100644
--- a/models/proxymodel.cpp
+++ b/models/proxymodel.cpp
@@ -149,6 +149,12 @@ bool ProxyModel::isChildOfRoot(const QModelIndex &idx) const
return false;
}
+void ProxyModel::resort()
+{
+ invalidate();
+ sort();
+}
+
void ProxyModel::sort(int column, Qt::SortOrder order)
{
if (!isSorted || dynamicSortFilter()) {
diff --git a/models/proxymodel.h b/models/proxymodel.h
index a1e6fb8..fb185b0 100644
--- a/models/proxymodel.h
+++ b/models/proxymodel.h
@@ -45,6 +45,7 @@ public:
bool isEmpty() const { return filterGenre.isEmpty() && filterStrings.isEmpty() && 0==filter; }
bool enabled() const { return filterEnabled; }
const QString & filterText() const { return origFilterText; }
+ void resort();
void sort() { isSorted=false; sort(0); }
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
QList<int> mapToSourceRows(const QModelIndexList &list) const;
diff --git a/models/roles.h b/models/roles.h
index 14247e3..611d736 100644
--- a/models/roles.h
+++ b/models/roles.h
@@ -23,18 +23,22 @@
#ifndef ROLES_H
#define ROLES_H
+#include "config.h"
#include <QAbstractItemModel>
namespace Cantata {
enum Roles
{
// ItemView...
- Role_ImageSize = Qt::UserRole+100,
- Role_MainText,
+ Role_MainText = Qt::UserRole+100,
Role_BriefMainText,
Role_SubText,
Role_TitleText,
+ #ifdef ENABLE_UBUNTU
Role_Image,
+ #endif
+ Role_ListImage, // Should image been shown in list/tree view?
+ Role_CoverSong,
Role_Capacity,
Role_CapacityText,
Role_Actions,
@@ -43,6 +47,7 @@ namespace Cantata {
Role_Key,
Role_Id,
Role_Song,
+ Role_SongWithRating,
Role_AlbumDuration,
Role_Status,
Role_CurrentStatus,
@@ -57,6 +62,7 @@ namespace Cantata {
// TableView...
Role_Width,
+ Role_InitiallyHidden,
Role_Hideable,
// PlayQueueModel...
diff --git a/models/searchmodel.cpp b/models/searchmodel.cpp
index 067cb81..b99bfe2 100644
--- a/models/searchmodel.cpp
+++ b/models/searchmodel.cpp
@@ -26,6 +26,8 @@
#include "roles.h"
#include "mpd/mpdconnection.h"
#include "playqueuemodel.h"
+#include "gui/covers.h"
+#include "gui/settings.h"
#include <QString>
#include <QVariant>
#include <QMimeData>
@@ -63,6 +65,9 @@ SearchModel::SearchModel(QObject *parent)
{
connect(this, SIGNAL(search(QString,QString,int)), MPDConnection::self(), SLOT(search(QString,QString,int)));
connect(MPDConnection::self(), SIGNAL(searchResponse(int,QList<Song>)), this, SLOT(searchFinished(int,QList<Song>)));
+ #ifndef ENABLE_UBUNTU
+ connect(Covers::self(), SIGNAL(loaded(Song,int)), this, SLOT(coverLoaded(Song,int)));
+ #endif
}
SearchModel::~SearchModel()
@@ -107,8 +112,9 @@ QVariant SearchModel::headerData(int section, Qt::Orientation orientation, int r
case COL_YEAR:
return int(Qt::AlignVCenter|Qt::AlignRight);
}
+ case Cantata::Role_InitiallyHidden:
case Cantata::Role_Hideable:
- return COL_YEAR==section || COL_DISC==section || COL_GENRE==section || COL_COMPOSER==section || COL_PERFORMER==section ? true : false;
+ return COL_YEAR==section || COL_DISC==section || COL_GENRE==section || COL_COMPOSER==section || COL_PERFORMER==section;
case Cantata::Role_Width:
switch (section) {
case COL_DISC: return 0.03;
@@ -211,11 +217,21 @@ QVariant SearchModel::data(const QModelIndex &index, int role) const
}
return song->entryName();
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return song->toolTip();
case Cantata::Role_MainText:
return song->title.isEmpty() ? song->file : song->trackAndTitleStr();
case Cantata::Role_SubText:
return song->artist+QLatin1String(" - ")+song->displayAlbum();
+ case Cantata::Role_ListImage:
+ return true;
+ case Cantata::Role_CoverSong: {
+ QVariant v;
+ v.setValue<Song>(*song);
+ return v;
+ }
default:
return ActionModel::data(index, role);
}
@@ -325,3 +341,22 @@ void SearchModel::searchFinished(int id, const QList<Song> &result)
emit statsUpdated(songList.size(), time);
emit searched();
}
+
+void SearchModel::coverLoaded(const Song &song, int s)
+{
+ Q_UNUSED(s)
+ #ifdef ENABLE_UBUNTU
+ Q_UNUSED(song)
+ #else
+ if (!song.isArtistImageRequest()) {
+ int row=0;
+ foreach (const Song &s, songList) {
+ if (s.albumArtist()==song.albumArtist() && s.album==song.album) {
+ QModelIndex idx=index(row, 0, QModelIndex());
+ emit dataChanged(idx, idx);
+ }
+ row++;
+ }
+ }
+ #endif
+}
diff --git a/models/searchmodel.h b/models/searchmodel.h
index dbbd338..3b0395a 100644
--- a/models/searchmodel.h
+++ b/models/searchmodel.h
@@ -84,6 +84,7 @@ Q_SIGNALS:
private Q_SLOTS:
void searchFinished(int id, const QList<Song> &result);
+ void coverLoaded(const Song &song, int s);
private:
void clearItems();
diff --git a/models/streamsearchmodel.cpp b/models/streamsearchmodel.cpp
index 5daa47e..3c2c2cb 100644
--- a/models/streamsearchmodel.cpp
+++ b/models/streamsearchmodel.cpp
@@ -25,10 +25,11 @@
#include "widgets/icons.h"
#include "roles.h"
#include "support/localize.h"
-#include "gui/plurals.h"
#include "playqueuemodel.h"
#include "network/networkaccessmanager.h"
#include "gui/stdactions.h"
+#include "gui/settings.h"
+#include "gui/plurals.h"
#include <QString>
#include <QVariant>
#include <QXmlStreamReader>
@@ -111,6 +112,9 @@ QVariant StreamSearchModel::data(const QModelIndex &index, int role) const
case Qt::DisplayRole:
return item->name;
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return item->isCategory() ? item->name : (item->name+QLatin1String("<br><small><i>")+item->url+QLatin1String("</i></small>"));
case Cantata::Role_SubText:
if (item->isCategory()) {
diff --git a/models/streamsmodel.cpp b/models/streamsmodel.cpp
index dd977d9..533d603 100644
--- a/models/streamsmodel.cpp
+++ b/models/streamsmodel.cpp
@@ -553,15 +553,17 @@ StreamsModel::StreamsModel(QObject *parent)
configureAction = ActionCollection::get()->createAction("configurestreams", i18n("Configure Streams"), Icons::self()->configureIcon);
reloadAction = ActionCollection::get()->createAction("reloadstreams", i18n("Reload"), Icon("view-refresh"));
- // For Mac/Unity we try to hide icons from menubar menus. However, search is used in the menubar AND in the streams view. We
+ #ifdef UNITY_MENU_HACK
+ // For Unity we try to hide icons from menubar menus. However, search is used in the menubar AND in the streams view. We
// need the icon on the streams view. Therefore, if the StdAction has no icon - we create a new one and forward all signals...
if (StdActions::self()->searchAction->icon().isNull()) {
searchAction = new Action(Icon("edit-find"), StdActions::self()->searchAction->text(), this);
searchAction->setToolTip(StdActions::self()->searchAction->toolTip());
- connect(searchAction, SIGNAL(triggered(bool)), StdActions::self()->searchAction, SIGNAL(triggered(bool)));
connect(searchAction, SIGNAL(triggered()), StdActions::self()->searchAction, SIGNAL(triggered()));
connect(ActionCollection::get(), SIGNAL(tooltipUpdated(QAction *)), SLOT(tooltipUpdated(QAction *)));
- } else {
+ } else
+ #endif
+ {
searchAction = StdActions::self()->searchAction;
}
@@ -659,6 +661,9 @@ QVariant StreamsModel::data(const QModelIndex &index, int role) const
case Qt::DisplayRole:
return item->name;
case Qt::ToolTipRole:
+ if (!Settings::self()->infoTooltips()) {
+ return QVariant();
+ }
return item->isCategory() ? item->name : (item->name+QLatin1String("<br><small><i>")+item->url+QLatin1String("</i></small>"));
case Cantata::Role_SubText:
if (item->isCategory()) {
@@ -946,7 +951,7 @@ QModelIndex StreamsModel::favouritesIndex() const
static QString addDiHash(const StreamsModel::Item *item)
{
- return item->parent && item->parent->isDi()
+ return ( (item->parent && item->parent->isDi()) || DigitallyImported::self()->isDiUrl(item->url) )
? DigitallyImported::self()->modifyUrl(item->url) : item->url;
}
@@ -1156,9 +1161,13 @@ void StreamsModel::jobFinished()
// Required due to icon missing for StdActions::searchAction for Mac/Unity... See note in constructor above.
void StreamsModel::tooltipUpdated(QAction *act)
{
+ #ifdef UNITY_MENU_HACK
if (act!=searchAction && act==StdActions::self()->searchAction) {
searchAction->setToolTip(StdActions::self()->searchAction->toolTip());
}
+ #else
+ Q_UNUSED(act)
+ #endif
}
void StreamsModel::storedPlaylists(const QList<Playlist> &list)
@@ -1786,15 +1795,17 @@ StreamsModel::Item * StreamsModel::parseSomaFmEntry(QXmlStreamReader &doc, Categ
void StreamsModel::importOldFavourites()
{
- if (!favourites->importedOld && Settings::self()->version()<CANTATA_MAKE_VERSION(1,3,54)) {
- QString prevFile=Settings::self()->storeStreamsInMpdDir()
- ? MPDConnection::self()->getDetails().dir : Utils::dataDir(QString(), false);
+ if (!favourites->importedOld) {
+ if (Settings::self()->version()<CANTATA_MAKE_VERSION(1,3,54)) {
+ QString prevFile=Settings::self()->storeStreamsInMpdDir()
+ ? MPDConnection::self()->getDetails().dir : Utils::dataDir(QString(), false);
- if (!prevFile.isEmpty()) {
- prevFile+="streams.xml.gz";
- }
- if (!prevFile.isEmpty() && QFile::exists(prevFile)) {
- importIntoFavourites(prevFile);
+ if (!prevFile.isEmpty()) {
+ prevFile+="streams.xml.gz";
+ if (QFile::exists(prevFile)) {
+ importIntoFavourites(prevFile);
+ }
+ }
}
favourites->importedOld=true;
}
diff --git a/mpd/mpdconnection.cpp b/mpd/mpdconnection.cpp
index 2927a0b..2937acf 100644
--- a/mpd/mpdconnection.cpp
+++ b/mpd/mpdconnection.cpp
@@ -39,12 +39,15 @@
#include <QTimer>
#include <QDir>
#include <QHostInfo>
+#include <QDateTime>
#include <QPropertyAnimation>
#include "support/thread.h"
#include "gui/settings.h"
#include "cuefile.h"
-#ifdef QT_QTDBUS_FOUND
+#if defined Q_OS_LINUX && defined QT_QTDBUS_FOUND
#include "dbus/powermanagement.h"
+#elif defined Q_OS_MAC && defined IOKIT_FOUND
+#include "mac/powermanagement.h"
#endif
#include <QDebug>
static bool debugEnabled=false;
@@ -54,10 +57,14 @@ void MPDConnection::enableDebug()
debugEnabled=true;
}
+// Uncomment the following to report error strings in MPDStatus to the UI
+// ...disabled, as stickers (for ratings) can cause lots of errors to be reported - and these all need clearing, etc.
+// #define REPORT_MPD_ERRORS
static const int constSocketCommsTimeout=2000;
static const int constMaxReadAttempts=4;
static int maxFilesPerAddCommand=10000;
static bool alwaysUseLsInfo=false;
+static int seekStep=5;
static const QByteArray constOkValue("OK");
static const QByteArray constOkMpdValue("OK MPD");
@@ -72,13 +79,14 @@ static const QByteArray constIdlePlayerValue("player");
static const QByteArray constIdleMixerValue("mixer");
static const QByteArray constIdleOptionsValue("options");
static const QByteArray constIdleOutputValue("output");
-//static const QByteArray constIdleStickerValue("sticker");
+static const QByteArray constIdleStickerValue("sticker");
static const QByteArray constIdleSubscriptionValue("subscription");
static const QByteArray constIdleMessageValue("message");
#ifdef ENABLE_DYNAMIC
static const QByteArray constDynamicIn("cantata-dynamic-in");
static const QByteArray constDynamicOut("cantata-dynamic-out");
#endif
+static const QByteArray constRatingSticker("rating");
static inline int socketTimeout(int dataSize)
{
@@ -97,6 +105,8 @@ static QByteArray log(const QByteArray &data)
GLOBAL_STATIC(MPDConnection, instance)
+QString MPDConnection::constModifiedSince=QLatin1String("modified-since");
+
QByteArray MPDConnection::quote(int val)
{
return '\"'+QByteArray::number(val)+'\"';
@@ -157,7 +167,7 @@ QString MPDConnection::Response::getError(const QByteArray &command)
if (!ok && data.size()>0) {
int cmdEnd=data.indexOf("} ");
if (-1==cmdEnd) {
- return i18n("Uknown")+QLatin1String(" (")+command+QLatin1Char(')');
+ return i18n("Unknown")+QLatin1String(" (")+command+QLatin1Char(')');
} else {
cmdEnd+=2;
QString rv=data.mid(cmdEnd, data.length()-(data.endsWith('\n') ? cmdEnd+1 : cmdEnd));
@@ -165,6 +175,16 @@ QString MPDConnection::Response::getError(const QByteArray &command)
// NOTE: NOT translated, as refers to config item
return QLatin1String("playlist_directory - ")+rv;
}
+
+ // If we are reporting a stream error, remove any stream name added by Cantata...
+ int start=rv.indexOf(QLatin1String("http://"));
+ if (start>0) {
+ int pos=rv.indexOf(QChar('#'), start+6);
+ if (-1!=pos) {
+ rv=rv.left(pos);
+ }
+ }
+
return rv;
}
}
@@ -237,13 +257,17 @@ MPDConnection::MPDConnection()
qRegisterMetaType<MPDConnectionDetails>("MPDConnectionDetails");
qRegisterMetaType<Stream>("Stream");
qRegisterMetaType<QList<Stream> >("QList<Stream>");
- #ifdef QT_QTDBUS_FOUND
+ #if (defined Q_OS_LINUX && defined QT_QTDBUS_FOUND) || (defined Q_OS_MAC && defined IOKIT_FOUND)
connect(PowerManagement::self(), SIGNAL(resuming()), this, SLOT(reconnect()));
#endif
#ifndef ENABLE_UBUNTU
maxFilesPerAddCommand=Settings::self()->mpdListSize();
alwaysUseLsInfo=Settings::self()->alwaysUseLsInfo();
+ seekStep=Settings::self()->seekStep();
#endif
+ connTimer=new QTimer(this);
+ connect(connTimer, SIGNAL(timeout()), SLOT(getStatus()));
+ connTimer->setSingleShot(false);
}
MPDConnection::~MPDConnection()
@@ -385,6 +409,7 @@ QString MPDConnection::errorString(ConnectionReturn status) const
MPDConnection::ConnectionReturn MPDConnection::connectToMPD()
{
+ connTimer->stop();
if (State_Connected==state && (QAbstractSocket::ConnectedState!=sock.state() || QAbstractSocket::ConnectedState!=idleSocket.state())) {
DBUG << "Something has gone wrong with sockets, so disconnect";
disconnectFromMPD();
@@ -397,13 +422,14 @@ MPDConnection::ConnectionReturn MPDConnection::connectToMPD()
disconnectFromMPD();
state=State_Disconnected;
}
-
+ connTimer->start(30000);
return status;
}
void MPDConnection::disconnectFromMPD()
{
DBUG << "disconnectFromMPD";
+ connTimer->stop();
disconnect(&idleSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState)));
disconnect(&idleSocket, SIGNAL(readyRead()), this, SLOT(idleDataReady()));
if (QAbstractSocket::ConnectedState==sock.state()) {
@@ -550,6 +576,8 @@ void MPDConnection::setDetails(const MPDConnectionDetails &d)
MPDConnection::Response MPDConnection::sendCommand(const QByteArray &command, bool emitErrors, bool retry)
{
+ connTimer->stop();
+ static bool reconnected=false; // If we reconnect, and send playlistinfo - dont want that call causing reconnects, and recursion!
DBUG << (void *)(&sock) << "sendCommand:" << log(command) << emitErrors << retry;
if (!isConnected()) {
@@ -557,7 +585,7 @@ MPDConnection::Response MPDConnection::sendCommand(const QByteArray &command, bo
return Response(false);
}
- if (QAbstractSocket::ConnectedState!=sock.state()) {
+ if (QAbstractSocket::ConnectedState!=sock.state() && !reconnected) {
DBUG << (void *)(&sock) << "Socket (state:" << sock.state() << ") need to reconnect";
sock.close();
ConnectionReturn status=connectToMPD(sock);
@@ -567,6 +595,12 @@ MPDConnection::Response MPDConnection::sendCommand(const QByteArray &command, bo
emit stateChanged(false);
emit error(errorString(status), true);
return Response(false);
+ } else {
+ // Refresh playqueue...
+ reconnected=true;
+ playListInfo();
+ getStatus();
+ reconnected=false;
}
}
@@ -586,7 +620,7 @@ MPDConnection::Response MPDConnection::sendCommand(const QByteArray &command, bo
if (!response.ok) {
DBUG << log(command) << "failed";
- if (response.data.isEmpty() && retry && QAbstractSocket::ConnectedState!=sock.state()) {
+ if (response.data.isEmpty() && retry && QAbstractSocket::ConnectedState!=sock.state() && !reconnected) {
// Try one more time...
// This scenario, where socket seems to be closed during/after 'write' seems to occur more often
// when dynamizer is running. However, simply reconnecting seems to resolve the issue.
@@ -629,6 +663,11 @@ MPDConnection::Response MPDConnection::sendCommand(const QByteArray &command, bo
}
}
DBUG << (void *)(&sock) << "sendCommand - sent";
+ if (QAbstractSocket::ConnectedState==sock.state()) {
+ connTimer->start(30000);
+ } else {
+ connTimer->stop();
+ }
return response;
}
@@ -733,7 +772,7 @@ void MPDConnection::add(const QStringList &origList, quint32 pos, quint32 size,
if (AddReplaceAndPlay==action /*&& addedFile */&& !origList.isEmpty()) {
// Dont emit error if fail plays, might be that playlist was not loaded...
- sendCommand("play "+quote(0), false);
+ playFirstTrack(false);
}
emit added(origList);
}
@@ -854,7 +893,7 @@ void MPDConnection::currentSong()
*/
void MPDConnection::playListChanges()
{
- DBUG << lastUpdatePlayQueueVersion << playQueueIds.size();
+ DBUG << "playListChanges" << lastUpdatePlayQueueVersion << playQueueIds.size();
if (0==lastUpdatePlayQueueVersion || 0==playQueueIds.size()) {
playListInfo();
return;
@@ -1048,9 +1087,33 @@ void MPDConnection::setPause(bool toggle)
void MPDConnection::play()
{
+ playFirstTrack(true);
+}
+
+void MPDConnection::playFirstTrack(bool emitErrors)
+{
toggleStopAfterCurrent(false);
stopVolumeFade();
- sendCommand("play");
+ sendCommand("play 0", emitErrors);
+}
+
+void MPDConnection::seek(bool fwd)
+{
+ qWarning() << fwd;
+ toggleStopAfterCurrent(false);
+ Response response=sendCommand("status");
+ if (response.ok) {
+ MPDStatusValues sv=MPDParseUtils::parseStatus(response.data);
+ if (fwd) {
+ if (sv.timeElapsed+seekStep<sv.timeTotal) {
+ setSeek(sv.song, sv.timeElapsed+seekStep);
+ } else {
+ goToNext();
+ }
+ } else {
+ setSeek(sv.song, sv.timeElapsed>=seekStep ? sv.timeElapsed-seekStep : 0);
+ }
+ }
}
//void MPDConnection::startPlayingSong(quint32 song)
@@ -1095,7 +1158,6 @@ void MPDConnection::setSingle(bool toggle)
void MPDConnection::setSeek(quint32 song, quint32 time)
{
- toggleStopAfterCurrent(false);
sendCommand("seek "+quote(song)+' '+quote(time));
}
@@ -1120,12 +1182,12 @@ void MPDConnection::setSeekId(qint32 songId, quint32 time)
void MPDConnection::setVolume(int vol) //Range accepted by MPD: 0-100
{
if (-1==vol) {
- if (volumeFade) {
- sendCommand("stop");
- }
if (restoreVolume>=0) {
sendCommand("setvol "+quote(restoreVolume), false);
}
+ if (volumeFade) {
+ sendCommand("stop");
+ }
restoreVolume=-1;
} else if (vol>=0) {
unmuteVol=-1;
@@ -1187,6 +1249,7 @@ void MPDConnection::getStatus()
stopVolumeFade();
}
if (stopAfterCurrent && (currentSongId!=sv.songId || (songPos>0 && sv.timeElapsed<(qint32)songPos))) {
+ stopVolumeFade();
if (sendCommand("stop").ok) {
sv.state=MPDState_Stopped;
}
@@ -1256,7 +1319,7 @@ void MPDConnection::onSocketStateChanged(QAbstractSocket::SocketState socketStat
emit error(errorString(status), true);
}
if (QAbstractSocket::ConnectedState==idleSocket.state()) {
- connect(&idleSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState)));
+ connect(&idleSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState)), Qt::QueuedConnection);
}
}
}
@@ -1271,6 +1334,10 @@ void MPDConnection::parseIdleReturn(const QByteArray &data)
Response response(data.endsWith(constOkNlValue), data);
if (!response.ok) {
DBUG << "idle failed? reconnect";
+ disconnect(&idleSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onSocketStateChanged(QAbstractSocket::SocketState)));
+ if (QAbstractSocket::ConnectedState==idleSocket.state()) {
+ idleSocket.disconnectFromHost();
+ }
idleSocket.close();
ConnectionReturn status=connectToMPD(idleSocket, true);
if (Success!=status) {
@@ -1298,6 +1365,7 @@ void MPDConnection::parseIdleReturn(const QByteArray &data)
playListInfo();
playListUpdated=true;
} else if (constIdleUpdateValue==value) {
+ getStats();
getStatus();
} else if (constIdleStoredPlaylistValue==value) {
listPlaylists();
@@ -1311,6 +1379,8 @@ void MPDConnection::parseIdleReturn(const QByteArray &data)
statusUpdated=true;
} else if (constIdleOutputValue==value) {
outputs();
+ } else if (constIdleStickerValue==value) {
+ emit stickerDbChanged();
}
#ifdef ENABLE_DYNAMIC
else if (constIdleSubscriptionValue==value) {
@@ -1339,7 +1409,9 @@ void MPDConnection::outputs()
void MPDConnection::enableOutput(int id, bool enable)
{
- sendCommand((enable ? "enableoutput " : "disableoutput ")+quote(id));
+ if (sendCommand((enable ? "enableoutput " : "disableoutput ")+quote(id)).ok) {
+ outputs();
+ }
}
/*
@@ -1427,6 +1499,9 @@ void MPDConnection::loadPlaylist(const QString &name, bool replace)
}
if (sendCommand("load "+encodeName(name)).ok) {
+ if (replace) {
+ playFirstTrack(false);
+ }
emit playlistLoaded(name);
}
}
@@ -1540,10 +1615,39 @@ void MPDConnection::setPriority(const QList<qint32> &ids, quint8 priority)
void MPDConnection::search(const QString &field, const QString &value, int id)
{
QList<Song> songs;
- Response response=sendCommand("search "+field.toLatin1()+" "+encodeName(value));
- if (response.ok) {
- songs=MPDParseUtils::parseSongs(response.data, MPDParseUtils::Loc_Search);
- qSort(songs);
+ QByteArray cmd;
+
+ if (constModifiedSince==field) {
+ QString dateVal;
+ if (value.length()>7 && (value.contains(QLatin1Char('/')) || value.contains(QLatin1Char('-')))) {
+ QDateTime dt=QDateTime::fromString(value, Qt::SystemLocaleShortDate);
+ if (!dt.isValid()) {
+ dt=QDateTime::fromString(value, Qt::DefaultLocaleShortDate);
+ }
+ if (!dt.isValid()) {
+ dt=QDateTime::fromString(value, Qt::ISODate);
+ }
+ if (dt.isValid()) {
+ cmd="find "+field.toLatin1()+" "+encodeName(dt.toString(Qt::ISODate));
+ }
+ }
+ if (dateVal.isEmpty() && !value.contains(QLatin1Char('/')) && !value.contains(QLatin1Char('-'))) {
+ bool ok=false;
+ int numDays=value.simplified().trimmed().toInt(&ok);
+ if (ok && numDays<0xFFFF) {
+ cmd="find "+field.toLatin1()+" "+quote(QDateTime::currentDateTime().toTime_t()-(numDays*24*60*60));
+ }
+ }
+ } else {
+ cmd="search "+field.toLatin1()+" "+encodeName(value);
+ }
+
+ if (!cmd.isEmpty()) {
+ Response response=sendCommand(cmd);
+ if (response.ok) {
+ songs=MPDParseUtils::parseSongs(response.data, MPDParseUtils::Loc_Search);
+ qSort(songs);
+ }
}
emit searchResponse(id, songs);
}
@@ -1828,6 +1932,86 @@ int MPDConnection::getVolume()
return -1;
}
+void MPDConnection::setRating(const QString &file, quint8 val)
+{
+ if (val>Song::Rating_Max) {
+ return;
+ }
+
+ bool ok=0==val
+ ? sendCommand("sticker delete song "+encodeName(file)+' '+constRatingSticker, 0!=val).ok
+ : sendCommand("sticker set song "+encodeName(file)+' '+constRatingSticker+' '+quote(val)).ok;
+
+ if (!ok && 0==val) {
+ clearError();
+ }
+
+ if (ok) {
+ emit rating(file, val);
+ } else {
+ getRating(file);
+ }
+}
+
+void MPDConnection::setRating(const QStringList &files, quint8 val)
+{
+ if (1==files.count()) {
+ setRating(files.at(0), val);
+ return;
+ }
+
+ QList<QStringList> fileLists;
+ if (files.count()>maxFilesPerAddCommand) {
+ int numChunks=(files.count()/maxFilesPerAddCommand)+(files.count()%maxFilesPerAddCommand ? 1 : 0);
+ for (int i=0; i<numChunks; ++i) {
+ fileLists.append(files.mid(i*maxFilesPerAddCommand, maxFilesPerAddCommand));
+ }
+ } else {
+ fileLists.append(files);
+ }
+
+ bool ok=true;
+ foreach (const QStringList &list, fileLists) {
+ QByteArray cmd = "command_list_begin\n";
+
+ foreach (const QString &f, list) {
+ if (0==val) {
+ cmd+="sticker delete song "+encodeName(f)+' '+constRatingSticker+'\n';
+ } else {
+ cmd+="sticker set song "+encodeName(f)+' '+constRatingSticker+' '+quote(val)+'\n';
+ }
+ }
+
+ cmd += "command_list_end";
+ ok=sendCommand(cmd, 0!=val).ok;
+ if (!ok) {
+ break;
+ }
+ }
+
+ if (!ok && 0==val) {
+ clearError();
+ }
+}
+
+void MPDConnection::getRating(const QString &file)
+{
+ quint8 r=0;
+ Response resp=sendCommand("sticker get song "+encodeName(file)+' '+constRatingSticker, false);
+ if (resp.ok) {
+ QByteArray val=MPDParseUtils::parseSticker(resp.data, constRatingSticker);
+ if (!val.isEmpty()) {
+ r=val.toUInt();
+ }
+ } else { // Ignore errors about uknown sticker...
+ clearError();
+ }
+ if (r>Song::Rating_Max) {
+ r=0;
+ }
+ emit rating(file, r);
+}
+
bool MPDConnection::fadingVolume()
{
return volumeFade && QPropertyAnimation::Running==volumeFade->state();
@@ -1871,6 +2055,9 @@ void MPDConnection::emitStatusUpdated(MPDStatusValues &v)
if (restoreVolume>=0) {
v.volume=restoreVolume;
}
+ #ifndef REPORT_MPD_ERRORS
+ v.error=QString();
+ #endif
emit statusUpdated(v);
if (!v.error.isEmpty()) {
clearError();
@@ -1879,6 +2066,7 @@ void MPDConnection::emitStatusUpdated(MPDStatusValues &v)
void MPDConnection::clearError()
{
+ #ifdef REPORT_MPD_ERRORS
if (isConnected()) {
DBUG << __FUNCTION__;
if (-1!=sock.write("clearerror\n")) {
@@ -1886,6 +2074,7 @@ void MPDConnection::clearError()
readReply(sock);
}
}
+ #endif
}
MpdSocket::MpdSocket(QObject *parent)
diff --git a/mpd/mpdconnection.h b/mpd/mpdconnection.h
index 7dc666a..93d8683 100644
--- a/mpd/mpdconnection.h
+++ b/mpd/mpdconnection.h
@@ -184,9 +184,10 @@ public:
{
MinFade = 400,
MaxFade = 4000,
- DefaultFade = 2000
+ DefaultFade = MinFade // disable volume fade by default. prev:2000
};
+ static QString constModifiedSince;
static MPDConnection * self();
static QByteArray quote(int val);
static QByteArray encodeName(const QString &name);
@@ -223,6 +224,7 @@ public:
bool isMuted() { return -1!=unmuteVol; }
bool isMopdidy() const { return mopidy; }
void setVolumeFadeDuration(int f) { fadeDuration=f; }
+ QString ipAddress() const { return details.isLocal() ? QString() : sock.address(); }
public Q_SLOTS:
void reconnect();
@@ -308,6 +310,13 @@ public Q_SLOTS:
void sendDynamicMessage(const QStringList &msg);
int getVolume();
+ void setRating(const QString &file, quint8 val);
+ void setRating(const QStringList &files, quint8 val);
+ void getRating(const QString &file);
+
+ void forward() { seek(true); }
+ void reverse() { seek(false); }
+
Q_SIGNALS:
void stateChanged(bool connected);
void passwordError();
@@ -356,6 +365,9 @@ Q_SIGNALS:
void dynamicSupport(bool e);
void dynamicResponse(const QStringList &resp);
+ void rating(const QString &file, quint8 val);
+ void stickerDbChanged();
+
private Q_SLOTS:
void idleDataReady();
void onSocketStateChanged(QAbstractSocket::SocketState socketState);
@@ -391,6 +403,9 @@ private:
void stopVolumeFade();
void emitStatusUpdated(MPDStatusValues &v);
void clearError();
+ void getRatings(QList<Song> &songs);
+ void playFirstTrack(bool emitErrors);
+ void seek(bool fwd);
private:
Thread *thread;
@@ -403,6 +418,7 @@ private:
// Cant use 1, as we could write a command just as an idle event is ready to read
MpdSocket sock;
MpdSocket idleSocket;
+ QTimer *connTimer;
#ifdef ENABLE_DYNAMIC
QByteArray dynamicId;
#endif
diff --git a/mpd/mpdparseutils.cpp b/mpd/mpdparseutils.cpp
index 43206fa..f3940fe 100644
--- a/mpd/mpdparseutils.cpp
+++ b/mpd/mpdparseutils.cpp
@@ -51,6 +51,7 @@
#include "mpdconnection.h"
#ifdef ENABLE_ONLINE_SERVICES
#include "online/onlineservice.h"
+#include "online/podcastservice.h"
#endif
#include <QDebug>
@@ -65,6 +66,9 @@ static const QByteArray constTimeKey("Time: ");
static const QByteArray constAlbumKey("Album: ");
static const QByteArray constArtistKey("Artist: ");
static const QByteArray constAlbumArtistKey("AlbumArtist: ");
+static const QByteArray constAlbumSortKey("AlbumSort: ");
+static const QByteArray constArtistSortKey("ArtistSort: ");
+static const QByteArray constAlbumArtistSortKey("AlbumArtistSort: ");
static const QByteArray constComposerKey("Composer: ");
static const QByteArray constPerformerKey("Performer: ");
static const QByteArray constCommentKey("Comment: ");
@@ -227,6 +231,12 @@ MPDStatusValues MPDParseUtils::parseStatus(const QByteArray &data)
} else if (line.startsWith(constStatusBitrateKey)) {
v.bitrate=line.mid(constStatusBitrateKey.length()).toUInt();
} else if (line.startsWith(constStatusAudioKey)) {
+ QList<QByteArray> values=line.mid(constStatusAudioKey.length()).split(':');
+ if (3==values.length()) {
+ v.samplerate=values.at(0).toUInt();
+ v.bits=values.at(1).toUInt();
+ v.channels=values.at(2).toUInt();
+ }
} else if (line.startsWith(constStatusUpdatingDbKey)) {
v.updatingDb=line.mid(constStatusUpdatingDbKey.length()).toInt();
} else if (line.startsWith(constStatusErrorKey)) {
@@ -245,7 +255,7 @@ MPDStatusValues MPDParseUtils::parseStatus(const QByteArray &data)
return v;
}
-static QSet<QString> constStdProtocols=QSet<QString>() << QLatin1String("http://")
+static QSet<QString> constStdProtocols=QSet<QString>() << constHttpProtocol
<< QLatin1String("https://")
<< QLatin1String("mms://")
<< QLatin1String("mmsh://")
@@ -277,18 +287,17 @@ Song MPDParseUtils::parseSong(const QList<QByteArray> &lines, Location location)
} else if (line.startsWith(constTitleKey)) {
song.title =QString::fromUtf8(line.mid(constTitleKey.length()));
} else if (line.startsWith(constTrackKey)) {
- song.track = line.mid(constTrackKey.length()).split('/').at(0).toInt();
+ int v=line.mid(constTrackKey.length()).split('/').at(0).toInt();
+ song.track = v<0 ? 0 : v;
} else if (Loc_Library!=location && Loc_Search!=location && line.startsWith(constIdKey)) {
song.id = line.mid(constIdKey.length()).toUInt();
} else if (line.startsWith(constDiscKey)) {
- song.disc = line.mid(constDiscKey.length()).split('/').at(0).toInt();
+ int v = line.mid(constDiscKey.length()).split('/').at(0).toInt();
+ song.disc = v<0 ? 0 : v;
} else if (line.startsWith(constDateKey)) {
QByteArray value=line.mid(constDateKey.length());
- if (value.length()>4) {
- song.year = value.left(4).toUInt();
- } else {
- song.year = value.toUInt();
- }
+ int v=value.length()>4 ? value.left(4).toUInt() : value.toUInt();
+ song.year=v<0 ? 0 : v;
} else if (line.startsWith(constGenreKey)) {
song.addGenre(QString::fromUtf8(line.mid(constGenreKey.length())));
} else if (line.startsWith(constNameKey)) {
@@ -301,13 +310,25 @@ Song MPDParseUtils::parseSong(const QList<QByteArray> &lines, Location location)
song.setMbAlbumId(line.mid(constAlbumId.length()));
} else if ((Loc_Search==location || Loc_Playlists==location || Loc_PlayQueue==location) &&
line.startsWith(constPerformerKey)) {
- song.setPerformer(QString::fromUtf8(line.mid(constPerformerKey.length())));
+ if (song.hasPerformer()) {
+ song.setPerformer(song.performer()+QLatin1String(", ")+QString::fromUtf8(line.mid(constPerformerKey.length())));
+ } else {
+ song.setPerformer(QString::fromUtf8(line.mid(constPerformerKey.length())));
+ }
} else if (Loc_PlayQueue==location) {
if (line.startsWith(constPriorityKey)) {
song.priority = line.mid(constPriorityKey.length()).toUInt();
} else if (line.startsWith(constCommentKey)) {
song.setComment(QString::fromUtf8(line.mid(constCommentKey.length())));
}
+ } else if (Loc_Library==location) {
+ if (line.startsWith(constAlbumSortKey)) {
+ song.setAlbumSort(QString::fromUtf8(line.mid(constAlbumSortKey.length())));
+ } else if (line.startsWith(constArtistSortKey)) {
+ song.setArtistSort(QString::fromUtf8(line.mid(constArtistSortKey.length())));
+ } else if (line.startsWith(constAlbumArtistSortKey)) {
+ song.setAlbumArtistSort(QString::fromUtf8(line.mid(constAlbumArtistSortKey.length())));
+ }
}
}
@@ -347,7 +368,6 @@ Song MPDParseUtils::parseSong(const QList<QByteArray> &lines, Location location)
}
}
-
if (!song.file.isEmpty()) {
if (song.isStream()) {
if (song.isCantataStream()) {
@@ -362,7 +382,8 @@ Song MPDParseUtils::parseSong(const QList<QByteArray> &lines, Location location)
#ifdef ENABLE_ONLINE_SERVICES
if (OnlineService::decode(song)) {
modifiedFile=true;
- } else
+ }
+ else
#endif
{
QString name=getAndRemoveStreamName(song.file);
@@ -386,6 +407,14 @@ Song MPDParseUtils::parseSong(const QList<QByteArray> &lines, Location location)
}
song.file=origFile;
song.setKey(location);
+
+ #ifdef ENABLE_ONLINE_SERVICES
+ // Check for downloaded podcasts played via local file playback
+ if (Song::OnlineSvrTrack!=song.type && PodcastService::isPodcastFile(song.file)) {
+ song.setIsFromOnlineService(PodcastService::constName);
+ song.albumartist=song.artist=PodcastService::constName;
+ }
+ #endif
}
return song;
}
@@ -548,7 +577,7 @@ void MPDParseUtils::parseLibraryItems(const QByteArray &data, const QString &mpd
DBUG << "Got playlist item" << currentSong.file << "prevFile:" << prevSongFile;
- bool parseCue=canSplitCue && currentSong.isCueFile() && !mpdDir.startsWith("http://") && QFile::exists(mpdDir+currentSong.file);
+ bool parseCue=canSplitCue && currentSong.isCueFile() && !mpdDir.startsWith(constHttpProtocol) && QFile::exists(mpdDir+currentSong.file);
bool cueParseStatus=false;
if (parseCue) {
DBUG << "Parsing cue file:" << currentSong.file << "mpdDir:" << mpdDir;
@@ -796,6 +825,18 @@ QList<Output> MPDParseUtils::parseOuputs(const QByteArray &data)
return outputs;
}
+static const QByteArray constSticker("sticker: ");
+QByteArray MPDParseUtils::parseSticker(const QByteArray &data, const QByteArray &sticker)
+{
+ QList<QByteArray> lines = data.split('\n');
+ QByteArray key=constSticker+sticker+'=';
+ foreach (const QByteArray &line, lines) {
+ if (line.startsWith(key)) {
+ return line.mid(key.length());
+ }
+ }
+ return QByteArray();
+}
QString MPDParseUtils::addStreamName(const QString &url, const QString &name)
{
diff --git a/mpd/mpdparseutils.h b/mpd/mpdparseutils.h
index 8adc270..9979a0a 100644
--- a/mpd/mpdparseutils.h
+++ b/mpd/mpdparseutils.h
@@ -79,6 +79,7 @@ namespace MPDParseUtils
QSet<QString> *childDirs=0);
extern DirViewItemRoot * parseDirViewItems(const QByteArray &data, bool isMopidy);
extern QList<Output> parseOuputs(const QByteArray &data);
+ extern QByteArray parseSticker(const QByteArray &data, const QByteArray &sticker);
extern QString addStreamName(const QString &url, const QString &name);
extern QString getStreamName(const QString &url);
extern QString getAndRemoveStreamName(QString &url);
diff --git a/mpd/mpdstatus.h b/mpd/mpdstatus.h
index 1a56eeb..75a5aad 100644
--- a/mpd/mpdstatus.h
+++ b/mpd/mpdstatus.h
@@ -44,7 +44,7 @@ struct MPDStatusValues {
, single(false)
, random(false)
, playlist(0)
- , playlistLength(-1)
+ , playlistLength(0)
, crossFade(0)
, state(MPDState_Inactive)
, song(-1)
diff --git a/mpd/song.cpp b/mpd/song.cpp
index 8161059..4e311a5 100644
--- a/mpd/song.cpp
+++ b/mpd/song.cpp
@@ -143,10 +143,9 @@ void Song::setUseComposer(bool u)
useComposerIfSet=u;
}
-const quint16 Song::constNullKey(0xFFFF);
-
Song::Song()
- : disc(0)
+ : extraFields(0)
+ , disc(0)
, priority(0)
, time(0)
, track(0)
@@ -155,7 +154,8 @@ Song::Song()
, guessed(false)
, id(-1)
, size(0)
- , key(constNullKey)
+ , rating(Rating_Null)
+ , key(Null_Key)
{
}
@@ -175,10 +175,12 @@ Song & Song::operator=(const Song &s)
year = s.year;
genre = s.genre;
size = s.size;
+ rating = s.rating;
key = s.key;
type = s.type;
guessed = s.guessed;
extra = s.extra;
+ extraFields = s.extraFields;
return *this;
}
@@ -194,6 +196,10 @@ bool Song::operator<(const Song &o) const
int Song::compareTo(const Song &o) const
{
+ //
+ // NOTE: This compare DOES NOT use XXXSORT tags
+ //
+
if (type!=o.type) {
return type<o.type ? -1 : 1;
}
@@ -536,12 +542,14 @@ QString Song::toolTip() const
#endif
}
-void Song::setExtraField(int f, const QString &v)
+void Song::setExtraField(quint16 f, const QString &v)
{
if (v.isEmpty()) {
extra.remove(f);
+ extraFields&=~f;
} else {
extra[f]=v;
+ extraFields|=f;
}
}
@@ -630,7 +638,8 @@ bool Song::capitalise()
}
*/
- return artist!=origArtist || albumartist!=origAlbumArtist || album!=origAlbum || title!=origTitle;
+ return artist!=origArtist || albumartist!=origAlbumArtist || album!=origAlbum || title!=origTitle ||
+ (!c.isEmpty() && c!=composer()) /*|| (!p.isEmpty() && p!=performer())*/ ;
}
QString Song::albumKey() const
diff --git a/mpd/song.h b/mpd/song.h
index fb88a51..2bc3ac1 100644
--- a/mpd/song.h
+++ b/mpd/song.h
@@ -37,25 +37,40 @@
struct Song
{
- static const quint16 constNullKey;
+ enum Constants {
+ Null_Key = 0xFFFF,
+
+ Rating_Step = 2,
+ Rating_Max = 10,
+ Rating_Requested = 0xFE,
+ Rating_Null = 0xFF
+ };
+
static const QLatin1Char constGenreSep;
static bool useComposer();
static void setUseComposer(bool u);
enum ExtraTags {
- Composer,
- Performer,
- Comment,
- MusicBrainzAlbumId,
- Name,
+ Composer = 0x0001,
+ Performer = 0x0002,
+ Comment = 0x0004,
+ MusicBrainzAlbumId = 0x0008,
+ Name = 0x0010,
+
+ AlbumSort = 0x0020,
+ ArtistSort = 0x0040,
+ AlbumArtistSort = 0x0080,
// These are not real tags - but fields used elsewhere in the code...
- PodcastPublishedDate,
- PodcastLocalPath,
- PodcastImage,
- OnlineServiceName,
- DecodedPath
+ PodcastPublishedDate = 0x0100,
+ PodcastLocalPath = 0x0200,
+ PodcastImage = 0x0400,
+ OnlineServiceName = 0x0800,
+ OnlineImageUrl = 0x1000,
+ OnlineImageCacheName = 0x2000,
+ DeviceId = 0x4000,
+ DecodedPath = 0x8000
};
enum Type {
@@ -74,7 +89,8 @@ struct Song
QString albumartist;
QString title;
QString genre;
- QHash<int, QString> extra;
+ QHash<quint16, QString> extra;
+ quint16 extraFields;
quint8 disc;
mutable quint8 priority;
quint16 time;
@@ -84,6 +100,7 @@ struct Song
mutable bool guessed : 1;
qint32 id;
qint32 size;
+ mutable quint8 rating;
// Only used in PlayQueue/PlayLists...
quint16 key;
@@ -111,6 +128,7 @@ struct Song
int compareTo(const Song &o) const;
virtual ~Song() { }
bool isEmpty() const;
+ bool isDifferent(const Song &s) const { return year!=s.year || artist!=s.artist || album!=s.album || title!=s.title || name()!=s.name(); }
void guessTags();
void revertGuessedTags();
void fillEmptyFields();
@@ -130,18 +148,37 @@ struct Song
QString toolTip() const;
QString displayGenre() const { return QString(genre).replace(constGenreSep, QLatin1String(", ")); }
- QString extraField(int f) const { return extra[f]; }
- void setExtraField(int f, const QString &v);
+ QString extraField(quint16 f) const { return hasExtraField(f) ? extra[f] : QString(); }
+ bool hasExtraField(quint16 f) const { return extraFields&f; }
+ void setExtraField(quint16 f, const QString &v);
QString name() const { return extraField(Name); }
void setName(const QString &v) { setExtraField(Name, v); }
+ bool hasName() const { return hasExtraField(Name); }
+
QString mbAlbumId() const { return extraField(MusicBrainzAlbumId); }
void setMbAlbumId(const QString &v) { setExtraField(MusicBrainzAlbumId, v); }
+ bool hasMbAlbumId() const { return hasExtraField(MusicBrainzAlbumId); }
QString composer() const { return extraField(Composer); }
void setComposer(const QString &v) { setExtraField(Composer, v); }
+ bool hasComposer() const { return hasExtraField(Composer); }
QString performer() const { return extraField(Performer); }
void setPerformer(const QString &v) { setExtraField(Performer, v); }
+ bool hasPerformer() const { return hasExtraField(Performer); }
QString comment() const { return extraField(Comment); }
void setComment(const QString &v) { setExtraField(Comment, v); }
+ bool hasComment() const { return hasExtraField(Comment); }
+ QString albumSort() const { return extraField(AlbumSort); }
+ void setAlbumSort(const QString &v) { setExtraField(AlbumSort, v); }
+ bool hasAlbumSort() const { return hasExtraField(AlbumSort); }
+ QString artistSort() const { return extraField(ArtistSort); }
+ void setArtistSort(const QString &v) { setExtraField(ArtistSort, v); }
+ bool hasArtistSort() const { return hasExtraField(ArtistSort); }
+ QString albumArtistSort() const { return extraField(AlbumArtistSort); }
+ void setAlbumArtistSort(const QString &v) { setExtraField(AlbumArtistSort, v); }
+ bool hasAlbumArtistSort() const { return hasExtraField(AlbumArtistSort); }
+
+ QString artistSortString() const { return hasAlbumArtistSort() ? albumArtistSort() : hasArtistSort() ? artistSort() : QString(); }
+
void clearExtra() { extra.clear(); }
static bool isVariousArtists(const QString &str);
@@ -199,11 +236,17 @@ struct Song
QString decodedPath() const { return extraField(DecodedPath); }
void setDecodedPath(const QString &v) { setExtraField(DecodedPath, v); }
+ bool hasDecodedPath() const { return hasExtraField(DecodedPath); }
// podcast/soundcloud functions...
void setIsFromOnlineService(const QString &service) { setExtraField(OnlineServiceName, service); }
- bool isFromOnlineService() const { return extra.contains(OnlineServiceName); }
+ bool isFromOnlineService() const { return hasExtraField(OnlineServiceName); }
QString onlineService() const { return extraField(OnlineServiceName); }
+
+ // device functions...
+ void setIsFromDevice(const QString &id) { setExtraField(DeviceId, id); }
+ bool isFromDevice() const { return hasExtraField(DeviceId); }
+ QString deviceId() const { return extraField(DeviceId); }
};
Q_DECLARE_METATYPE(Song)
diff --git a/online/jamendoservice.cpp b/online/jamendoservice.cpp
index a2ff64c..374a9e0 100644
--- a/online/jamendoservice.cpp
+++ b/online/jamendoservice.cpp
@@ -344,6 +344,7 @@ Song JamendoService::fixPath(const Song &orig, bool) const
s.file.replace("id=%1", "id="+orig.file);
s.file+=FMT_MP3==format ? QLatin1String("mp31") : QLatin1String("ogg2");
s.genre=FMT_MP3==format ? QLatin1String("mp3") : QLatin1String("ogg");
+ s.type=Song::OnlineSvrTrack;
s.setIsFromOnlineService(constName);
return encode(s);
}
diff --git a/online/magnatuneservice.cpp b/online/magnatuneservice.cpp
index cd101ca..d334f4e 100644
--- a/online/magnatuneservice.cpp
+++ b/online/magnatuneservice.cpp
@@ -130,6 +130,7 @@ void MagnatuneService::createLoader()
Song MagnatuneService::fixPath(const Song &orig, bool) const
{
Song s=orig;
+ s.type=Song::OnlineSvrTrack;
if (MB_None!=membership) {
QUrl url;
#if QT_VERSION < 0x050000
diff --git a/online/onlineservice.cpp b/online/onlineservice.cpp
index 7722875..759d310 100644
--- a/online/onlineservice.cpp
+++ b/online/onlineservice.cpp
@@ -193,13 +193,13 @@ Song OnlineService::encode(const Song &song)
QString::number(song.year)+constDeliminator+
QString::number(song.track)+constDeliminator+
QString::number(song.disc)+constDeliminator+
- song.onlineService();
+ encoded.onlineService();
return encoded;
}
bool OnlineService::decode(Song &song)
{
- if (!song.file.startsWith(QLatin1String("http://"))) {
+ if (!song.file.startsWith(QLatin1String("http://")) && !song.file.startsWith(QLatin1String("https://"))) {
return false;
}
@@ -217,8 +217,8 @@ bool OnlineService::decode(Song &song)
song.year=parts.at(6).toUInt();
song.track=parts.at(7).toUInt();
song.disc=parts.at(8).toUInt();
- song.setIsFromOnlineService(parts.at(9));
song.type=Song::OnlineSvrTrack;
+ song.setIsFromOnlineService(parts.at(9));
song.file=song.file.left(pos);
return true;
}
@@ -228,8 +228,8 @@ bool OnlineService::decode(Song &song)
bool OnlineService::showLogoAsCover(const Song &song)
{
- return song.isFromOnlineService() && (PodcastService::constName==song.onlineService() ||
- SoundCloudService::constName==song.onlineService());
+ return song.isFromOnlineService() && (SoundCloudService::constName==song.onlineService() ||
+ (PodcastService::constName==song.onlineService() && song.extraField(Song::OnlineImageCacheName).isEmpty()));
}
OnlineService::OnlineService(MusicModel *m, const QString &name)
@@ -240,9 +240,6 @@ OnlineService::OnlineService(MusicModel *m, const QString &name)
, loaded(false)
, loader(0)
{
- setUseArtistImages(false); // Settings::self()->libraryArtistImage());
- setUseAlbumImages(true);
- setLargeImages(false);
m_model=m;
icn.addFile(":"+name.toLower());
}
diff --git a/online/onlineservicespage.cpp b/online/onlineservicespage.cpp
index 561fdf8..689ecde 100644
--- a/online/onlineservicespage.cpp
+++ b/online/onlineservicespage.cpp
@@ -58,6 +58,10 @@ OnlineServicesPage::OnlineServicesPage(QWidget *p)
downloadAction = ActionCollection::get()->createAction("downloadtolibrary", i18n("Download To Library"), "go-down");
downloadPodcastAction = ActionCollection::get()->createAction("downloadpodcast", i18n("Download Podcast Episodes"), "go-down");
deleteDownloadedPodcastAction = ActionCollection::get()->createAction("deletedownloadedpodcast", i18n("Delete Downloaded Podcast Episodes"), "edit-delete");
+ cancelPodcastDownloadAction = ActionCollection::get()->createAction("cancelpodcastdownloaded", i18n("Cancel Podcast Episode Download"), Icons::self()->cancelIcon);
+ markPodcastAsNewAction = ActionCollection::get()->createAction("markpodcastasnew", i18n("Mark Podcast Episodes As New"), "document-new");
+ markPodcastAsListenedAction = ActionCollection::get()->createAction("markpodcastaslistened", i18n("Mark Podcast Episodes As Listened"));
+
connect(this, SIGNAL(add(const QStringList &, bool, quint8)), MPDConnection::self(), SLOT(add(const QStringList &, bool, quint8)));
connect(this, SIGNAL(addSongsToPlaylist(const QString &, const QStringList &)), MPDConnection::self(), SLOT(addToPlaylist(const QString &, const QStringList &)));
connect(genreCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(searchItems()));
@@ -80,30 +84,40 @@ OnlineServicesPage::OnlineServicesPage(QWidget *p)
connect(downloadAction, SIGNAL(triggered()), this, SLOT(download()));
connect(downloadPodcastAction, SIGNAL(triggered()), this, SLOT(downloadPodcast()));
connect(deleteDownloadedPodcastAction, SIGNAL(triggered()), this, SLOT(deleteDownloadedPodcast()));
+ connect(cancelPodcastDownloadAction, SIGNAL(triggered()), this, SLOT(cancelPodcastDownload()));
+ connect(markPodcastAsNewAction, SIGNAL(triggered()), this, SLOT(markPodcastAsNew()));
+ connect(markPodcastAsListenedAction, SIGNAL(triggered()), this, SLOT(markPodcastAsListened()));
QMenu *menu=new QMenu(this);
menu->addAction(OnlineServicesModel::self()->configureAct());
menu->addAction(OnlineServicesModel::self()->refreshAct());
- QAction *sep=new QAction(this);
- sep->setSeparator(true);
- menu->addAction(sep);
+ menu->addSeparator();
menu->addAction(OnlineServicesModel::self()->subscribeAct());
menu->addAction(OnlineServicesModel::self()->unSubscribeAct());
menu->addAction(OnlineServicesModel::self()->refreshSubscriptionAct());
menu->addAction(downloadPodcastAction);
+ menu->addAction(cancelPodcastDownloadAction);
menu->addAction(deleteDownloadedPodcastAction);
menu->addSeparator();
+ menu->addAction(markPodcastAsNewAction);
+ menu->addAction(markPodcastAsListenedAction);
+ menu->addSeparator();
QAction *configAction=new QAction(Icons::self()->configureIcon, i18n("Configure..."), this);
menu->addAction(configAction);
- connect(configAction, SIGNAL(triggered(bool)), this, SLOT(showPreferencesPage()));
+ connect(configAction, SIGNAL(triggered()), this, SLOT(showPreferencesPage()));
view->addAction(downloadAction);
- view->addAction(sep);
+ view->addSeparator();
view->addAction(OnlineServicesModel::self()->subscribeAct());
view->addAction(OnlineServicesModel::self()->unSubscribeAct());
view->addAction(OnlineServicesModel::self()->refreshSubscriptionAct());
view->addAction(downloadPodcastAction);
view->addAction(deleteDownloadedPodcastAction);
+ view->addAction(cancelPodcastDownloadAction);
+ view->addAction(deleteDownloadedPodcastAction);
+ view->addSeparator();
+ view->addAction(markPodcastAsNewAction);
+ view->addAction(markPodcastAsListenedAction);
menuButton->setMenu(menu);
proxy.setSourceModel(OnlineServicesModel::self());
// proxy.setDynamicSortFilter(false);
@@ -191,11 +205,9 @@ QList<Song> OnlineServicesPage::selectedSongs(bool allowPlaylists) const
return OnlineServicesModel::self()->songs(proxy.mapToSource(selected, proxy.enabled() && Settings::self()->filteredOnly()));
}
-void OnlineServicesPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void OnlineServicesPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
- Q_UNUSED(randomAlbums)
QStringList files=selectedFiles();
-
if (!files.isEmpty()) {
if (name.isEmpty()) {
emit add(files, replace, priorty);
@@ -414,6 +426,13 @@ void OnlineServicesPage::controlActions()
StdActions::self()->addWithPriorityAction->setEnabled(!srvSelected && !selected.isEmpty());
StdActions::self()->replacePlayQueueAction->setEnabled(!srvSelected && !selected.isEmpty());
StdActions::self()->addToStoredPlaylistAction->setEnabled(!srvSelected && !selected.isEmpty());
+ cancelPodcastDownloadAction->setVisible(canUnSubscribe);
+ cancelPodcastDownloadAction->setEnabled(canUnSubscribe); // && OnlineServicesModel::self()->isDownloading());
+ markPodcastAsNewAction->setEnabled(canSubscribe || canUnSubscribe);
+ markPodcastAsNewAction->setVisible(canSubscribe || canUnSubscribe);
+ markPodcastAsListenedAction->setEnabled(canSubscribe || canUnSubscribe);
+ markPodcastAsListenedAction->setVisible(canSubscribe || canUnSubscribe);
+
menuButton->controlState();
}
@@ -531,7 +550,7 @@ void OnlineServicesPage::unSubscribe()
return;
}
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Unsubscribe from <b>%1</b>?", item->data()))) {
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Unsubscribe from '%1'?", item->data()))) {
return;
}
@@ -573,37 +592,13 @@ void OnlineServicesPage::refreshSubscription()
return;
}
- if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Refresh episode listing from <b>%1</b>?", item->data()))) {
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Refresh episode listing from '%1'?", item->data()))) {
return;
}
srv->refreshSubscription(item);
}
-static QString format(const QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> > &urls)
-{
- QString rv;
- QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> >::ConstIterator it(urls.constBegin());
- QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> >::ConstIterator end(urls.constEnd());
-
- if (1==urls.keys().count()) {
- for (; it!=end; ++it) {
- foreach (MusicLibraryItemPodcastEpisode *ep, it.value()) {
- rv+=QLatin1String("<li>")+ep->data()+QLatin1String("</li>");
- }
- }
- } else {
- for (; it!=end; ++it) {
- rv+=QLatin1String("<li>")+it.key()->data()+QLatin1String("<ul>");
- foreach (MusicLibraryItemPodcastEpisode *ep, it.value()) {
- rv+=QLatin1String("<li>")+ep->data()+QLatin1String("</li>");
- }
- rv+="</ul></li>";
- }
- }
- return rv;
-}
-
void OnlineServicesPage::downloadPodcast()
{
const QModelIndexList selected = view->selectedIndexes(true);
@@ -612,7 +607,6 @@ void OnlineServicesPage::downloadPodcast()
}
QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> > urls;
- int count=0;
foreach (const QModelIndex &idx, selected) {
MusicLibraryItem *item=static_cast<MusicLibraryItem *>(proxy.mapToSource(idx).internalPointer());
switch (item->itemType()) {
@@ -621,16 +615,14 @@ void OnlineServicesPage::downloadPodcast()
MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(c);
if (episode->localPath().isEmpty() && !urls[static_cast<MusicLibraryItemPodcast *>(item)].contains(episode)) {
urls[static_cast<MusicLibraryItemPodcast *>(item)].append(episode);
- count++;
}
}
break;
case MusicLibraryItem::Type_Song:
if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) {
MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(item);
- if (episode->localPath().isEmpty() && !urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].contains(episode)) {
+ if (episode->localPath().isEmpty() && !urls[static_cast<MusicLibraryItemPodcast *>(item)].contains(episode)) {
urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].append(episode);
- count++;
}
}
default:
@@ -638,20 +630,8 @@ void OnlineServicesPage::downloadPodcast()
}
}
- if (urls.isEmpty()) {
- MessageBox::information(this, i18n("All selected podcasts have already been downloaded!"));
- } else {
- QString question;
- if (1==count) {
- question=QLatin1String("<p>")+i18n("Do you wish to download the following podcast episode?")+
- QLatin1String("<ul>")+format(urls)+QLatin1String("</ul></p>");
- } else if (count<15) {
- question=QLatin1String("<p>")+i18n("Do you wish to download the following podcast episodes?")+
- QLatin1String("<ul>")+format(urls)+QLatin1String("</ul></p>");
- } else {
- question=i18n("Do you wish to download the selected podcast episodes?");
- }
- if (MessageBox::No==MessageBox::questionYesNo(this, question)) {
+ if (!urls.isEmpty()) {
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Do you wish to download the selected podcast episodes?"))) {
return;
}
QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> >::ConstIterator it(urls.constBegin());
@@ -662,6 +642,14 @@ void OnlineServicesPage::downloadPodcast()
}
}
+void OnlineServicesPage::cancelPodcastDownload()
+{
+ if (OnlineServicesModel::self()->isDownloading() &&
+ MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Cancel podcast episode downloads (both current and any that are queued)?"))) {
+ OnlineServicesModel::self()->cancelAll();
+ }
+}
+
void OnlineServicesPage::deleteDownloadedPodcast()
{
const QModelIndexList selected = view->selectedIndexes(false); // Dont need sorted selection here...
@@ -669,26 +657,23 @@ void OnlineServicesPage::deleteDownloadedPodcast()
return;
}
- QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> > urls;
- int count=0;
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> > urls;
foreach (const QModelIndex &idx, selected) {
MusicLibraryItem *item=static_cast<MusicLibraryItem *>(proxy.mapToSource(idx).internalPointer());
switch (item->itemType()) {
case MusicLibraryItem::Type_Podcast:
foreach (MusicLibraryItem *c, static_cast<MusicLibraryItemPodcast *>(item)->childItems()) {
MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(c);
- if (!episode->localPath().isEmpty() && !urls[static_cast<MusicLibraryItemPodcast *>(item)].contains(episode)) {
- urls[static_cast<MusicLibraryItemPodcast *>(item)].append(episode);
- count++;
+ if (!episode->localPath().isEmpty()) {
+ urls[static_cast<MusicLibraryItemPodcast *>(item)].insert(episode);
}
}
break;
case MusicLibraryItem::Type_Song:
if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) {
MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(item);
- if (!episode->localPath().isEmpty() && !urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].contains(episode)) {
- urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].append(episode);
- count++;
+ if (!episode->localPath().isEmpty()) {
+ urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].insert(episode);
}
}
default:
@@ -696,26 +681,100 @@ void OnlineServicesPage::deleteDownloadedPodcast()
}
}
- if (urls.isEmpty()) {
- MessageBox::information(this, i18n("All selected downloaded podcast episodes have already been deleted!"));
- } else {
- QString question;
- if (1==count) {
- question=QLatin1String("<p>")+i18n("Do you wish to delete the downloaded file of the following podcast episode?")+
- QLatin1String("<ul>")+format(urls)+QLatin1String("</ul></p>");
- } else if (count<15) {
- question=QLatin1String("<p>")+i18n("Do you wish to the delete downloaded files of the following podcast episodes?")+
- QLatin1String("<ul>")+format(urls)+QLatin1String("</ul></p>");
- } else {
- question=i18n("Do you wish to the delete downloaded files of the selected podcast episodes?");
+ if (!urls.isEmpty()) {
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Do you wish to the delete downloaded files of the selected podcast episodes?"))) {
+ return;
+ }
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> >::ConstIterator it(urls.constBegin());
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> >::ConstIterator end(urls.constEnd());
+ for (; it!=end; ++it) {
+ OnlineServicesModel::self()->deleteDownloadedPodcasts(it.key(), it.value().toList());
+ }
+ }
+}
+
+void OnlineServicesPage::markPodcastAsNew()
+{
+ const QModelIndexList selected = view->selectedIndexes(false); // Dont need sorted selection here...
+ if (selected.isEmpty()) {
+ return;
+ }
+
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> > urls;
+ foreach (const QModelIndex &idx, selected) {
+ MusicLibraryItem *item=static_cast<MusicLibraryItem *>(proxy.mapToSource(idx).internalPointer());
+ switch (item->itemType()) {
+ case MusicLibraryItem::Type_Podcast:
+ foreach (MusicLibraryItem *c, static_cast<MusicLibraryItemPodcast *>(item)->childItems()) {
+ MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(c);
+ if (episode->song().hasBeenPlayed()) {
+ urls[static_cast<MusicLibraryItemPodcast *>(item)].insert(episode);
+ }
+ }
+ break;
+ case MusicLibraryItem::Type_Song:
+ if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) {
+ MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(item);
+ if (episode->song().hasBeenPlayed()) {
+ urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].insert(episode);
+ }
+ }
+ default:
+ break;
}
- if (MessageBox::No==MessageBox::questionYesNo(this, question)) {
+ }
+
+ if (!urls.isEmpty()) {
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Do you wish to mark the selected podcast episodes as new?"))) {
return;
}
- QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> >::ConstIterator it(urls.constBegin());
- QMap<MusicLibraryItemPodcast *, QList<MusicLibraryItemPodcastEpisode *> >::ConstIterator end(urls.constEnd());
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> >::ConstIterator it(urls.constBegin());
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> >::ConstIterator end(urls.constEnd());
+ for (; it!=end; ++it) {
+ OnlineServicesModel::self()->setPodcastsAsListened(it.key(), it.value().toList(), false);
+ }
+ }
+}
+
+void OnlineServicesPage::markPodcastAsListened()
+{
+ const QModelIndexList selected = view->selectedIndexes(false); // Dont need sorted selection here...
+ if (selected.isEmpty()) {
+ return;
+ }
+
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> > urls;
+ foreach (const QModelIndex &idx, selected) {
+ MusicLibraryItem *item=static_cast<MusicLibraryItem *>(proxy.mapToSource(idx).internalPointer());
+ switch (item->itemType()) {
+ case MusicLibraryItem::Type_Podcast:
+ foreach (MusicLibraryItem *c, static_cast<MusicLibraryItemPodcast *>(item)->childItems()) {
+ MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(c);
+ if (!episode->song().hasBeenPlayed()) {
+ urls[static_cast<MusicLibraryItemPodcast *>(item)].insert(episode);
+ }
+ }
+ break;
+ case MusicLibraryItem::Type_Song:
+ if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) {
+ MusicLibraryItemPodcastEpisode *episode=static_cast<MusicLibraryItemPodcastEpisode *>(item);
+ if (!episode->song().hasBeenPlayed()) {
+ urls[static_cast<MusicLibraryItemPodcast *>(item->parentItem())].insert(episode);
+ }
+ }
+ default:
+ break;
+ }
+ }
+
+ if (!urls.isEmpty()) {
+ if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Do you wish to mark the selected podcast episodes as listened?"))) {
+ return;
+ }
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> >::ConstIterator it(urls.constBegin());
+ QMap<MusicLibraryItemPodcast *, QSet<MusicLibraryItemPodcastEpisode *> >::ConstIterator end(urls.constEnd());
for (; it!=end; ++it) {
- OnlineServicesModel::self()->deleteDownloadedPodcasts(it.key(), it.value());
+ OnlineServicesModel::self()->setPodcastsAsListened(it.key(), it.value().toList(), true);
}
}
}
diff --git a/online/onlineservicespage.h b/online/onlineservicespage.h
index bdb3376..5c19f5f 100644
--- a/online/onlineservicespage.h
+++ b/online/onlineservicespage.h
@@ -44,11 +44,12 @@ public:
void clear();
QStringList selectedFiles() const;
QList<Song> selectedSongs(bool allowPlaylists=false) const;
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
void setView(int v) { view->setMode((ItemView::Mode)v); }
void focusSearch();
void refresh();
void showEvent(QShowEvent *e);
+ void resort() { proxy.resort(); }
public Q_SLOTS:
void itemDoubleClicked(const QModelIndex &);
@@ -66,7 +67,10 @@ public Q_SLOTS:
void unSubscribe();
void refreshSubscription();
void downloadPodcast();
+ void cancelPodcastDownload();
void deleteDownloadedPodcast();
+ void markPodcastAsNew();
+ void markPodcastAsListened();
void showPreferencesPage();
void providersChanged();
@@ -86,7 +90,10 @@ private:
MusicLibraryProxyModel proxy;
Action *downloadAction;
Action *downloadPodcastAction;
+ Action *cancelPodcastDownloadAction;
Action *deleteDownloadedPodcastAction;
+ Action *markPodcastAsNewAction;
+ Action *markPodcastAsListenedAction;
QSet<QString> genres;
bool onlineSearchRequest;
QString searchService;
diff --git a/online/podcastsearchdialog.cpp b/online/podcastsearchdialog.cpp
index 254e20a..586419c 100644
--- a/online/podcastsearchdialog.cpp
+++ b/online/podcastsearchdialog.cpp
@@ -409,7 +409,7 @@ OpmlBrowsePage::OpmlBrowsePage(QWidget *p, const QString &n, const QString &i, c
mainLayout->addWidget(text, 0);
Action *act=new Action(i18n("Reload"), this);
tree->addAction(act);
- connect(act, SIGNAL(triggered(bool)), this, SLOT(reload()));
+ connect(act, SIGNAL(triggered()), this, SLOT(reload()));
tree->setContextMenuPolicy(Qt::ActionsContextMenu);
icn.addFile(i.isEmpty() || !QFile::exists(i) ? ":podcasts" : i);
}
diff --git a/online/podcastservice.cpp b/online/podcastservice.cpp
index ef7852b..d7e1f0a 100644
--- a/online/podcastservice.cpp
+++ b/online/podcastservice.cpp
@@ -33,7 +33,7 @@
#include "http/httpserver.h"
#include <QCoreApplication>
#include <QDir>
-#include <QUrl>
+#include <QFile>
#include <QSet>
#include <QTimer>
#if QT_VERSION >= 0x050000
@@ -49,6 +49,18 @@ static const char * constRssUrlProperty="rss-url";
static const char * constDestProperty="dest";
static const QLatin1String constPartialExt(".partial");
+bool PodcastService::isPodcastFile(const QString &file)
+{
+ if (file.startsWith(Utils::constDirSep) && MPDConnection::self()->getDetails().isLocal()) {
+ QString downloadPath=Settings::self()->podcastDownloadPath();
+ if (downloadPath.isEmpty()) {
+ return false;
+ }
+ return file.startsWith(downloadPath);
+ }
+ return false;
+}
+
QUrl PodcastService::fixUrl(const QString &url)
{
QString trimmed(url.trimmed());
@@ -90,6 +102,7 @@ QUrl PodcastService::fixUrl(const QUrl &orig)
PodcastService::PodcastService(MusicModel *m)
: OnlineService(m, i18n("Podcasts"))
+ , downloadJob(0)
, rssUpdateTimer(0)
{
loaded=true;
@@ -98,6 +111,8 @@ PodcastService::PodcastService(MusicModel *m)
if (iconFile.isEmpty()) {
iconFile=QString(CANTATA_SYS_ICONS_DIR+"podcasts.png");
}
+
+ clearPartialDownloads();
}
Song PodcastService::fixPath(const Song &orig, bool) const
@@ -105,7 +120,7 @@ Song PodcastService::fixPath(const Song &orig, bool) const
Song song=orig;
song.setPodcastLocalPath(QString());
song.setIsFromOnlineService(constName);
- song.album=constName;
+ song.artist=constName;
if (!orig.podcastLocalPath().isEmpty() && QFile::exists(orig.podcastLocalPath())) {
if (!HttpServer::self()->forceUsage() && MPDConnection::self()->getDetails().isLocal()) {
song.file=QLatin1String("file://")+orig.podcastLocalPath();
@@ -162,7 +177,8 @@ void PodcastService::cancelAll()
j->cancelAndDelete();
}
rssJobs.clear();
- setBusy(!rssJobs.isEmpty() || !downloadJobs.isEmpty());
+ cancelAllDownloads();
+ setBusy(!rssJobs.isEmpty() || 0!=downloadJob);
}
void PodcastService::rssJobFinished()
@@ -186,20 +202,23 @@ void PodcastService::rssJobFinished()
}
}
-
MusicLibraryItemPodcast *podcast=new MusicLibraryItemPodcast(QString(), this);
MusicLibraryItemPodcast::RssStatus loadStatus=podcast->loadRss(j->actualJob());
if (MusicLibraryItemPodcast::Loaded==loadStatus) {
- bool autoDownload=Settings::self()->podcastAutoDownload();
+ int autoDownload=Settings::self()->podcastAutoDownloadLimit();
if (isNew) {
podcast->save();
beginInsertRows(index(), childCount(), childCount());
m_childItems.append(podcast);
if (autoDownload) {
+ int ep=0;
foreach (MusicLibraryItem *i, podcast->childItems()) {
MusicLibraryItemSong *song=static_cast<MusicLibraryItemSong *>(i);
downloadEpisode(podcast, QUrl(song->file()));
+ if (autoDownload<1000 && ++ep>=autoDownload) {
+ break;
+ }
}
}
endInsertRows();
@@ -274,7 +293,7 @@ void PodcastService::rssJobFinished()
} else {
emitError(i18n("Failed to download %1", j->origUrl().toString()), isNew);
}
- setBusy(!rssJobs.isEmpty() || !downloadJobs.isEmpty());
+ setBusy(!rssJobs.isEmpty() || 0!=downloadJob);
}
void PodcastService::configure(QWidget *p)
@@ -316,17 +335,13 @@ void PodcastService::unSubscribe(MusicLibraryItem *item)
{
int row=m_childItems.indexOf(item);
if (row>=0) {
- MusicLibraryItemPodcast *pod=static_cast<MusicLibraryItemPodcast *>(item);
- if (!downloadJobs.isEmpty()) {
- foreach (MusicLibraryItem *e, pod->childItems()) {
- cancelDownload(QUrl(static_cast<MusicLibraryItemPodcastEpisode *>(e)->file()));
- if (downloadJobs.isEmpty()) {
- break;
- }
- }
+ QList<MusicLibraryItemPodcastEpisode *> episodes;
+ foreach (MusicLibraryItem *e, static_cast<MusicLibraryItemPodcast *>(item)->childItems()) {
+ episodes.append(static_cast<MusicLibraryItemPodcastEpisode *>(e));
}
+ cancelDownloads(episodes);
beginRemoveRows(index(), row, row);
- pod->removeFiles();
+ static_cast<MusicLibraryItemPodcast *>(item)->removeFiles();
delete m_childItems.takeAt(row);
resetRows();
endRemoveRows();
@@ -370,40 +385,35 @@ void PodcastService::addUrl(const QUrl &url, bool isNew)
bool PodcastService::downloadingEpisode(const QUrl &url) const
{
- foreach (NetworkJob *j, downloadJobs) {
- if (j->origUrl()==url) {
- return true;
- }
+ if (downloadJob && downloadJob->origUrl()==url) {
+ return true;
}
- return false;
+ return toDownload.contains(url);
}
void PodcastService::cancelAllDownloads()
{
- foreach (NetworkJob *j, downloadJobs) {
- cancelDownload(j);
+ foreach (const DownloadEntry &e, toDownload) {
+ updateEpisode(e.rssUrl, e.url, MusicLibraryItemPodcastEpisode::NotDownloading);
}
- downloadJobs.clear();
- setBusy(!rssJobs.isEmpty() || !downloadJobs.isEmpty());
+
+ toDownload.clear();
+ cancelDownload();
+ setBusy(!rssJobs.isEmpty() || 0!=downloadJob);
}
void PodcastService::downloadPodcasts(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes)
{
foreach (MusicLibraryItemPodcastEpisode *ep, episodes) {
- QUrl url(ep->file());
- if (!downloadingEpisode(url)) {
- downloadEpisode(pod, url);
- }
+ downloadEpisode(pod, QUrl(ep->file()));
}
}
void PodcastService::deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes)
{
+ cancelDownloads(episodes);
+ bool modified=false;
foreach (MusicLibraryItemPodcastEpisode *ep, episodes) {
- QUrl url(ep->file());
- if (downloadingEpisode(url)) {
- cancelDownload(url);
- }
QString fileName=ep->localPath();
if (!fileName.isEmpty()) {
if (QFile::exists(fileName)) {
@@ -419,9 +429,30 @@ void PodcastService::deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod, cons
ep->setLocalPath(QString());
ep->setDownloadProgress(-1);
emitDataChanged(createIndex(ep));
+ modified=true;
+ }
+ }
+ if (modified) {
+ emitDataChanged(createIndex(pod));
+ pod->save();
+ }
+}
+
+void PodcastService::setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes, bool listened)
+{
+ bool modified=false;
+ foreach (MusicLibraryItemPodcastEpisode *ep, episodes) {
+ MusicLibraryItemSong *song=static_cast<MusicLibraryItemSong *>(ep);
+ if (listened!=song->song().hasBeenPlayed()) {
+ pod->setPlayed(song, listened);
+ emitDataChanged(createIndex(song));
+ modified=true;
}
}
- pod->save();
+ if (modified) {
+ emitDataChanged(createIndex(pod));
+ pod->save();
+ }
}
static QString encodeName(const QString &name)
@@ -442,50 +473,115 @@ void PodcastService::downloadEpisode(const MusicLibraryItemPodcast *podcast, con
if (downloadingEpisode(episode)) {
return;
}
-
dest=Utils::fixPath(dest)+Utils::fixPath(encodeName(podcast->data()))+Utils::getFile(episode.toString());
- setBusy(true);
- NetworkJob *job=NetworkAccessManager::self()->get(episode);
- connect(job, SIGNAL(finished()), this, SLOT(downloadJobFinished()));
- connect(job, SIGNAL(readyRead()), this, SLOT(downloadReadyRead()));
- connect(job, SIGNAL(downloadPercent(int)), this, SLOT(downloadPercent(int)));
- job->setProperty(constRssUrlProperty, podcast->rssUrl());
- job->setProperty(constDestProperty, dest);
- downloadJobs.append(job);
-
- QString partial=dest+constPartialExt;
- if (QFile::exists(partial)) {
- QFile::remove(partial);
+ toDownload.append(DownloadEntry(episode, podcast->rssUrl(), dest));
+ updateEpisode(podcast->rssUrl(), episode, MusicLibraryItemPodcastEpisode::QueuedForDownload);
+ doNextDownload();
+}
+
+void PodcastService::cancelDownloads(const QList<MusicLibraryItemPodcastEpisode *> episodes)
+{
+ bool cancelDl=false;
+ foreach (MusicLibraryItemPodcastEpisode *e, episodes) {
+ QUrl u(e->file());
+ toDownload.removeAll(u);
+ e->setDownloadProgress(MusicLibraryItemPodcastEpisode::NotDownloading);
+ emitDataChanged(createIndex(e));
+ if (!cancelDl && downloadJob && downloadJob->url()==u) {
+ cancelDl=true;
+ }
+ }
+ if (cancelDl) {
+ cancelDownload();
}
}
void PodcastService::cancelDownload(const QUrl &url)
{
- foreach (NetworkJob *j, downloadJobs) {
- if (j->origUrl()==url) {
- cancelDownload(j);
- downloadJobs.removeAll(j);
- break;
+ if (downloadJob && downloadJob->origUrl()==url) {
+ cancelDownload();
+ doNextDownload();
+ }
+}
+
+void PodcastService::cancelDownload()
+{
+ if (downloadJob) {
+ downloadJob->cancelAndDelete();
+ disconnect(downloadJob, SIGNAL(finished()), this, SLOT(downloadJobFinished()));
+ disconnect(downloadJob, SIGNAL(readyRead()), this, SLOT(downloadReadyRead()));
+ disconnect(downloadJob, SIGNAL(downloadPercent(int)), this, SLOT(downloadPercent(int)));
+
+ QString dest=downloadJob->property(constDestProperty).toString();
+ QString partial=dest.isEmpty() ? QString() : QString(dest+constPartialExt);
+ if (!partial.isEmpty() && QFile::exists(partial)) {
+ QFile::remove(partial);
}
+ updateEpisode(downloadJob->property(constRssUrlProperty).toUrl(), downloadJob->origUrl(), MusicLibraryItemPodcastEpisode::NotDownloading);
+ downloadJob=0;
}
- setBusy(!rssJobs.isEmpty() || !downloadJobs.isEmpty());
+ setBusy(!rssJobs.isEmpty() || 0!=downloadJob);
}
-void PodcastService::cancelDownload(NetworkJob *job)
+void PodcastService::doNextDownload()
{
- job->cancelAndDelete();
+ if (downloadJob) {
+ return;
+ }
- QString dest=job->property(constDestProperty).toString();
- QString partial=dest.isEmpty() ? QString() : QString(dest+constPartialExt);
- if (!partial.isEmpty() && QFile::exists(partial)) {
+ if (toDownload.isEmpty()) {
+ setBusy(!rssJobs.isEmpty());
+ return;
+ }
+
+ DownloadEntry entry=toDownload.takeFirst();
+ downloadJob=NetworkAccessManager::self()->get(entry.url);
+ connect(downloadJob, SIGNAL(finished()), this, SLOT(downloadJobFinished()));
+ connect(downloadJob, SIGNAL(readyRead()), this, SLOT(downloadReadyRead()));
+ connect(downloadJob, SIGNAL(downloadPercent(int)), this, SLOT(downloadPercent(int)));
+ downloadJob->setProperty(constRssUrlProperty, entry.rssUrl);
+ downloadJob->setProperty(constDestProperty, entry.dest);
+ updateEpisode(entry.rssUrl, entry.url, 0);
+
+ QString partial=entry.dest+constPartialExt;
+ if (QFile::exists(partial)) {
QFile::remove(partial);
}
}
+void PodcastService::updateEpisode(const QUrl &rssUrl, const QUrl &url, int pc)
+{
+ MusicLibraryItemPodcast *pod=getPodcast(rssUrl);
+ if (pod) {
+ MusicLibraryItemPodcastEpisode *song=getEpisode(pod, url);
+ if (song && song->downloadProgress()!=pc) {
+ song->setDownloadProgress(pc);
+ emitDataChanged(createIndex(song));
+ }
+ }
+}
+
+void PodcastService::clearPartialDownloads()
+{
+ QString dest=Settings::self()->podcastDownloadPath();
+ if (dest.isEmpty()) {
+ return;
+ }
+
+ dest=Utils::fixPath(dest);
+ QStringList sub=QDir(dest).entryList(QDir::Dirs|QDir::NoDotAndDotDot);
+ foreach (const QString &d, sub) {
+ QStringList partials=QDir(dest+d).entryList(QStringList() << QLatin1Char('*')+constPartialExt, QDir::Files);
+ foreach (const QString &p, partials) {
+ QFile::remove(dest+d+Utils::constDirSep+p);
+ }
+ }
+}
+
void PodcastService::downloadJobFinished()
{
NetworkJob *job=dynamic_cast<NetworkJob *>(sender());
- if (!job || !downloadJobs.contains(job)) {
+ if (!job || job!=downloadJob) {
return;
}
job->deleteLater();
@@ -510,7 +606,6 @@ void PodcastService::downloadJobFinished()
MusicLibraryItemPodcastEpisode *song=getEpisode(pod, job->origUrl());
if (song) {
song->setLocalPath(dest);
- song->setDownloadProgress(-1);
pod->save();
emitDataChanged(createIndex(song));
}
@@ -520,15 +615,15 @@ void PodcastService::downloadJobFinished()
} else if (!partial.isEmpty() && QFile::exists(partial)) {
QFile::remove(partial);
}
-
- downloadJobs.removeAll(job);
- setBusy(!rssJobs.isEmpty() || !downloadJobs.isEmpty());
+ updateEpisode(job->property(constRssUrlProperty).toUrl(), job->origUrl(), MusicLibraryItemPodcastEpisode::NotDownloading);
+ downloadJob=0;
+ doNextDownload();
}
void PodcastService::downloadReadyRead()
{
NetworkJob *job=dynamic_cast<NetworkJob *>(sender());
- if (!job || !downloadJobs.contains(job)) {
+ if (!job || job!=downloadJob) {
return;
}
QString dest=job->property(constDestProperty).toString();
@@ -560,17 +655,10 @@ void PodcastService::downloadReadyRead()
void PodcastService::downloadPercent(int pc)
{
NetworkJob *job=dynamic_cast<NetworkJob *>(sender());
- if (!job || !downloadJobs.contains(job)) {
+ if (!job || job!=downloadJob) {
return;
}
- MusicLibraryItemPodcast *pod=getPodcast(job->property(constRssUrlProperty).toUrl());
- if (pod) {
- MusicLibraryItemPodcastEpisode *song=getEpisode(pod, job->origUrl());
- if (song) {
- song->setDownloadProgress(pc);
- emitDataChanged(createIndex(song));
- }
- }
+ updateEpisode(job->property(constRssUrlProperty).toUrl(), job->origUrl(), pc);
}
void PodcastService::startRssUpdateTimer()
@@ -621,8 +709,11 @@ void PodcastService::updateRss()
void PodcastService::currentMpdSong(const Song &s)
{
- if (s.isFromOnlineService() && s.album==constName) {
+ if ((s.isFromOnlineService() && s.album==constName) || isPodcastFile(s.file)) {
QString path=s.decodedPath();
+ if (path.isEmpty()) {
+ path=s.file;
+ }
foreach (MusicLibraryItem *p, m_childItems) {
MusicLibraryItemPodcast *podcast=static_cast<MusicLibraryItemPodcast *>(p);
foreach (MusicLibraryItem *i, podcast->childItems()) {
diff --git a/online/podcastservice.h b/online/podcastservice.h
index 92d6da9..9d2df7f 100644
--- a/online/podcastservice.h
+++ b/online/podcastservice.h
@@ -62,28 +62,34 @@ public:
void refreshSubscription(MusicLibraryItem *item);
bool processingUrl(const QUrl &url) const;
void addUrl(const QUrl &url, bool isNew=true);
+ static bool isPodcastFile(const QString &file);
static const QString & iconPath() { return iconFile; }
static QUrl fixUrl(const QString &url);
static QUrl fixUrl(const QUrl &orig);
static bool isUrlOk(const QUrl &u) { return QLatin1String("http")==u.scheme() || QLatin1String("https")==u.scheme(); }
- bool isDownloading() const { return !downloadJobs.isEmpty(); }
+ bool isDownloading() const { return 0!=downloadJob; }
void cancelAllDownloads();
void downloadPodcasts(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes);
void deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes);
+ void setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList<MusicLibraryItemPodcastEpisode *> &episodes, bool listened);
void cancelAllJobs() { cancelAll(); cancelAllDownloads(); }
+ MusicLibraryItemPodcast * getPodcast(const QUrl &url) const;
private:
void cancelAll();
- MusicLibraryItemPodcast * getPodcast(const QUrl &url) const;
MusicLibraryItemPodcastEpisode * getEpisode(const MusicLibraryItemPodcast *podcast, const QUrl &episode);
void startRssUpdateTimer();
void stopRssUpdateTimer();
bool downloadingEpisode(const QUrl &url) const;
void downloadEpisode(const MusicLibraryItemPodcast *podcast, const QUrl &episode);
+ void cancelDownloads(const QList<MusicLibraryItemPodcastEpisode *> episodes);
void cancelDownload(const QUrl &url);
- void cancelDownload(NetworkJob *job);
+ void cancelDownload();
+ void doNextDownload();
+ void updateEpisode(const QUrl &rssUrl, const QUrl &url, int pc);
+ void clearPartialDownloads();
private Q_SLOTS:
void loadAll();
@@ -95,8 +101,18 @@ private Q_SLOTS:
void downloadPercent(int pc);
private:
+ struct DownloadEntry {
+ DownloadEntry(const QUrl &u=QUrl(), const QUrl &r=QUrl(), const QString &d=QString()) : url(u), rssUrl(r), dest(d) { }
+ bool operator==(const DownloadEntry &o) const { return o.url==url; }
+ QUrl url;
+ QUrl rssUrl;
+ QString dest;
+ MusicLibraryItemPodcastEpisode *ep;
+ };
+
QList<NetworkJob *> rssJobs;
- QList<NetworkJob *> downloadJobs;
+ NetworkJob * downloadJob;
+ QList<DownloadEntry> toDownload;
QTimer *rssUpdateTimer;
QDateTime lastRssUpdate;
QTimer *deleteTimer;
diff --git a/online/podcastsettingsdialog.cpp b/online/podcastsettingsdialog.cpp
index d3f7b0b..d764cda 100644
--- a/online/podcastsettingsdialog.cpp
+++ b/online/podcastsettingsdialog.cpp
@@ -58,24 +58,27 @@ PodcastSettingsDialog::PodcastSettingsDialog(QWidget *p)
QFormLayout * lay=new QFormLayout(mw);
BuddyLabel * updateLabel=new BuddyLabel(i18n("Check for new episodes:"), mw);
BuddyLabel * downloadLabel=new BuddyLabel(i18n("Download episodes to:"), mw);
+ BuddyLabel * autoDownloadLabel=new BuddyLabel(i18n("Download automatically:"), mw);
updateCombo = new QComboBox(this);
updateLabel->setBuddy(updateCombo);
downloadPath = new PathRequester(this);
downloadLabel->setBuddy(downloadPath);
downloadPath->setDirMode(true);
- autoDownload = new QCheckBox(i18n("Automatically download new episodes"), this);
+ autoDownloadCombo = new QComboBox(this);
+ autoDownloadLabel->setBuddy(autoDownloadCombo);
int row=0;
- lay->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
lay->setMargin(0);
+ lay->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
lay->setWidget(row, QFormLayout::LabelRole, updateLabel);
lay->setWidget(row++, QFormLayout::FieldRole, updateCombo);
lay->setWidget(row, QFormLayout::LabelRole, downloadLabel);
lay->setWidget(row++, QFormLayout::FieldRole, downloadPath);
lay->setWidget(row, QFormLayout::LabelRole, downloadLabel);
lay->setWidget(row++, QFormLayout::FieldRole, downloadPath);
- lay->setWidget(row++, QFormLayout::SpanningRole, autoDownload);
+ lay->setWidget(row, QFormLayout::LabelRole, autoDownloadLabel);
+ lay->setWidget(row++, QFormLayout::FieldRole, autoDownloadCombo);
setButtons(Ok|Cancel);
setMainWidget(mw);
@@ -91,22 +94,32 @@ PodcastSettingsDialog::PodcastSettingsDialog(QWidget *p)
updateCombo->addItem(i18n("Every day"), 24*60);
updateCombo->addItem(i18n("Every week"), 7*24*60);
+ autoDownloadCombo->addItem(i18n("Don't automatically download episodes"), 0);
+ autoDownloadCombo->addItem(i18n("Latest episode", 1), 1);
+ autoDownloadCombo->addItem(i18n("Latest %1 episodes", 2), 2);
+ autoDownloadCombo->addItem(i18n("Latest %1 episodes", 5), 5);
+ autoDownloadCombo->addItem(i18n("Latest %1 episodes", 10), 10);
+ autoDownloadCombo->addItem(i18n("Latest %1 episodes", 15), 15);
+ autoDownloadCombo->addItem(i18n("Latest %1 episodes", 20), 20);
+ autoDownloadCombo->addItem(i18n("Latest %1 episodes", 50), 50);
+ autoDownloadCombo->addItem(i18n("All episodes"), 1000);
+
origRssUpdate=Settings::self()->rssUpdate();
setIndex(updateCombo, origRssUpdate);
connect(updateCombo, SIGNAL(currentIndexChanged(int)), SLOT(checkSaveable()));
- origPodcastDownloadPath=Utils::convertDirForDisplay(Settings::self()->podcastDownloadPath());
- origPodcastAutoDownload=Settings::self()->podcastAutoDownload();
+ origPodcastDownloadPath=Utils::convertPathForDisplay(Settings::self()->podcastDownloadPath());
+ origPodcastAutoDownload=Settings::self()->podcastAutoDownloadLimit();
+ setIndex(autoDownloadCombo, origPodcastAutoDownload);
downloadPath->setText(origPodcastDownloadPath);
- autoDownload->setChecked(origPodcastAutoDownload);
connect(downloadPath, SIGNAL(textChanged(QString)), SLOT(checkSaveable()));
- connect(autoDownload, SIGNAL(toggled(bool)), SLOT(checkSaveable()));
+ connect(autoDownloadCombo, SIGNAL(currentIndexChanged(int)), SLOT(checkSaveable()));
enableButton(Ok, false);
changed=0;
}
void PodcastSettingsDialog::checkSaveable()
{
- enableButton(Ok, origPodcastAutoDownload!=autoDownload->isChecked() ||
+ enableButton(Ok, autoDownloadCombo->itemData(autoDownloadCombo->currentIndex()).toInt()!=origPodcastAutoDownload ||
updateCombo->itemData(updateCombo->currentIndex()).toInt()!=origRssUpdate ||
downloadPath->text().trimmed()!=origPodcastDownloadPath);
}
@@ -121,11 +134,11 @@ void PodcastSettingsDialog::slotButtonClicked(int button)
}
if (downloadPath->text().trimmed()!=origPodcastDownloadPath) {
changed|=DownloadPath;
- Settings::self()->savePodcastDownloadPath(Utils::convertDirFromDisplay(downloadPath->text().trimmed()));
+ Settings::self()->savePodcastDownloadPath(Utils::convertPathFromDisplay(downloadPath->text().trimmed()));
}
- if (origPodcastAutoDownload!=autoDownload->isChecked()) {
+ if (autoDownloadCombo->itemData(autoDownloadCombo->currentIndex()).toInt()!=origPodcastAutoDownload) {
changed|=AutoDownload;
- Settings::self()->savePodcastAutoDownload(autoDownload->isChecked());
+ Settings::self()->savePodcastAutoDownloadLimit(autoDownloadCombo->itemData(autoDownloadCombo->currentIndex()).toInt());
}
accept();
case Close:
diff --git a/online/podcastsettingsdialog.h b/online/podcastsettingsdialog.h
index 002e611..4684502 100644
--- a/online/podcastsettingsdialog.h
+++ b/online/podcastsettingsdialog.h
@@ -55,9 +55,9 @@ private:
QComboBox *updateCombo;
int origRssUpdate;
PathRequester *downloadPath;
- QCheckBox *autoDownload;
+ QComboBox *autoDownloadCombo;
QString origPodcastDownloadPath;
- bool origPodcastAutoDownload;
+ int origPodcastAutoDownload;
int changed;
};
diff --git a/online/rssparser.cpp b/online/rssparser.cpp
index efbe4cf..6715ad2 100644
--- a/online/rssparser.cpp
+++ b/online/rssparser.cpp
@@ -89,11 +89,12 @@ static QUrl parseImage(QXmlStreamReader &reader)
static Episode parseEpisode(QXmlStreamReader &reader)
{
Episode ep;
+ bool isAudio=false;
+ QUrl guidUrl;
while (!reader.atEnd()) {
reader.readNext();
const QStringRef name = reader.name();
-
if (reader.isStartElement()) {
if (QLatin1String("title")==name) {
ep.name=reader.readElementText();
@@ -116,11 +117,24 @@ static Episode parseEpisode(QXmlStreamReader &reader)
}
QString type=reader.attributes().value(QLatin1String("type")).toString();
if (type.startsWith(QLatin1String("audio/")) || audioFormats.contains(type)) {
+ isAudio=true;
ep.url=QUrl::fromEncoded(reader.attributes().value(QLatin1String("url")).toString().toLatin1());
} else if (type.startsWith(QLatin1String("video/")) ) {
- ep.video=true;
+ // At least one broken feed (BUG: 588) has the audio podcast listed as video/mp4,
+ // ...but the path ends in .mp3 !!!
+ QUrl url=QUrl::fromEncoded(reader.attributes().value(QLatin1String("url")).toString().toLatin1());
+ QString path=url.path();
+ if (path.endsWith(QLatin1String(".mp3"), Qt::CaseInsensitive) ||
+ path.endsWith(QLatin1String(".ogg"), Qt::CaseInsensitive) ||
+ path.endsWith(QLatin1String(".wma"), Qt::CaseInsensitive)) {
+ ep.url=url;
+ } else {
+ ep.video=true;
+ }
}
consumeCurrentElement(reader);
+ } else if (QLatin1String("guid")==name) {
+ guidUrl=QUrl(reader.readElementText());
} else if (QLatin1String("pubDate")==name) {
ep.publicationDate=parseRfc822DateTime(reader.readElementText());
} else {
@@ -131,6 +145,11 @@ static Episode parseEpisode(QXmlStreamReader &reader)
}
}
+ // Sometimes the url entry in 'enclusure' is empty, but there is a url in 'guid' - so use
+ // that if present (BUG: 602)
+ if (isAudio && ep.url.isEmpty() && !guidUrl.isEmpty()) {
+ ep.url=guidUrl;
+ }
return ep;
}
@@ -176,6 +195,5 @@ Channel RssParser::parse(QIODevice *dev, bool getEpisodes, bool getDescription)
if (ch.video && !ch.episodes.isEmpty()) {
ch.video=false;
}
-
return ch;
}
diff --git a/online/soundcloudservice.cpp b/online/soundcloudservice.cpp
index 7c5c796..240a015 100644
--- a/online/soundcloudservice.cpp
+++ b/online/soundcloudservice.cpp
@@ -25,6 +25,7 @@
#include "network/networkaccessmanager.h"
#include "models/onlineservicesmodel.h"
#include "models/musiclibraryitemsong.h"
+#include "mpd/mpdconnection.h"
#include "config.h"
#include <QCoreApplication>
#include <QUrl>
@@ -47,8 +48,6 @@ SoundCloudService::SoundCloudService(MusicModel *m)
if (iconFile.isEmpty()) {
iconFile=QString(CANTATA_SYS_ICONS_DIR+"soundcloud.png");
}
- setUseArtistImages(false);
- setUseAlbumImages(false);
}
Song SoundCloudService::fixPath(const Song &orig, bool) const
@@ -142,7 +141,7 @@ void SoundCloudService::jobFinished()
url.setQuery(query);
#endif
// MPD does not seem to support https :-(
- if (QLatin1String("https")==url.scheme()) {
+ if (QLatin1String("https")==url.scheme() && !MPDConnection::self()->urlHandlers().contains(QLatin1String("https"))) {
url.setScheme(QLatin1String("http"));
}
song.file=url.toString();
diff --git a/po/cantata.pot b/po/cantata.pot
index 2619ba3..0a5f031 100644
--- a/po/cantata.pot
+++ b/po/cantata.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -22,10 +22,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr ""
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr ""
@@ -36,32 +36,33 @@ msgstr ""
msgid "Tracks"
msgstr ""
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr ""
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr ""
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr ""
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr ""
@@ -69,28 +70,28 @@ msgstr ""
msgid "Lyrics Providers"
msgstr ""
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr ""
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr ""
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr ""
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr ""
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr ""
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr ""
@@ -113,16 +114,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr ""
@@ -130,17 +131,17 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr ""
@@ -156,37 +157,38 @@ msgstr ""
msgid "Song Information"
msgstr ""
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr ""
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr ""
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr ""
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr ""
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr ""
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr ""
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
+#: context/songview.cpp:124
+msgid "Metadata"
msgstr ""
#: context/songview.cpp:136
@@ -209,14 +211,14 @@ msgstr ""
msgid "Refresh Track Information"
msgstr ""
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr ""
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr ""
@@ -229,7 +231,7 @@ msgid ""
msgstr ""
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr ""
@@ -261,39 +263,39 @@ msgstr ""
msgid "Delete File"
msgstr ""
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr ""
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr ""
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr ""
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr ""
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr ""
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr ""
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr ""
@@ -305,102 +307,119 @@ msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr ""
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr ""
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr ""
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr ""
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr ""
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr ""
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr ""
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr ""
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr ""
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr ""
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr ""
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr ""
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr ""
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr ""
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr ""
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr ""
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr ""
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr ""
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr ""
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr ""
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr ""
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr ""
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr ""
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr ""
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr ""
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr ""
@@ -448,16 +467,16 @@ msgstr ""
msgid "Songs To Be Copied"
msgstr ""
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr ""
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr ""
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -466,317 +485,323 @@ msgid ""
"refresh Mopidy's database, and restart Cantata for any changes to be active."
msgstr ""
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr ""
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr ""
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr ""
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr ""
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr ""
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr ""
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr ""
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr ""
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr ""
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr ""
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr ""
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr ""
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr ""
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr ""
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr ""
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr ""
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr ""
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr ""
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr ""
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr ""
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr ""
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
msgstr ""
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr ""
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr ""
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr ""
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr ""
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr ""
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr ""
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
msgstr ""
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr ""
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr ""
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr ""
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr ""
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr ""
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr ""
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr ""
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr ""
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr ""
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr ""
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr ""
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr ""
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr ""
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr ""
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr ""
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr ""
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr ""
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr ""
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr ""
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr ""
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr ""
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr ""
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr ""
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr ""
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
msgstr ""
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr ""
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr ""
@@ -824,8 +849,8 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr ""
@@ -931,70 +956,76 @@ msgstr ""
msgid "Forget Device"
msgstr ""
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr ""
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr ""
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr ""
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr ""
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr ""
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr ""
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
msgstr ""
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr ""
+
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr ""
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr ""
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
msgstr ""
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
msgstr ""
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr ""
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
msgstr ""
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr ""
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr ""
@@ -1068,7 +1099,7 @@ msgid ""
"anything above <b>205kb/s</b> is probably overkill."
msgstr ""
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr ""
@@ -1150,7 +1181,7 @@ msgid ""
"FLAC."
msgstr ""
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr ""
@@ -1253,63 +1284,62 @@ msgstr ""
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
msgstr ""
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr ""
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr ""
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr ""
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr ""
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr ""
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr ""
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr ""
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr ""
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr ""
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr ""
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr ""
@@ -1317,7 +1347,7 @@ msgstr ""
msgid "%1 (Disc %2)"
msgstr ""
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr ""
@@ -1325,14 +1355,15 @@ msgstr ""
msgid "Connection"
msgstr ""
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr ""
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
#: devices/remotedevicepropertieswidget.cpp:52
@@ -1410,20 +1441,20 @@ msgstr ""
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr ""
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr ""
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr ""
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr ""
@@ -1467,7 +1498,7 @@ msgstr ""
msgid "Failed to save %1."
msgstr ""
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr ""
@@ -1499,66 +1530,70 @@ msgstr ""
msgid "Unknown method called."
msgstr ""
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr ""
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr ""
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr ""
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
msgstr ""
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr ""
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr ""
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr ""
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr ""
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr ""
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr ""
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr ""
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr ""
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr ""
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr ""
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1579,24 +1614,25 @@ msgstr ""
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr ""
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr ""
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr ""
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1626,61 +1662,68 @@ msgstr ""
msgid "Dynamic Rules"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr ""
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr ""
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr ""
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1689,67 +1732,67 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr ""
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr ""
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr ""
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr ""
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr ""
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr ""
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr ""
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr ""
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr ""
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr ""
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr ""
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr ""
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr ""
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr ""
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
msgstr ""
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1758,7 +1801,7 @@ msgid ""
"%2 x %3 (%4)"
msgstr ""
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1767,67 +1810,68 @@ msgid ""
"%2 x %3"
msgstr ""
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr ""
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr ""
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr ""
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr ""
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr ""
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr ""
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr ""
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr ""
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr ""
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr ""
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr ""
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr ""
@@ -1839,30 +1883,33 @@ msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr ""
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr ""
@@ -1878,484 +1925,439 @@ msgstr ""
msgid "Connection Failed"
msgstr ""
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr ""
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr ""
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr ""
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr ""
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr ""
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr ""
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr ""
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr ""
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr ""
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr ""
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr ""
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr ""
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr ""
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr ""
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
msgstr ""
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr ""
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr ""
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr ""
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr ""
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr ""
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr ""
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr ""
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
msgstr ""
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr ""
+
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr ""
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr ""
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr ""
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr ""
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr ""
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr ""
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr ""
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr ""
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr ""
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr ""
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr ""
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr ""
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr ""
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr ""
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr ""
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr ""
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr ""
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr ""
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
msgstr ""
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr ""
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr ""
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr ""
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr ""
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr ""
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr ""
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr ""
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr ""
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr ""
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr ""
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr ""
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr ""
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr ""
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr ""
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr ""
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr ""
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr ""
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr ""
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr ""
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr ""
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr ""
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr ""
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr ""
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr ""
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr ""
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
msgstr ""
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr ""
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
msgstr ""
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr ""
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr ""
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr ""
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr ""
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr ""
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr ""
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr ""
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr ""
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr ""
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr ""
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr ""
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr ""
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr ""
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr ""
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr ""
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr ""
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr ""
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr ""
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr ""
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr ""
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr ""
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr ""
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr ""
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr ""
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2363,44 +2365,56 @@ msgid ""
"html\">GPLv3</a>"
msgstr ""
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
msgstr ""
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
"tv</a>"
msgstr ""
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
"\">Wikipedia</a> and <a href=\"http://www.last.fm\">Last.fm</a>"
msgstr ""
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
msgstr ""
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
+msgstr ""
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr ""
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr ""
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
msgstr ""
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
msgstr ""
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2409,7 +2423,7 @@ msgid ""
"tr><tr><td align=\"right\">Tags: </td><td>%7</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2418,104 +2432,124 @@ msgid ""
"\"right\">Updated: </td><td>%5</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr ""
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr ""
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr ""
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr ""
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr ""
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr ""
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr ""
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr ""
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr ""
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr ""
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr ""
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr ""
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr ""
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
msgstr ""
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr ""
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
msgstr ""
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
+"li></ul>"
msgstr ""
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr ""
@@ -2523,33 +2557,37 @@ msgstr ""
msgid "Remove Duplicates"
msgstr ""
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr ""
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr ""
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr ""
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr ""
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr ""
@@ -2613,113 +2651,117 @@ msgid_plural "%1 Updates available"
msgstr[0] ""
msgstr[1] ""
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr ""
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr ""
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr ""
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr ""
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr ""
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr ""
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr ""
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr ""
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr ""
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr ""
@@ -2727,387 +2769,376 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr ""
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr ""
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr ""
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr ""
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr ""
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr ""
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr ""
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr ""
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr ""
+
+#: gui/serversettings.cpp:240
+msgid ""
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr ""
+
+#: gui/serversettings.cpp:241
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr ""
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
msgstr ""
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr ""
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr ""
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr ""
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr ""
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr ""
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr ""
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr ""
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr ""
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr ""
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr ""
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr ""
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr ""
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr ""
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr ""
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr ""
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr ""
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr ""
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr ""
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr ""
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr ""
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr ""
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr ""
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr ""
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr ""
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
msgstr ""
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr ""
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr ""
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr ""
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr ""
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr ""
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr ""
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr ""
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr ""
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr ""
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr ""
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr ""
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr ""
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr ""
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr ""
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr ""
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr ""
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr ""
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr ""
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr ""
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr ""
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr ""
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr ""
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr ""
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr ""
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr ""
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr ""
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr ""
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr ""
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr ""
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr ""
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr ""
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr ""
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr ""
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr ""
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr ""
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr ""
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr ""
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr ""
@@ -3115,6 +3146,10 @@ msgstr ""
msgid "Disc"
msgstr ""
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr ""
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr ""
@@ -3137,111 +3172,107 @@ msgstr ""
msgid "Album Artist"
msgstr ""
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr ""
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr ""
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr ""
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr ""
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr ""
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr ""
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr ""
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr ""
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr ""
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr ""
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr ""
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr ""
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr ""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr ""
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr ""
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr ""
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr ""
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr ""
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr ""
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
msgstr ""
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr ""
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr ""
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr ""
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr ""
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr ""
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
@@ -3249,15 +3280,11 @@ msgstr ""
msgid "Personal"
msgstr ""
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr ""
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr ""
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3268,12 +3295,12 @@ msgid ""
"%3"
msgstr ""
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr ""
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr ""
@@ -3306,19 +3333,19 @@ msgstr ""
msgid "Streaming format:"
msgstr ""
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr ""
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr ""
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr ""
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr ""
@@ -3328,85 +3355,85 @@ msgstr ""
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr ""
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr ""
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr ""
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr ""
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr ""
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr ""
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr ""
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr ""
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr ""
@@ -3422,189 +3449,193 @@ msgstr ""
msgid "Delete Downloaded Podcast Episodes"
msgstr ""
-#: online/onlineservicespage.cpp:299
-msgctxt "Search ServiceName:"
-msgid "Search %1:"
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
msgstr ""
-#: online/onlineservicespage.cpp:437
-msgid "Re-download music listing for %1?"
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
msgstr ""
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
-msgid "Re-download"
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
msgstr ""
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
msgstr ""
-#: online/onlineservicespage.cpp:544
-msgid "Refresh all podcast listings?"
+#: online/onlineservicespage.cpp:322
+msgctxt "Search ServiceName:"
+msgid "Search %1:"
+msgstr ""
+
+#: online/onlineservicespage.cpp:467
+msgid "Re-download music listing for %1?"
msgstr ""
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
+msgid "Re-download"
msgstr ""
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
+#: online/onlineservicespage.cpp:574
+msgid "Refresh all podcast listings?"
msgstr ""
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
+#: online/onlineservicespage.cpp:648
+msgid ""
+"Cancel podcast episode downloads (both current and any that are queued)?"
msgstr ""
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:685
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
+"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
msgstr ""
-#: online/onlineservicespage.cpp:699
-msgid ""
-"Do you wish to the delete downloaded files of the selected podcast episodes?"
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
msgstr ""
-#: online/podcastsearchdialog.cpp:253
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr ""
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr ""
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr ""
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr ""
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr ""
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr ""
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr ""
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr ""
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr ""
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr ""
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr ""
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
msgstr ""
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr ""
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr ""
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr ""
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr ""
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr ""
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr ""
@@ -3616,59 +3647,77 @@ msgstr ""
msgid "Download episodes to:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr ""
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr ""
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr ""
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr ""
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr ""
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr ""
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr ""
@@ -3680,61 +3729,61 @@ msgstr ""
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr ""
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr ""
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr ""
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr ""
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr ""
@@ -3759,7 +3808,7 @@ msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr ""
@@ -3786,8 +3835,8 @@ msgstr ""
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
#. i18n: file: context/othersettings.ui:213
@@ -3796,17 +3845,16 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr ""
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
msgstr ""
#. i18n: file: context/togglelist.ui:17
@@ -3864,21 +3912,20 @@ msgid "To copy:"
msgstr ""
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
msgstr ""
#. i18n: file: devices/albumdetails.ui:26
@@ -3889,13 +3936,13 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr ""
@@ -3960,170 +4007,169 @@ msgid "Never skip on read error"
msgstr ""
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4245,162 +4291,158 @@ msgid "The genre of the album."
msgstr ""
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
#. i18n: file: dynamic/dynamicpage.ui:26
@@ -4421,39 +4463,51 @@ msgstr ""
msgid "Edit"
msgstr ""
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr ""
@@ -4465,149 +4519,152 @@ msgstr ""
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr ""
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
msgstr ""
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr ""
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr ""
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr ""
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr ""
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4618,13 +4675,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4632,7 +4689,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4643,74 +4700,73 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -4718,56 +4774,52 @@ msgid ""
"folders.</p>"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
"etc."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -4778,258 +4830,295 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5038,39 +5127,33 @@ msgid ""
"to 'Metal'."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5078,154 +5161,160 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr ""
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr ""
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr ""
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr ""
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5236,135 +5325,138 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr ""
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr ""
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
msgstr ""
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr ""
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr ""
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr ""
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5374,133 +5466,149 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr ""
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr ""
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
-msgstr ""
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr ""
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr ""
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr ""
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr ""
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
+msgid ""
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr ""
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr ""
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr ""
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""
@@ -5551,7 +5659,7 @@ msgstr ""
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr ""
@@ -5561,8 +5669,8 @@ msgstr ""
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
#: replaygain/rgdialog.cpp:263
@@ -5585,17 +5693,17 @@ msgstr ""
msgid "Reading existing tags..."
msgstr ""
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr ""
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr ""
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr ""
@@ -5619,63 +5727,63 @@ msgstr ""
msgid "Original: %1"
msgstr ""
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr ""
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr ""
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr ""
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr ""
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr ""
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr ""
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr ""
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr ""
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr ""
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr ""
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr ""
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr ""
@@ -5687,29 +5795,29 @@ msgstr ""
msgid "%1: Love Current Track"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -5739,27 +5847,27 @@ msgstr ""
msgid "Logout"
msgstr ""
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr ""
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr ""
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr ""
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr ""
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr ""
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr ""
@@ -5804,39 +5912,39 @@ msgid "Installing/updating %1"
msgstr ""
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
+msgid "Failed to install '%1'"
msgstr ""
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
+msgid "Failed to download '%1'"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr ""
@@ -5852,192 +5960,195 @@ msgstr ""
msgid "Add New Stream To Favorites"
msgstr ""
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr ""
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr ""
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr ""
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr ""
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr ""
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr ""
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr ""
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
msgstr ""
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
msgstr ""
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
msgstr ""
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr ""
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr ""
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr ""
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
msgstr ""
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
msgstr ""
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
msgstr ""
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr ""
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
msgstr ""
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr ""
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr ""
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr ""
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr ""
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr ""
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr ""
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr ""
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
msgstr ""
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr ""
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr ""
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr ""
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr ""
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr ""
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr ""
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr ""
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr ""
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr ""
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr ""
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr ""
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr ""
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr ""
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr ""
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr ""
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr ""
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr ""
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr ""
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr ""
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr ""
@@ -6049,14 +6160,32 @@ msgstr ""
msgid "Please enter password:"
msgstr ""
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr ""
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr ""
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr ""
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr ""
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr ""
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr ""
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr ""
@@ -6065,126 +6194,238 @@ msgstr ""
msgid "Select File"
msgstr ""
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr ""
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr ""
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr ""
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr ""
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr ""
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr ""
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr ""
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] ""
msgstr[1] ""
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr ""
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr ""
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr ""
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr ""
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr ""
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr ""
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
msgstr ""
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr ""
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr ""
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr ""
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr ""
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr ""
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr ""
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr ""
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr ""
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr ""
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
msgstr ""
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
msgstr ""
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
msgstr ""
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
msgstr ""
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr ""
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr ""
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr ""
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6199,7 +6440,7 @@ msgstr ""
msgid "All Genres"
msgstr ""
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr ""
@@ -6207,15 +6448,19 @@ msgstr ""
msgid "Menu"
msgstr ""
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr ""
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr ""
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr ""
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr ""
@@ -6229,17 +6474,20 @@ msgstr ""
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr ""
diff --git a/po/cs.po b/po/cs.po
index 4fd7655..370d83c 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
-"PO-Revision-Date: 2014-07-07 19:05+0200\n"
-"Last-Translator: Pavel <pavelfric at seznam.cz>\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
+"PO-Revision-Date: 2014-10-11 12:14+0200\n"
+"Last-Translator: Pavel Fric <pavelfric at seznam.cz>\n"
"Language-Team: Czech <kde-i18n-doc at kde.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
@@ -23,10 +23,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "Obnovit informace o albu"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "Album"
@@ -37,32 +37,33 @@ msgstr "Album"
msgid "Tracks"
msgstr "Skladby"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "Obnovit informace o umělci"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "Umělec"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "Alba"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Internetové odkazy"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "Podobní umělci"
@@ -70,28 +71,28 @@ msgstr "Podobní umělci"
msgid "Lyrics Providers"
msgstr "Poskytovatelé textů písní"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "Jazyky Wikipedie"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "Jiné"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "Nastavit znovu řádkování"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "&Umělec"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "&Album"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr "&Skladba"
@@ -121,16 +122,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "Název:"
@@ -138,17 +139,17 @@ msgstr "Název:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "Umělec:"
@@ -164,38 +165,39 @@ msgstr "Vyberte stránky, které chcete použít při hledání textů písní."
msgid "Song Information"
msgstr "Informace o písni"
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "Obrázky (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr "10 px"
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr "%1px"
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "Slova písně"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "Informace"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "Značky"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr "Popisná data"
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -217,14 +219,14 @@ msgstr "Smazat soubor se slovy písně"
msgid "Refresh Track Information"
msgstr "Obnovit informace o skladbě"
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "Zrušit"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "Skladba"
@@ -240,7 +242,7 @@ msgstr ""
"Nahrát znovu z disku, nebo smazat kopii na disku a stáhnout?"
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "Nahrát znovu"
@@ -272,39 +274,39 @@ msgstr "Smazat soubor se slovy písně?"
msgid "Delete File"
msgstr "Smazat soubor"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr "Umělec alba"
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr "Skladatel"
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr "Textař"
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr "Dirigent"
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr "Autor předělávky"
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr "Podnázev"
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr "Číslo skladby"
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr "Číslo disku"
@@ -316,102 +318,119 @@ msgstr "Číslo disku"
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "Žánr"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "Datum"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr "Původní datum"
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr "Poznámka"
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr "Autorské právo"
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr "Štítek"
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr "Katalogové číslo"
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr "Třídění podle názvu"
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr "Třídění podle umělce"
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr "Třídění podle alba a umělce"
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr "Třídění podle alba"
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr "Zákodováno"
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "Kodér"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr "Nálada"
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr "Média"
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "Datový tok"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr "Vzorkovací kmitočet"
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr "Kanály"
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr "Čas značkování"
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr "Účinkující (%1)"
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr "%1 kb/s"
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr "%1 Hz"
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr "Bity"
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr "Účinkující"
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "Rok"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr "Název souboru"
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "Natahují se slova písně přes %1"
@@ -461,16 +480,16 @@ msgstr "Cantata přehrává skladbu"
msgid "Songs To Be Copied"
msgstr "Písně ke zkopírování"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>NEPLATNÝ</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(Když jiný)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -485,134 +504,144 @@ msgstr ""
"obnovil databázi Mopidy a spustil Cantatu znovu, aby se změny uvedly v "
"činnost."
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "Umělci:%1, Alba:%2, Písně:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 volno"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "Místní hudební knihovna"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "Audio CD"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
"Na cílovém zařízení nezbývá dost místa.\n"
+"\n"
"Vybrané písně zabírají %1, ale zbývá jen %2.\n"
"Písně bude třeba překódovat na menší velikost souborů, aby mohly být úspěšně "
"zkopírovány."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
"V cíli nezbývá dost místa.\n"
+"\n"
"Vybrané písně zabírají %1, ale zbývá jen %2."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "Kopírovat písně"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "Smazat písně"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Nenastavil jste cílové zařízení.<br/>Pokračovat s výchozím nastavením?</p>"
+"Nenastavil jste cílové zařízení.\n"
+"\n"
+"Pokračovat s výchozím nastavením?"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "Nenastaveno"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "Použít výchozí nastavení"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Nenastavil jste zdrojové zařízení.<br/>Pokračovat s výchozím nastavením?</"
-"p>"
+"Nenastavil jste zdrojové zařízení.\n"
+"\n"
+"Pokračovat s výchozím nastavením?"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "Opravdu chcete zastavit?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "Zastavit"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "Zařízení bylo odstraněno!"
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "Zařízení není připojeno!"
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "Zařízení je zaneprázdněno?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "Zařízení bylo změněno?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "Uklízí se nepoužívané složky"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "Spočítat vyrovnání hlasitosti skladeb pro vytažené skladby?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr "Vyrovnání hlasitosti"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "Spočítat"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "Cílový souborový název již existuje!"
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "Píseň již existuje!"
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "Píseň neexistuje!"
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
@@ -620,31 +649,31 @@ msgstr ""
"Nepodařilo se vytvořit cílovou složku!<br/>Prověřte, prosím, zda máte "
"dostatečná oprávnění."
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "Zdrojový soubor už neexistuje?"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "Nepodařilo se zkopírovat."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "Nepodařilo se smazat."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "Nepřipojeno k zařízení."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "Vybraný kodek není dostupný."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "Překódování se nezdařilo."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
@@ -652,169 +681,171 @@ msgstr ""
"Nepodařilo se vytvořit dočasný soubor.<br/>(Požadováno pro překódování na "
"zařízení MTP.)"
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "Nepodařilo se přečíst zdrojový soubor."
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "Nepodařilo se zapsat do cílového souboru."
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "Na zařízení není žádné místo."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "Nepodařilo se zaktualizovat popisná data."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "Nepodařilo se stáhnout skladbu."
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "Nepodařilo se uzamknout zařízení."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "Vlastnosti místní hudební knihovny"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "Chyba"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "Přeskočit"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "Automaticky přeskočit"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "Zkusit znovu"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "Album:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "Skladba:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "Zdrojový soubor:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "Cílový soubor:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "Soubor:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "Počítá se..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (odhadováno)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "Zbývající čas:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "Ukládá se vyrovnávací paměť"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "Použít zařazení pod Různí umělci"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "Zvrátit zařazení pod Různí umělci"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Psát velkými písmeny"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "Upravit čísla skladeb"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "Nástroje"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "Použít zařazení pod Různí umělci?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>Toto nastaví Umělce alba a Umělce na Různí umělci, a nastaví Název na "
-"\"Umělec skladby - Název skladby\"</i>"
+"Toto nastaví Umělce alba a Umělce na Různí umělci, a nastaví Název na "
+"\"Umělec skladby - Název skladby\""
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "Zvrátit zařazení pod Různí umělci"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr "Zvrátit zařazení pod Různí umělci?"
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>Tam, kde Umělec alba je stejný jako Umělec a Název je ve formátu \"Umělec "
+"Tam, kde Umělec alba je stejný jako Umělec a Název je ve formátu \"Umělec "
"skladby - Název skladby\", se Umělec vezme z Názvu a samotný název se "
-"nastaví na prostý Název. Např. <br/><br/>Pokud je Název \"Wibble - Wobble\", "
-"pak Umělec se nastaví na \"Wibble\" a Název na \"Wobble\"</i>"
+"nastaví na prostý Název.\n"
+"Např. Pokud je Název \"Wibble - Wobble\", pak Umělec se nastaví na \"Wibble"
+"\" a Název na \"Wobble\""
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "Vrátit"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
-msgstr "Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
+msgstr "Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba?"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "Upravit číslo skladby o:"
@@ -863,8 +894,8 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "Název"
@@ -985,75 +1016,79 @@ msgstr "Seřídit"
msgid "Forget Device"
msgstr "Zapomenout zařízení"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "Přidat zařízení"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "Vyhledat podrobnosti alba a skladby?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "Obnovit"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "Pomocí CDDB"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "Pomocí MusicBrainz"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
-msgstr ""
-"<p>Jaký typ aktualizace chcete provést?<ul><li>Částečný - Jsou prohledány "
-"pouze nové písně <i>(rychlé)</i></li><li>Úplný - Jsou prohledány všechny "
-"písně <i>(pomalé)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr "Který typ aktualizace chcete provést?"
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr "Částečný - Jsou prohledány pouze nové písně (rychlé)"
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr "Úplný - Jsou prohledány všechny písně (pomalé)"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "Částečný"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "Úplný"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
"Opravdu chcete odstranit vybrané písně?\n"
+"\n"
"Tento krok nelze vrátit zpět."
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "Opravdu chcete zapomenout na <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "Opravdu chcete zapomenout na '%1'?"
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "Opravdu chcete vysunout zvukové CD <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr "Opravdu chcete vysunout zvukové CD '%1 - %2'?"
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "Vysunout"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "Opravdu chcete odpojit <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr "Opravdu chcete odpojit '%1'?"
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "Odpojit"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "Nejprve, prosím, zavřete další dialogy"
@@ -1163,7 +1198,7 @@ msgstr ""
"přenosném přehrávači.<br/>Cokoli pod <b>120 kb/s</b> může být hudebně "
"neuspokojivé a cokoli nad <b>205 kb/s</b> je pravděpodobně až přespříliš."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1283,7 +1318,7 @@ msgstr ""
"<br>Doporučováno pouze pro hudební přehrávače od firmy Apple a přehrávače "
"nepodporující FLAC."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1414,13 +1449,13 @@ msgstr "Tanec"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-"<p>Následující proměnné budou nahrazeny jejich odpovídajícím významem pro "
-"každý název skladby.</p>"
+"Následující proměnné budou nahrazeny jejich odpovídajícím významem pro každý "
+"název skladby."
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
@@ -1428,53 +1463,52 @@ msgstr ""
"<tr><th><em>Proměnná</em></th><th><em>Tlačítko</em></th><th><em>Popis</em></"
"th></tr>"
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "Obnovuje se..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "Čte se vyrovnávací paměť"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "Připojuje se k zařízení..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "Nenalezeno žádné zařízení"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "Připojeno k zařízení"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "Odpojeno od zařízení"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "Obnovují se složky..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "Obnovují se soubory..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "Obnovují se skladby..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "Nepřipojeno"
@@ -1482,7 +1516,7 @@ msgstr "Nepřipojeno"
msgid "%1 (Disc %2)"
msgstr "%1 (Disk %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "V MusicBrainz nenalezeny žádné shody"
@@ -1490,17 +1524,19 @@ msgstr "V MusicBrainz nenalezeny žádné shody"
msgid "Connection"
msgstr "Spojení"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "Hudební knihovna"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"Vzdálené zařízení s názvem \"%1\" již existuje!\n"
-"Vyberte, prosím, jiný název"
+"Vzdálené zařízení s názvem \"'%1\" již existuje!\n"
+"\n"
+"Vyberte, prosím, jiný název."
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1580,20 +1616,20 @@ msgstr "Neznámá velikost"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "Hledat"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "Zaškrtnout položky"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "Zrušit zaškrtnutí položek"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "Nic nevybráno"
@@ -1637,7 +1673,7 @@ msgstr "Neplatný název souboru. (%1)"
msgid "Failed to save %1."
msgstr "Nepodařilo se uložit %1."
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "Nepodařilo se smazat soubor s pravidly. (%1)"
@@ -1669,20 +1705,24 @@ msgstr "Poskytnuty nesprávné argumenty."
msgid "Unknown method called."
msgstr "Zavolána neznámá metoda."
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "Neznámá chyba"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "Spustit dynamický seznam skladeb"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "Zastavit dynamický režim"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr " - Hodnocení: %1...%2"
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
@@ -1690,47 +1730,47 @@ msgstr ""
"Aby pracoval dynamický režim Cantaty, musíte do vašeho systému nainstalovat "
"\"perl\"."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "Nepodařilo se najít soubor s pravidly - %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "Nepodařilo se odstranit předchozí soubor s pravidly - %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "Nepodařilo se nainstalovat soubor s pravidly - %1 -> %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "Dynamizátor byl ukončen."
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "Ukládá se pravidlo"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "Maže se pravidlo"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "Očekává se odpověď na předchozí příkaz. (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr "Nepodařilo se uložit %1. (%2)"
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Nepodařilo se zkontrolovat stav dynamizátoru. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "Nepodařilo se nastavit nynější dynamická pravidla. (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1752,26 +1792,28 @@ msgstr "Odstranit dynamická pravidla"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
"Opravdu chcete odstranit vybraná pravidla?\n"
+"\n"
"Tento krok nelze vrátit zpět."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "Dynamické pravidlo"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "Přidat"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr "<i><b>CHYBA</b>: 'Od roku' má být menší než 'Do roku'</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1803,20 +1845,26 @@ msgstr "(Přesné)"
msgid "Dynamic Rules"
msgstr "Dynamická pravidla"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr "O dynamických pravidlech"
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
msgstr ""
"<p>Cantata se dotáže vaší knihovny za použití všech v seznamu uvedených "
"pravidel. Seznam pravidel <i>Zahrnout</i> se použije na sestavení souboru "
@@ -1830,49 +1878,53 @@ msgstr ""
"ale ne z alba Abc', budete potřebovat následující: <ul><li>Zahrnout Umělec "
"alba=Wibble</li><li>Vyloučit Album=Abc</li></ul>Poté co byl vytvořen soubor "
"písní vhodných k použití, Cantata náhodně vybere písně tak, udržela řadu "
-"skladeb k přehrání naplněnou 10 záznamy.</p>"
+"skladeb k přehrání naplněnou 10 záznamy. Pokud byl stanoven rozsah "
+"hodnocení, potom se použijí pouze písně nacházející s v rámci tohoto "
+"hodnocení.</p>"
-#: dynamic/dynamicrulesdialog.cpp:311
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "Nepodařilo se uložit %1"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
"Seznam pravidel pojmenovaný '%1' již existuje!\n"
+"\n"
"Přepsat?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "Přepsat pravidla"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "Ukládá se %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "Maže se..."
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "Název"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "Počet položek"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "Použité místo"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr "Celkové použité místo: %1"
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1881,78 +1933,73 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
"Cantata ukládá do vyrovnávací paměti místní kopii přehledu hudby pro "
-"urychlení "
-"nahrávání sbírky. Cantata může do vyrovnávací paměti uložit i obaly, texty "
-"písní nebo "
-"obrázky umělců, pokud byly tyto staženy a nepodařilo se je uložit do složky s "
-"hudbou "
-"(protože k ní Cantata nemohla přistupovat, nebo jste Cantatu nastavil tak, "
-"aby do "
-"nich tyto položky neukládala). Níže je shrnutí nynějšího využívání ukládání "
-"do "
-"vyrovnávací paměti Cantatou."
-
-#: gui/cachesettings.cpp:264
+"urychlení nahrávání sbírky. Cantata může do vyrovnávací paměti uložit i "
+"obaly, texty písní nebo obrázky umělců, pokud byly tyto staženy a nepodařilo "
+"se je uložit do složky s hudbou (protože k ní Cantata nemohla přistupovat, "
+"nebo jste Cantatu nastavil tak, aby do nich tyto položky neukládala). Níže "
+"je shrnutí nynějšího využívání ukládání do vyrovnávací paměti Cantatou."
+
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "Obaly"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "Obaly se změněnou velikostí"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "Pozadí"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "Informace o umělci"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "Informace o albu"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr "Informace o skladbě"
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr "Soupisy proudů"
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "Jamendo"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "Magnatune"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr "Adresáře se záznamy (podcasty)"
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr "Odesílat informace o skladbách"
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "Smazat vše"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "Smazat všech '%1' položek?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "Smazat položky ve vyrovnávací paměti"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>Smazat vše z následujícího?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr "Smazat položky z vybraných skupin?"
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1963,7 +2010,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1974,71 +2021,73 @@ msgstr ""
"%1\n"
"%2 x %3"
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "Nynější obal"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr "Archiv obalů"
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "Obrázek"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "Stahuje se..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "Obrázek (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
"Pro tohoto umělce již existuje jeden obrázek. Soubor však není zapisovatelný."
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
"Pro toto album již existuje jeden obrázek. Soubor však není zapisovatelný."
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr "'%1' Obrázek umělce"
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr "'%1 - %2' Obal alba"
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
"Nepodařilo se nastavit obal!\n"
+"\n"
"Nepodařilo se stáhnout do dočasného souboru!"
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "Nepodařilo se stáhnout obrázek!"
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "Nahrát místní obal"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "Soubor je již v seznamu!"
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "Nepodařilo se přečíst obrázek!"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "Zobrazit"
@@ -2050,36 +2099,42 @@ msgstr "Zobrazit"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "Odstranit"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
"Nepodařilo se nastavit obal!\n"
+"\n"
"Nepodařilo se udělat kopii!"
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
"Nepodařilo se nastavit obal!\n"
+"\n"
"Nepodařilo se zazálohovat originál!"
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
"Nepodařilo se nastavit obal!\n"
+"\n"
"Nepodařilo se zkopírovat soubor do '%1'!"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "Hledá se..."
@@ -2095,258 +2150,200 @@ msgstr "Spojení navázáno"
msgid "Connection Failed"
msgstr "Spojení se nezdařilo"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr "Album, umělec, rok"
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr "Album, rok, umělec"
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr "Umělec, album, rok"
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr "Umělec, rok, album"
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr "Rok, album, umělec"
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr "Rok, umělec, album"
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "Žádné"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "Malý"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "Střední"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "Velký"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "Hodně velký"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr "Základní strom (žádné ikony)"
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "Jednoduchý strom"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "Podrobný strom"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "Seskupená alba"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "Seznam"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "Ikona/Seznam"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr "Mřížka"
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "Tabulka"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "Řada"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "Umělci"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "Složky"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "Seznamy"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "Dynamické seznamy skladeb"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "Proudy (např. radiostanice)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr ""
"Internetové služby - Jamendo, Maganatune, SoundCloud, a zvukové záznamy"
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr "Zařízení - UMS, MTP (např. Android), a zvuková CD"
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr "Hledání (přes MPD)"
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr "Informace - informace o nynější písni (umělec, album a slova písně)"
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "Styl:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Velký"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Malý"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr "Pruh s kartami"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "Vlevo"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "Vpravo"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "Nahoře"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "Dole"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr "Oznámení"
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "Výchozí nastavení systému"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "Cantata"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "KDE klient pro MPD"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "© 2011-2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "Správce"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "Vylepšení rozhraní"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "Autor QtMPC"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
@@ -2354,114 +2351,119 @@ msgstr ""
"Pozadí pohledu na souvislosti (zvažte, prosím, nahrání vašeho vlastního "
"fanouškovského umění na fanart.tv)"
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "Wikipedie"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "Popisná data pohledu na souvislosti"
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "Adresa (URL) k otevření"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "Nastavit Cantatu..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr "Nastavení"
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "Ukončit"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "O programu Cantata"
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "Ukázat okno"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "Informace o serveru..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "Obnovit databázi"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr "Plné obnovení"
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "Spojit"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "Sbírka"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "Výstupy"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "Zastavit po skladbě"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "Přidat do uloženého seznamu skladeb"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "Oříznout"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "Přidat adresu proudu"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "Vyprázdnit"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr "Zaměřit na nynější skladbu"
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "Rozšířené rozhraní"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "Ukázat informace o nynější skladbě"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "Na celou obrazovku"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "Náhodné"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "Opakování"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "Jednotlivé"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2469,11 +2471,11 @@ msgstr ""
"Když jsou zapnuty jednotlivé skladby, je přehrávání zastaveno po nynější "
"písni, nebo je píseň opakována, pokud je povolen režim opakování."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "Sníst"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
@@ -2481,107 +2483,115 @@ msgstr ""
"Když je zapnuto snězení, píseň je odstraněna z řady skladeb k přehrání, poté "
"co byla přehrána"
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr "Hledat v řadě skladeb k přehrání"
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "Nastavit přednost"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "Přehrát proud"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "Najít v knihovně"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "Upravit značky písně"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "Rozbalit vše"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "Složit vše"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr "Odstranit všechny písně"
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr "Smazat stav umělců a alb Nový"
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "Dynamický"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "Proudy"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "Internet"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "Zařízení"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "Informace"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr "Ukázat pruh s nabídkou"
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr "&Hudba"
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "Úp&ravy"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr "&Pohled"
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr "Řa&da"
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "&Nastavení"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "Nápo&věda"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr "Nastavit hodnocení"
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr "Žádné hodnocení"
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
"Nepodařilo se najít žádné písně odpovídající pravidlům dynamického seznamu "
"skladeb."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "Připojuje se k %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "Obnovit databázi MPD?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "O programu Cantata"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2592,7 +2602,7 @@ msgstr ""
"2011-2014.<br/>Vydáno pod <a href=\"http://www.gnu.org/licenses/gpl.html"
"\">GPLv3</a>"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
@@ -2600,7 +2610,7 @@ msgstr ""
"Založeno na <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"Autoři QtMPC<br/>"
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
@@ -2609,7 +2619,7 @@ msgstr ""
"Pozadí pohledu na souvislosti díky laskavosti <a href=\"http://www.fanart.tv"
"\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2618,7 +2628,7 @@ msgstr ""
"Popisná data pohledu na souvislosti díky laskavosti <a href=\"http://www."
"wikipedia.org\">Wikipedia</a> and <a href=\"http://www.last.fm\">Last.fm</a>"
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2626,21 +2636,33 @@ msgstr ""
"Zvažte, prosím, nahrání vašeho vlastního fanouškovského umění na <a href="
"\"http://www.fanart.tv\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
msgstr ""
-"Zvukové záznamy se nyní stahují.\n"
+"Zvukový záznam se nyní stahují.\n"
"\n"
-"Pokud bude stahování přerušeno nyní, budou zrušena všechna stahování."
+"Pokud bude program ukončen nyní, bude stahování zrušeno."
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
msgstr "Zrušit stahování a ukončit."
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr "Povoleno: %1"
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr "Zakázáno: %1"
+
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Informace o serveru"
+
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2650,12 +2672,11 @@ msgid ""
msgstr ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protokol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Doba "
-"provozu:"
-" </td><td>%4</td></tr><tr><td align=\"right\">Přehrává se: </td><td>"
-"%5</td></tr><tr><td align=\"right\">Ovladače: </td><td>%6</td></"
-"tr><tr><td align=\"right\">Značky: </td><td>%7</td></tr>"
+"provozu: </td><td>%4</td></tr><tr><td align=\"right\">Přehrává se: "
+"</td><td>%5</td></tr><tr><td align=\"right\">Ovladače: </td><td>%6</"
+"td></tr><tr><td align=\"right\">Značky: </td><td>%7</td></tr>"
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2667,92 +2688,111 @@ msgstr ""
"\">Umělci: </td><td>%1</td></tr><tr><td align=\"right\">Alba: </"
"td><td>%2</td></tr><tr><td align=\"right\">Písně: </td><td>%3</td></"
"tr><tr><td align=\"right\">Doba trvání: </td><td>%4</td></tr><tr><td "
-"align="
-"\"right\">Obnoveno: </td><td>%5</td></tr>"
-
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "Informace o serveru"
+"align=\"right\">Obnoveno: </td><td>%5</td></tr>"
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "Cantata (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr "MPD nahlásilo následující chybu: %1"
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr "Přehrávání zastaveno"
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr "Odstranit všechny písně z řady skladeb k přehrání?"
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "Přednost"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "Zadejte přednost (0..255):"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "Název seznamu skladeb"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "Zadejte název pro seznam skladeb:"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-"<b>%1</b> se používá na ukládání oblíbených proudů. Vyberte, prosím, jiný "
-"název."
+"'%1' se používá na ukládání oblíbených proudů. Vyberte, prosím, jiný název."
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-"Seznam skladeb pojmenovaný <b>%1</b> již existuje!<br/>Přidat do tohoto "
-"seznamu skladeb?"
+"Seznam skladeb pojmenovaný '%1' již existuje!\n"
+"\n"
+"Přidat do tohoto seznamu skladeb?"
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "Existující seznam skladeb"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "Adresa proudu"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr "Zadejte adresu proudu (URL):"
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr "Neplatná nebo nepodporovaná adresa (URL)!"
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr "Značky písní je možné upravovat jen v hudební sbírce MPD."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Žádné"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "Automaticky"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
msgstr ""
"<i>Připojeno k %1.<br/>Záznamy níže použít na nyní připojenou sbírku MPD.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2760,32 +2800,32 @@ msgstr ""
"<i>Nepřipojeno.<br/>Záznamy níže nelze změnit, protože Cantata není "
"připojena k MPD.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
+"li></ul>"
msgstr ""
-"<p>Vyrovnání hlasitosti (Replay Gain) je navržený standard zveřejněný v roce "
+"Vyrovnání hlasitosti (Replay Gain) je navržený standard zveřejněný v roce "
"2001 k normalizaci vnímané hlasitosti počítačových zvukových formátů, jako "
"jsou MP3 a Ogg Vorbis. Pracuje na základě skladba/album, a je nyní "
-"podporován rostoucím počtem přehrávačů.</p><p>Je možné použít následující "
+"podporován rostoucím počtem přehrávačů.<br/><br/>Je možné použít následující "
"nastavení vyrovnání hlasitosti:<ul><li><i>Žádné</i> - Není použito žádné "
"vyrovnání hlasitosti.</li><li><i>Skladba</i> - Hlasitost je upravena za "
"použití značek pro vyrovnání hlasitosti u skladby.</li><li><i>Album</i> - "
"Hlasitost je upravena za použití značek pro vyrovnání hlasitosti u alba.</"
"li><li><i>Automaticky</i> - Hlasitost je upravena za použití značek pro "
"vyrovnání hlasitosti u skladby, v případě že je zapnuto náhodné přehrávání, "
-"jinak se použijí značky u alba.</li></ul></p>"
+"jinak se použijí značky u alba.</li></ul>"
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "Přejmenovat"
@@ -2793,35 +2833,43 @@ msgstr "Přejmenovat"
msgid "Remove Duplicates"
msgstr "Odstranit zdvojené"
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
"Opravdu chcete odstranit vybrané seznamy skladeb?\n"
+"\n"
"Tento krok nelze vrátit zpět."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "Odstranit seznamy skladeb"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Seznam skladeb pojmenovaný <b>%1</b> již existuje!<br/>Přepsat?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Seznam skladeb pojmenovaný '%1' již existuje!\n"
+"\n"
+"Přepsat?"
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "Přepsat seznam skladeb"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "Přejmenovat seznam skladeb"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "Zadejte nový název pro seznam skladeb:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr "Nelze přidat písně z '%1' do '%2'"
@@ -2895,113 +2943,117 @@ msgstr[0] "Jedna aktualizace dostupná"
msgstr[1] "%1 aktualizace dostupné"
msgstr[2] "%1 aktualizací dostupných"
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "Nastavení sbírky"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "Přehrávání"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "Nastavení přehrávání"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "Soubory"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "Nastavení souborů"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "Rozhraní"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "Nastavení rozhraní"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr "Nastavení proudů"
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr "Internetoví poskytovatelé"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "Souvislosti"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "Nastavení pohledu na souvislosti"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr "Odesílání informací o skladbách"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr "Nastavení odesílání informací o skladbách"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "Server HTTP"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "Nastavení serveru HTTP"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "Nastavení zvukového CD"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "Proxy"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "Nastavení proxy"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "Zkratky"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "Nastavení klávesových zkratek"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "Vyrovnávací paměť"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "Položky ve vyrovnávací paměti"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr "Nastavení Cantaty"
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "Nastavit"
@@ -3009,60 +3061,64 @@ msgstr "Nastavit"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr "Skladatel:"
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr "Účinkující:"
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "Žánr:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr "Poznámka:"
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "Datum:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr "Změněno:"
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr "Jakékoli:"
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "Nenalezeny žádné skladby"
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
@@ -3070,336 +3126,317 @@ msgstr ""
"<i> Tato složka se také použije na umístění hudebních souborů pro přenos na "
"(a ze) zařízení.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "Server:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr "Který typ sbírky chcete připojit?"
+
+#: gui/serversettings.cpp:240
+msgid ""
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr ""
+"Obvyklý - hudební sbírku může být sdílena, je na jiném stroji, nebo je již "
+"nastavena"
+
+#: gui/serversettings.cpp:241
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
msgstr ""
-"Který typ sbírky chcete připojit?<br/><ul><li>Obvyklý - hudební sbírku může "
-"být sdílena, je na jiném stroji, nebo je již nastavena</li><li>Základní - "
-"hudební sbírka není sdílena s ostatními, a Cantata nastaví a bude řídit "
-"instanci MPD</li></ul>"
+"Základní - hudební sbírka není sdílena s ostatními, a Cantata nastaví a bude "
+"řídit instanci MPD"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "Přidat sbírku"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "Obvyklý"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "Základní"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "Smazat <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr "Smazat '%1'?"
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "Smazat"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "Nová sbírka %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "Výchozí"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr "Multimediální klávesy"
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr "Nepoužívat multimediální klávesy pro ovládání Cantaty"
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr "Používat multimediální klávesy pro ovládání Cantaty"
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-"Používat multimediální klávesy, jak jsou nastaveny v nastavení pracovního "
-"prostředí, pro ovládání Cantaty"
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-"Používat multimediální klávesy, jak jsou nastaveny v nastavení GNOME/Unity, "
-"pro ovládání Cantaty"
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "Nastavit..."
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "Předchozí skladba"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "Další skladba"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "Přehrát/Pozastavit"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "Zastavit po současné skladbě"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "Zvýšit hlasitost"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "Snížit hlasitost"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "Uložit jako"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "Přidat do řady skladeb k přehrání"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr "Přidat alba v náhodném pořadí"
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "Nahradit řadu skladeb k přehrání"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "Přidat s předností"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "Nejvyšší přednost (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "Vysoká přednost (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "Střední přednost (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "Nízká přednost (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "Výchozí přednost (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "Vlastní přednost..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "Přidat do seznamu skladeb"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Uspořádat soubory"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "Upravit značky"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "Vyrovnání hlasitosti"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr "Upravit informace o skladbě"
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "Kopírovat písně do zařízení"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "Nastavit obrázek"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr "Najít"
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "Nyní se hraje"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr "Místní smyčka (%1)"
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr "Drátové (%1)"
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr "Bezdrátové (%1)"
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "První činné"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr "Přehrát"
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr "Pozastavit"
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%1 od %2"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "List CUE"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "Seznam skladeb"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "Nastavit zařízení"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "Obnovit zařízení"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "Připojit zařízení"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "Odpojit zařízení"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "Upravit podrobnosti CD"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "Nepřipojeno žádné zařízení"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "Nepřihlášen"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "Přihlášen"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "Žádné odběry"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "Nemáte žádný činný odběr"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "Přihlášen (vypršení: %1)"
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "Sezení vypršelo"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "Zvukový soubor"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "Jednotlivé skladby"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "Nastavit službu"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "Obnovit službu"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "Přidat odběr"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "Odstranit odběr"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "Obnovit odběr"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "Poslední hledání: %1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "Nenahráno"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "Použít hledání k nalezení skladeb"
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(Stahuje se: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr "(Zařazeno stahování)"
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "Nový seznam skladeb..."
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "Chytrý seznam skladeb"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "Délka"
@@ -3407,6 +3444,10 @@ msgstr "Délka"
msgid "Disc"
msgstr "Disk"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr "Hodnocení"
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr "Zpět"
@@ -3429,85 +3470,81 @@ msgstr "Třídit podle"
msgid "Album Artist"
msgstr "Umělec alba"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(Přednost: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "Nahrává se..."
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "Záložky"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr "Dirble"
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Oblíbené"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "Skupina záložky"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Přidat proud do oblíbených"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "Nastavit proudy"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "Neznámý"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "\"%1\""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "\"%1\" (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "Nepodařilo se připojit k %1"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr "Nepodařilo se připojit k %1 - Prověřte, prosím, nastavení vaší proxy"
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "Nepodařilo se připojit k %1 - nesprávné heslo"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "Nepodařilo se poslat příkaz %1 - nepřipojeno"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr "Nepodařilo se nahrát. Ověřte, prosím, zda má mpd oprávnění ke čtení."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
@@ -3515,27 +3552,27 @@ msgstr ""
"Nepodařilo se nahrát. MPD může přehrát jen místní soubory, pokud je připojen "
"přes místní zásuvku."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "Nepodařilo se poslat příkaz. Odpojeno od %1"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "Nepodařilo se přejmenovat <b>%1</b> na <b>%2</b>"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "Nepodařilo se uložit <b>%1</b>!"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr "Nelze přidat části seznamu v souboru CUE do seznamu skladeb!"
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr "Nelze přidat seznam skladeb do jiného seznamu skladeb!"
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
"Nepodařilo se poslat '%1' %2. Ověřte, prosím, že %2 je zaregistrováno u MPD."
@@ -3544,15 +3581,11 @@ msgstr ""
msgid "Personal"
msgstr "Osobní"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "Neznámý"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "Různí umělci"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3566,12 +3599,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr "<b>%1</b> na <b>%2</b>"
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr "<b>%1</b> od <b>%2</b> na <b>%3</b>"
@@ -3604,19 +3637,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "Formát přenosu:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "Přenos"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3626,85 +3659,85 @@ msgstr "Nastavení pro Magnatune"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "Uživatelské jméno:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "Heslo:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "Členství:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "Stahování:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "Stahuje se"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "Obnovuje se zobrazení"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "Seskupují se skladby"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "Zpracovává se odpověď"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "Nepodařilo se zpracovat"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "Nepodařilo se stáhnout"
@@ -3720,131 +3753,135 @@ msgstr "Stáhnout díly záznamů"
msgid "Delete Downloaded Podcast Episodes"
msgstr "Smazat stažené díly záznamů"
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr "Zrušit stahování dílu zvukového záznamu"
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr "Označit díly zvukového záznamu jako nové"
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr "Označit díly zvukového záznamu jako poslechnuté"
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Nastavit..."
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "Hledání %1:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "Stáhnout znovu seznam hudby pro %1?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "Stáhnout znovu"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
-msgstr "Odhlásit odběr z <b>%1</b>?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr "Odhlásit odběr z '%1'?"
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr "Obnovit všechny soupisy zvukových záznamů?"
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr "Obnovit soupis dílů z <b>%1</b>?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr "Obnovit soupis dílů z '%1'?"
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr "Všechny vybrané zvukové záznamy již byly staženy!"
-
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr "Chcete stáhnout následující díl zvukového záznamu?"
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
-msgstr "Chcete stáhnout následující díly zvukového záznamu?"
-
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr "Chcete stáhnout vybrané díly zvukového záznamu?"
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
-msgstr "Všechny vybrané stažené díly záznamu již byly smazány!"
-
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:648
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
-msgstr "Chcete smazat stažený soubor následujícího dílu zvukového záznamu?"
+"Cancel podcast episode downloads (both current and any that are queued)?"
+msgstr "Zrušit stahování dílů zvukového záznamu (nynější a všechny zařazené)?"
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
-msgstr "Chcete smazat stažené soubory následujících dílů zvukového záznamu?"
-
-#: online/onlineservicespage.cpp:699
+#: online/onlineservicespage.cpp:685
msgid ""
"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr "Chcete smazat stažené soubory vybraných dílů zvukového záznamu?"
-#: online/podcastsearchdialog.cpp:253
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr "Chcete označit vybrané díly zvukového záznamu jako nové?"
+
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr "Chcete označit vybrané díly zvukového záznamu jako poslechnuté?"
+
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "Stránky:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "Podrobnosti záznamu"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr "Vybrat záznam pro zobrazení jeho podrobností"
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr "Zadat hledaný pojem..."
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "Nepodařilo se natáhnout zvukové záznamy z %1"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr "Nastaly potíže se zpracováním odpovědi z %1"
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr "Nepodařilo se stáhnout soupis adresáře"
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr "Nepodařilo se zpracovat soupis adresáře"
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "Adresa (URL)"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr "Zadejte adresu zvukového záznamu (URL)..."
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr "Nahrát"
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr "Zadejte adresu zvukového záznamu (URL) níže a stiskněte Nahrát"
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr "Neplatná adresa (URL)!"
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr "Nepodařilo se natáhnout zvukový záznam!"
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr "Nepodařilo se zpracovat zvukový záznam."
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
@@ -3852,59 +3889,59 @@ msgstr ""
"Cantata podporuje pouze záznamy zvuku! Zadaná adresa (URL) obsahuje jen "
"záznamy obrazu."
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr "Odebírat"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr "Zadat adresu (URL)"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr "Ruční adresa zvukového záznamu (URL)"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "Hledat %1"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr "Hledat zvukové záznamy na %1"
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr "Přidat odběr zvukového záznamu"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr "Procházet %1"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr "Procházet %1 zvukových záznamů"
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr "Odběr přidán"
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr "Již jste přihlášen k odběru tohoto záznamu!"
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "Záznamy"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr "Cantata podporuje pouze záznamy zvuku! %1 obsahuje jen záznamy obrazu."
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr "Nepodařilo se zpracovat %1"
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr "Nepodařilo se stáhnout %1"
@@ -3916,59 +3953,77 @@ msgstr "Podívat se po nových dílech:"
msgid "Download episodes to:"
msgstr "Stáhnout díly do:"
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
-msgstr "Stáhnout nové díly automaticky"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr "Stáhnout automaticky:"
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr "Nastavení záznamu"
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr "Ručně"
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr "Každých 15 minut"
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr "Každých 30 minut"
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr "Každou hodinu"
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr "Každé 2 hodiny"
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr "Každých 6 hodin"
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr "Každých 12 hodin"
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr "Každý den"
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr "Každý týden"
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr "Nestahovat díly automaticky"
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr "Poslední díl"
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr "Poslední %1 díly"
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr "Všechny díly"
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr "Obrázek pozadí"
@@ -3980,61 +4035,61 @@ msgstr "Obrázek umělce"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr "Vlastní obrázek:"
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr "Rozmazání:"
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10 px"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr "Neprůhlednost:"
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40 %"
@@ -4059,7 +4114,7 @@ msgstr "Nepřepínat automaticky"
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " ms"
@@ -4087,11 +4142,11 @@ msgstr "Vždy složit do jednoho pole"
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
-"Ukázat jen umělce, album nebo text písně, i když je dost místa na ukázání "
-"všech tří."
+"Ukázat jen umělce, album nebo skladbu, i když je dost místa na ukázání všech "
+"tří."
#. i18n: file: context/othersettings.ui:213
#. i18n: ectx: property (text), widget (QCheckBox, wikipediaIntroOnly)
@@ -4099,25 +4154,23 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "Ukázat jen základní text na Wikipedii"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Cantata neukazuje stránky na Wikipedii celé (s obrázky, "
-"odkazy atd.), místo toho ukazuje ořezanou verzi. Toto ořezání není vždy 100 "
-"% přesné. Z tohoto důvodu bude Cantata ve výchozím nastavení ukazovat jen "
-"základní úvod ke každému článku. Pokud bude vaší volbou zobrazení úplného "
-"článku, potom se mohou objevit chyby ve zpracování. Také budete muset "
-"odstranit všechny články, jež jsou nyní uloženy ve vyrovnávací paměti "
-"(pomocí stránky pro vyrovnávací paměť).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
+"Cantata ukáže pouze zkrácenou verzi stránek na Wikipedii (žádné obrázky, "
+"odkazy atd.). Toto ořezání obsahu není vždy stoprocentně přesné. To je "
+"důvodem toho, proč Cantata ve výchozím nastavení ukazuje pouze úvod. Pokud "
+"si zvolíte zobrazení celého článku, mohou se vyskytnout chyby ve zpracování. "
+"Také budete muset odstranit všechny články, které jsou nyní uloženy ve "
+"vyrovnávací paměti (pomocí stránky Vyrovnávací paměť)"
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4174,24 +4227,21 @@ msgid "To copy:"
msgstr "Ke kopírování:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Připojeno k serveru Mopidy (vyžadována ruční "
-"aktualizace).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
+msgstr "Připojeno k serveru Mopidy (vyžadována ruční aktualizace)."
#. i18n: file: devices/albumdetails.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
@@ -4201,13 +4251,13 @@ msgstr "Podrobnosti alba"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "Rok:"
@@ -4272,172 +4322,170 @@ msgid "Never skip on read error"
msgstr "Nikdy nepřeskakovat při chybě čtení"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-"<i><b>POZNÁMKA:</b> Tato nastavení jsou platná, a upravitelná, jen když je "
-"zařízení připojeno.</i>"
+"Tato nastavení jsou platná, a upravitelná, jen když je zařízení připojeno."
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "Název:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "Složka s hudbou:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "Kopírovat obaly alb jako:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "Největší velikost obalu:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "Výchozí svazek:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr "Ošetření pro Různí umělci"
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "Automaticky prohledat hudbu při připojení"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "Použít vyrovnávací paměť"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "Názvy souborů"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "Schéma názvu souboru:"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "VFAT bezpečný"
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "Použít pouze znaky ASCII"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "Nahradit mezery podtržítky"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "Nevšímat si The ve jménech umělců"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr "Připojit The ke jménům umělců"
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "Překódování"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4565,175 +4613,168 @@ msgid "The genre of the album."
msgstr "Žánr alba."
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Tato nastavení jsou upravitelná, jen když není zařízení "
-"připojeno.</i>"
+msgid "These settings are only editable when the device is not connected."
+msgstr "Tato nastavení jsou upravitelná, jen když není zařízení připojeno."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "Typ:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "Volby"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "Přípojka:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "Uživatel:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "Doména:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "Sdílení:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud zde zadáte heslo, bude uloženo <b>nezašifrované</"
-"b> v souboru s nastavením pro Cantatu. Aby Cantata vyzvala k zadání hesla "
-"před přístupem k sdílení, nastavte heslo na '-'</i>"
+"Pokud zde zadáte heslo, bude uloženo <b>nezašifrované</b> v souboru s "
+"nastavením pro Cantatu. Aby Cantata vyzvala k zadání hesla před přístupem k "
+"sdílení, nastavte heslo na '-'"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "Název služby:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "Složka:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "Další volby:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>POZNÁMKA:</b> Kvůli způsobu, jakým sshfs pracuje, bude k zadání hesla "
-"vyžadován vhodný program ssh-askpass (ksshaskpass, ssh-askpass-gnome, atd.)."
-"</i>"
+"Kvůli způsobu, jakým sshfs pracuje, bude k zadání hesla vyžadován vhodný "
+"program ssh-askpass (ksshaskpass, ssh-askpass-gnome, atd.)."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>POZNÁMKA:</b> Tento dialog se používá jen pro přidání vzdálených "
-"zařízení (např. přes Samba), nebo pro přístup k místně připojeným složkám. "
-"Pro běžné přehrávače záznamů, připojené přes USB, Cantata zobrazí zařízení "
-"automaticky, když je připojeno.</i>"
+"Tento dialog se používá jen pro přidání vzdálených zařízení (např. přes "
+"Samba), nebo pro přístup k místně připojeným složkám. Pro běžné přehrávače "
+"záznamů, připojené přes USB, Cantata zobrazí zařízení automaticky, když je "
+"připojeno."
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4753,39 +4794,51 @@ msgstr "Název pro dynamická pravidla"
msgid "Edit"
msgstr "Upravit"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr "Písně s hodnocením mezi:"
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr " - "
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "O pravidlech"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "Zahrnout písně odpovídající následujícímu:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "Vyloučit písně odpovídající následujícímu:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "Umělci podobní:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "Umělec alba"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "Od roku:"
@@ -4797,173 +4850,173 @@ msgstr "Od roku:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "Jakýkoli"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "Do roku:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "Přesná shoda"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Zadejte hodnoty pouze pro značky, které si přejete "
-"hledat. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
+msgstr "Zadejte hodnoty pouze pro značky, které si přejete hledat."
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>POZNÁMKA:</b> Když má žánr odpovídat různým žánrům, ukončete řetězec "
-"hvězdičkou. Např. 'rock*' odpovídá 'Hard Rock' a 'Rock and Roll'. </i>"
+"Když má žánr odpovídat různým žánrům, ukončete řetězec hvězdičkou. Např. "
+"'rock*' odpovídá 'Hard Rock' a 'Rock and Roll'."
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr "Přidat místní soubor"
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr "Uložit stažené obaly a obrázky umělců ve složce s hudbou"
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "Uložit stažená slova písně ve složce s hudbou"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "Uložit stažená pozadí ve složce s hudbou"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud se rozhodnete, že má Cantata ukládat obaly, "
-"texty písní nebo obrázky pozadí do složky s hudbou, a nemáte přístupová práva "
-"pro zápis do této složky, Cantata se vrátí k zapisování souborů do vaší "
-"osobní "
-"složky pro ukládání vyrovnávací paměti.</i>"
-
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
+msgid ""
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
+msgstr ""
+"Pokud se rozhodnete, že má Cantata ukládat obaly, texty písní nebo obrázky "
+"pozadí do složky s hudbou, a nemáte přístupová práva pro zápis do této "
+"složky, Cantata se vrátí k zapisování souborů do vaší osobní složky pro "
+"ukládání vyrovnávací paměti."
+
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
-"<i><b>POZNÁMKA:</b> Cantata může pozadí a obrázky umělců ukládat ve složkách "
-"s hudbou a jejich podsložkách, pouze pokud tato hierarchie jde jen do dvou "
-"úrovní dolů. (např. 'Artist/Album/Tracks')</i>"
+"Cantata může pozadí a obrázky umělců ukládat ve složkách s hudbou a jejich "
+"podsložkách, pouze pokud tato hierarchie jde jen do dvou úrovní dolů. (např. "
+"'Artist/Album/Tracks')"
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "První spuštění Cantaty"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "Vítejte v Cantatě"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
"<html><head/><body><p>Cantata je klient pro Music Player Daemon (MPD). MPD "
-"je program běžící na pozadí, který se používá k přehrávání hudby.</p><p>Více "
-"informací o MPD naleznete na stránkách MPD <a href=\"http://www.musicpd.org"
-"\"><span style=\" text-decoration: underline; color:#0000ff;\">http://www."
-"musicpd.org</span></a></p><p>Tento průvodce vás provede základními "
-"nastaveními, která jsou potřeba pro to, aby Cantata pracovala správně.</p></"
-"body></html>"
+"je program pružný, schopný, běžící na pozadí (server), k přehrávání hudby.</"
+"p><p>Více informací o MPD naleznete na stránkách MPD <a href=\"http://www."
+"musicpd.org\"><span style=\" text-decoration: underline; color:#0000ff;"
+"\">http://www.musicpd.org</span></a></p><p>Tento průvodce vás provede "
+"základními nastaveními, která jsou potřeba pro to, aby Cantata pracovala "
+"správně.</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr "<html><head/><body><p>Vítejte v Cantatě</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
"<html><head/><body><p>Cantata je klient pro Music Player Daemon (MPD). MPD "
-"je program běžící na pozadí, který se používá k přehrávání hudby. MPD lze "
-"spustit buď pro celý systém, anebo uživatelsky. Vyberte, prosím, jak chcete, "
-"aby byla Cantata na začátku připojena k (nebo spouštěna) MPD:</p></body></"
-"html>"
+"je program pružný, schopný, běžící na pozadí (server), k přehrávání hudby. "
+"MPD lze spustit buď pro celý systém, anebo uživatelsky. Vyberte, prosím, jak "
+"chcete, aby byla Cantata na začátku připojena k (nebo spouštěna) MPD:</p></"
+"body></html>"
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "Standardní nastavení pro více uživatelů/server"
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4979,13 +5032,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "Základní nastavení pro jednoho uživatele"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4995,7 +5048,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -5011,13 +5064,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "Podrobnosti spojení"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -5025,133 +5078,109 @@ msgstr ""
"Nastavení níže jsou základní nastavení požadovaná Cantatou. Zadejte, prosím, "
"náležité podrobnosti a použijte tlačítko Spojit pro vyzkoušení spojení."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "Hostitel (nebo místní zásuvka):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-"<i><b>POZNÁMKA:</b> Nastavení složky s hudbou je používáno k vyhledávání "
-"obalu alba, textu písně atd. Pokud se vaše instance MPD nachází na vzdáleném "
-"počítači, můžete tuto nastavit na adresu HTTP.</i>"
+"Nastavení složky s hudbou je používáno k vyhledávání obalu alba, textu písně "
+"atd. Pokud se vaše instance MPD nachází na vzdáleném počítači, můžete tuto "
+"nastavit na adresu HTTP."
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>POZNÁMKA:</b> Při použití místní zásuvky je potřeba nastavit úplnou "
-"absolutní cestu k zásuvce. (Číslo přípojky požadováno není.)</i>"
+"Při použití místní zásuvky je potřeba nastavit úplnou absolutní cestu k "
+"zásuvce. (Číslo přípojky požadováno není.)"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "Složka s hudbou"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "Prosím, vyberte složku, která obsahuje vaši hudební sbírku."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "Obaly, slova písně a proudy"
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
"relevant files within the music folder, or within your personal cache/config "
"folders.</p>"
msgstr ""
-"<p>Cantata stáhne chybějící obaly a texty písní z internetu.</"
-"p><p>U každého, prosím, potvrďte, zda chcete, aby Cantata soubory "
-"ukládala ve složce s hudbou, nebo ve vašich osobních "
-"složkách s vyrovnávací pamětí/pro ukládání nastavení.</p>"
-
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud zvolíte, aby Cantata ukládala obaly, nebo texty "
-"písní ve složce s hudbou, a nemáte k této složce oprávnění pro zápis, potom "
-"se Cantata vrátí k ukládání souborů do vaší osobní složky s vyrovnávací "
-"pamětí. Nicméně v případě proudů, pokud nemáte přístupová oprávnění pro "
-"zápis, budete pouze moci vidět (a přehrávat) proudy uložené ve složce s "
-"hudbou, a žádné proudy nebudete moci přidávat (nebo upravovat). Pokud "
-"zvolíte, aby se proudy do složky s hudbou neukládaly, budou uloženy do "
-"místní složky s nastavením a jen vy k nim budete moci přistupovat.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
-msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"<p>Cantata stáhne chybějící obaly a texty písní z internetu.</p><p>U "
+"každého, prosím, potvrďte, zda chcete, aby Cantata soubory ukládala ve "
+"složce s hudbou, nebo ve vašich osobních složkách s vyrovnávací pamětí/pro "
+"ukládání nastavení.</p>"
+
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-"<i><b>POZNÁMKA:</b> Cantata může pozadí a obrázky umělců ukládat ve složkách "
-"s hudbou a jejich podsložkách, pouze pokud tato hierarchie jde jen do dvou "
-"úrovní dolů (např. 'Artist/Album/Tracks'),</i>"
+"Cantata může pozadí a obrázky umělců ukládat ve složkách s hudbou a jejich "
+"podsložkách, pouze pokud tato hierarchie jde jen do dvou úrovní dolů; to "
+"jest: 'Artist/Album/Tracks'."
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-"<i><b>POZNÁMKA:</b> Složka s hudbou je nastavena na adresu HTTP a Cantata v "
-"současnosti nedokáže nahrávat soubory na vnější servery HTTP. Z tohoto "
-"důvodu by se nastavení výše měla ponechat zakázána.</i>"
+"Složka s hudbou je nastavena na adresu HTTP a Cantata v současnosti nedokáže "
+"nahrávat soubory na vnější servery HTTP. Z tohoto důvodu by se nastavení "
+"výše měla ponechat zakázána."
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "Dokončeno!"
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
@@ -5159,12 +5188,26 @@ msgid ""
msgstr ""
"Cantata je nyní nastavena!<br/><br/>Dialog pro nastavení Cantaty může být "
"použit k přizpůsobení vzhledu Cantaty, a rovněž pro přidání dalších serverů "
-"MPD, "
-"a tak dále."
+"MPD, a tak dále."
+
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+"Cantata skladby seskupí do alb pomocí značky AlbumUmělec, pokud je to tak "
+"nastaveno, jinak použije značku Umělec. Pokud máte alba s více umělci, "
+"<b>musíte</b> nastavit značku AlbumUmělec, aby při seskupování pracovala "
+"správně. Při této možnosti se doporučuje použít Různí umělci."
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5180,271 +5223,304 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "Postranní panel"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr "Pohledy"
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr "Použijte zaškrtávací okénka níže k nastavení seznamu činných pohledů."
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-"<i><b>POZNÁMKA:</b> Ve výchozím nastavení se řada skladeb určených k "
-"přehrání objevuje po straně vedle jiných pohledů. Pokud povolíte volbu výše, "
-"bude sloučena do postranního panelu k jiným pohledům.</i>"
+"Ve výchozím nastavení se řada skladeb určeních k přehrání objevuje po straně "
+"ostatních pohledů, a pohled na informace je přístupný po stisknutí jeho "
+"ikony v hlavním nástrojovém pruhu. Zaškrtnutí příslušné volby výše způsobí "
+"to, že pohled bude sloučen s postranním panelem v souladu s ostatními "
+"pohledy."
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Ve výchozím nastavení je pohled na informace (informace "
-"o nynější skladbě) zpřístupněn stisknutím ikony pro něj v hlavním "
-"nástrojovém pruhu. Pokud povolíte volbu výše, bude sloučena do postranního "
-"panelu k jiným pohledům.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Styl:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "Poloha:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "Ukázat jen ikony, žádný text"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "Použít jednobarevné ikony"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "Automatické skrývání"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "Obaly:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "Ukázat obrázky umělců"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr "Třídit alba podle roku"
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Při hledání obrázků umělců bude Cantata hledat buď "
-"artist.jpg, artist.png, 'Artist'.jpg, nebo 'Artist'.png\n"
-"ve složce s nynější skladbou, nebo v její rodičovské složce. Pokud není "
-"nalezen žádný obrázek, Cantata se pokusí o stažení jednoho.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "Ukázat obrázky umělců"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "Třídit alba:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr "Třídit:"
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "Na začátku alba složit"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "Jiné pohledy"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "Styl pohledu se složkami:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr "Složky:"
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "Styl pohledu s proudy:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr "Zdroje:"
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "Styl pohledu s internetem:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr "Internet:"
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "Styl pohledu se zařízeními:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Zařízení:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr "Styl pohledu s hledáním:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Hledání:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "Automaticky rozbalit nynější album"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "Projíždět k nynější skladbě"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr "Vyzvat před vyprázdněním"
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+"Samostatná činnost (a klávesová zkratka) pro hledání v řadě skladeb určených "
+"k přehrání"
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "Obal nynějšího alba"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr "Nástrojový pruh"
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr "Ukázat tlačítko pro zastavení"
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr "Ukázat obal nynější skladby"
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr "Ukázat hodnocení skladby"
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "Vnější"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "Ukázat vyskakovací zprávy při změnách skladeb"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr "Ukázat ikonu v oznamovací oblasti"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Při zavření zmenšit do oznamovací oblasti"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr "Při spuštění"
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr "Ukázat hlavní okno"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr "Skrýt hlavní okno"
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr "Obnovit předchozí stav"
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "Obecné"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
"Umístit alba obsahující jen jednu skladbu do Různí umělci/Jednotlivé skladby"
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr "Seskupit alba s jednotlivými skladbami"
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
"Použít pro seskupení alb značku Skladatel a ne Umělec nebo Umělec alba."
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr "Seskupit alba podle skladatele"
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5453,47 +5529,38 @@ msgid ""
"to 'Metal'."
msgstr ""
"<p>Při přidávání umělců nebo alb do řady skladeb k přehrání, nebo při "
-"upravování značek aj., "
-"používejte pouze písně, které projdou nynějším filtrem pro žánr nebo "
-"řetězec.</p><p>Např. "
-"Pokud máte album s 10 písněmi, ale jen 5 má žánr nastavený na "
-"'Metal', potom jen těchto 5 bude přidáno, pokud byl filtr pro zobrazení žánru "
-"nastaven "
-"na 'Metal'."
-
-#. i18n: file: gui/interfacesettings.ui:759
+"upravování značek aj., používejte pouze písně, které projdou nynějším "
+"filtrem pro žánr nebo řetězec.</p><p>Např. Pokud máte album s 10 písněmi, "
+"ale jen 5 má žánr nastavený na 'Metal', potom jen těchto 5 bude přidáno, "
+"pokud byl filtr pro zobrazení žánru nastaven na 'Metal'."
+
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr "Působit jen na písně, které projdou filtrováním"
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr "Natáhnout chybějící obaly z Last.fm"
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr "Uložit obaly se změněnou velikostí do vyrovnávací paměti"
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr "Ukázat položku Smazat v nabídkách souvisejících činností"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr "Vynutit zapnutí položek jedním klepnutím"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5501,173 +5568,180 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
"<p>Toto změní rozhraní Cantaty, jak je to popsáno dále:\n"
-"<ul><li>Tlačítka pro přehrávání a ovládání budou o 33 % širší</li><li>Pohledy "
-"budou odstrčitelné.</li><li>Pro táhnutí položek budete potřebovat najet do "
-"horního levého rohu</li><li>Posuvníky budou široké jen několik pixelů</li><li>"
-"Činnosti (např. "
-"Přidat do řady skladeb k přehrání) budou vždy viditelné (ne jen tehdy, když "
-"je položka pod "
-"myší)</li><li>Otočná tlačítka budou mít tlačítka + a - na straně "
-"textového pole.</li></ul></p>"
-
-#. i18n: file: gui/interfacesettings.ui:798
+"<ul><li>Tlačítka pro přehrávání a ovládání budou o 33 % širší</"
+"li><li>Pohledy budou odstrčitelné.</li><li>Pro táhnutí položek budete "
+"potřebovat najet do horního levého rohu</li><li>Posuvníky budou široké jen "
+"několik pixelů</li><li>Činnosti (např. Přidat do řady skladeb k přehrání) "
+"budou vždy viditelné (ne jen tehdy, když je položka pod myší)</li><li>Otočná "
+"tlačítka budou mít tlačítka + a - na straně textového pole.</li></ul></p>"
+
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr "Udělat rozhraní dotekově přátelštější"
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
-msgstr "Ukázat tlačítko pro zastavení v nástrojovém pruhu"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr "Ukázat nástrojové rady s informacemi k písni"
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
-msgstr "Ukázat obal nynější skladby v nástrojovém pruhu"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr "Podpora pro obrazovky retina (sítnice)"
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "Jazyk:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
msgstr ""
-"<i><b>POZNÁMKA:</b> Změna nastavení Vynutit zapnutí jedním klepnutím u "
-"položek vyžaduje opětovné spuštění Cantaty.</i>"
+"Změna nastavení Vynutit zapnutí jedním klepnutím u položek vyžaduje opětovné "
+"spuštění Cantaty."
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr "Změna nastavení jazyka vyžaduje opětovné spuštění Cantaty."
+
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-"<i><b>POZNÁMKA:</b> Změna nastavení jazyka vyžaduje opětovné spuštění "
-"Cantaty.</i>"
+"Změna nastavení rozhraní na dotykově přátelské vyžaduje opětovné spuštění "
+"Cantaty."
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-"<i><b>POZNÁMKA:</b> Změna nastavení rozhraní na dotykově přátelské vyžaduje "
-"opětovné spuštění "
-"Cantaty.</i>"
+"Povolení podpory pro obrazovky retina (retina = sítnice; obrazovky s vyšší "
+"hustotou pixelů, než jakou měly předchozí modely, firma Apple) povede k "
+"ostřejším ikonám na obrazovkách typu \"retina\", ale může vést k méně ostrým "
+"ikonám na obrazovkách, které typu \"retina\" nejsou. Změna tohoto nastavení "
+"vyžaduje opětovné spuštění Cantaty."
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[Dynamický]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr "Opustit režim zobrazení na celou obrazovku"
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "Zeslabení při zastavení:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Zastavit přehrávání při ukončení"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr "Bránit uspání při přehrávání"
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud stisknete a podržíte tlačítko pro zastavení, ukáže "
-"se nabídka, v níž si budete moci zvolit, zda se má přehrávání zastavit nyní, "
-"nebo po nynější skladbě.</i>"
+"Pokud stisknete a podržíte tlačítko pro zastavení, ukáže se nabídka, v níž "
+"si budete moci zvolit, zda se má přehrávání zastavit nyní, nebo po nynější "
+"skladbě. (Tlačítko pro zastavení lze povolit v části nastavení Rozhraní/"
+"Nástrojový pruh)"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "Výstup"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "Prolínání mezi skladbami"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr " s"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "Vyrovnání hlasitosti:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "O vyrovnání hlasitosti"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr "Použijte zaškrtávací okénka níže k ovládání činných výstupů."
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "Sbírka:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "Název souboru obalu:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5682,153 +5756,154 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "Adresa (URL) proudu HTTP:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>Poznámka:</b> Nastavení Složka s hudbou se používá pro hledání obrázků "
-"obalů (buď hodnota stanovená výše, nebo <code>cover.jpg / cover.png</code>). "
-"Pokud k této složce máte i oprávnění k zápisu (a do jejích podsložek), potom "
-"Cantata uloží všechny stažené obaly do příslušné složky alba.</i>"
+"Nastavení Složka s hudbou se používá pro hledání obrázků obalů (buď hodnota "
+"stanovená výše, nebo <code>cover.jpg / cover.png</code>). Pokud k této "
+"složce máte i oprávnění k zápisu (a do jejích podsložek), potom Cantata "
+"uloží všechny stažené obaly do příslušné složky alba."
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-"<i><b>POZNÁMKA:</b> Adresa (URL) proudu HTTP se používá jen tehdy, když máte "
-"nastaveno MPD na výstup do proudu HTTP, a přejete si, aby Cantata mohla "
-"tento proud přehrávat.</i>"
+"Adresa (URL) proudu HTTP se používá jen tehdy, když máte nastaveno MPD na "
+"výstup do proudu HTTP, a přejete si, aby Cantata mohla tento proud přehrávat."
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud změníte nastavení pro složku s hudbou, budete "
-"muset hudební databázi obnovovat ručně. To je možné provádět stisknutím "
-"tlačítka Obnovit databázi v pohledech s umělci nebo alby.</i>"
+"Pokud změníte nastavení pro složku s hudbou, budete muset hudební databázi "
+"obnovovat ručně. To je možné provádět stisknutím tlačítka Obnovit databázi v "
+"pohledech s umělci nebo alby."
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud není nastaveno žádné nastavení pro název souboru s "
-"obalem, pak bude Cantata používat výchozí <code>obal</code> </i>"
+"Pokud není nastaveno žádné nastavení pro název souboru s obalem, pak bude "
+"Cantata používat výchozí <code>obal</code>"
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "Síťové rozhraní:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> MPD obvykle přehrává pouze ty písně, jež jsou uloženy v "
-"jeho složkách. Cantata obsahuje malý HTTP server, který se dá použít na "
-"podávání jiných souborů MPD. Nicméně toto bude pracovat, jen když Cantata "
-"běží.<br/><br/>\n"
-"<b>POZNÁMKA:</b> Pokud zvolíte pro síťové rozhraní místní smyčku, potom "
-"<b>musí</b> být MPD rovněž na tomto počítači.</i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+"MPD obvykle přehrává pouze ty písně, jež jsou uloženy v jeho složkách. "
+"Cantata obsahuje malý HTTP server, který se dá použít na podávání jiných "
+"souborů MPD. Nicméně toto bude pracovat, jen když Cantata běží."
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
+"Pokud zvolíte pro síťové rozhraní místní smyčku, potom <b>musí</b> být MPD "
+"rovněž na tomto počítači."
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "Režim:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "Proxy HTTP"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "Proxy SOCKS"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr "Použijte zaškrtávací okénka níže k nastavení seznamu činných služeb."
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr "Odesílat informace o skladbách pomocí:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "Stav:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "Přihlášení"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr "Odesílat informace o skladbách"
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr "Ukázat tlačítko pro ukázání náklonnosti k písničce"
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5842,143 +5917,155 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "Prémiový účet"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "Typ proudu:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "Vypršení sezení:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-"<i><b>POZNÁMKA:</b> Tato nastavení se použijí na Digitally Imported, "
-"JazzRadio.com, RockRadio.com, and Sky.fm.</i>"
+"Tato nastavení se použijí na Digitally Imported, JazzRadio.com, RockRadio."
+"com, and Sky.fm."
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud zadáte podrobnosti účtu, stav 'DI' (Digitally "
-"Imported) se objeví pod seznamem proudů. To ukáže, zda jste přihlášen nebo "
-"nejste.</i>"
+"Pokud zadáte podrobnosti účtu, stav 'DI' (Digitally Imported) se objeví pod "
+"seznamem proudů. To ukáže, zda jste přihlášen nebo nejste."
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
"Použijte zaškrtávací okénka níže k nastavení seznamu činných poskytovatelů."
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr "Nastavit poskytovatele"
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr "Instalovat"
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
-msgstr ""
-"<i><b>POZNÁMKA:</b> Vestavěné skupiny jsou zobrazovány kurzívou, a tyto "
-"nelze odstranit.</i>"
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "Hledání:"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
+msgstr "Vestavěné skupiny jsou zobrazovány kurzívou, a tyto nelze odstranit."
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "Zkratka pro vybranou činnost"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "Výchozí:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "Vlastní:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "Umělec alba:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "Číslo skladby:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "Číslo disku:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr "Hodnocení:"
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr "<i>(Různé)</i>"
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
+msgid ""
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr "Více žánrů se musí oddělit středníkem (např. 'Rock;Hard Rock')"
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
-"<i><b>POZNÁMKA:</b> Více žánrů se musí oddělit středníkem (např. "
-"'Rock;Hard Rock')</i>"
+"Hodnocení jsou ukládána ve vnější databázi, <b>ne</b> v souboru s písní."
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "Původní název"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "Nový název"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr "Hodnocení budou ztracena, pokud bude soubor přejmenován."
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Pavel Fric"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "pavelfric at seznam.cz"
@@ -6029,7 +6116,7 @@ msgstr "Zrušit prohledávání značek?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "Přerušit"
@@ -6039,10 +6126,10 @@ msgstr "Zrušit čtení stávajících značek?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"Prohledat <b>všechny</b> skladby?<br><br><i>POZNÁMKA: Všechny skladby mají "
+"Prohledat <b>všechny</b> skladby?<br/><br/><i>Všechny skladby mají "
"existující značky pro vyrovnání hlasitost.</i>"
#: replaygain/rgdialog.cpp:263
@@ -6066,17 +6153,17 @@ msgstr "Prohledávají se skladby..."
msgid "Reading existing tags..."
msgstr "Čtou se stávající značky..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr "%1 (poškozené značky?)"
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "Nepodařilo se zaktualizovat značky následujících skladeb:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "Zařízení není připojeno."
@@ -6100,65 +6187,65 @@ msgstr "Původní: %1 dB"
msgid "Original: %1"
msgstr "Původní: %1"
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "Odstranit vybrané skladby ze seznamu?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "Odstranit skladby"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr "Neplatná služba"
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr "Neplatná metoda"
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr "Ověření se nezdařilo"
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr "Neplatný formát"
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr "Neplatné parametry"
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr "Zadán neplatný zdroj"
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr "Operace se nezdařila"
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr "Neplatný klíč sezení"
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr "Neplatný klíč API"
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr "Služba není dostupná"
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
"Služba Last.fm je nyní zaneprázdněna. Zkuste to, prosím, znovu za několik "
"minut"
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr "Překročeno omezení na počet hodnocení"
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr "%1 chyba: %2"
@@ -6170,35 +6257,33 @@ msgstr "%1: Nynější skladba byla zařazena mezi oblíbené"
msgid "%1: Love Current Track"
msgstr "%1: Zařadit nynější skladbu mezi oblíbené"
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr "%1 (přes MPD)"
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-"<i><b>POZNÁMKA:</b> Pokud použijete odesílání údajů o skladbách (scrobbler), "
-"což je označeno jako '(přes MPD)' (například %1), potom musíte mít tuto "
-"službu "
-"již spuštěnu a běžící. Cantata umí skladby Zařadit mezi oblíbené jen pomocí "
-"této služby, "
-"a neumí odesílání údajů o skladbách zakázat/povolit</i>"
+"Pokud použijete odesílání údajů o skladbách (scrobbler), což je označeno "
+"jako '(přes MPD)' (například %1), potom musíte mít tuto službu již spuštěnu "
+"a běžící. Cantata umí skladby Zařadit mezi oblíbené jen pomocí této služby, "
+"a neumí odesílání údajů o skladbách zakázat/povolit."
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr "Ověřuje se pravost..."
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr "Pravost ověřena"
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6228,27 +6313,27 @@ msgstr "AAC 128k"
msgid "Logout"
msgstr "Odhlásit se"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "Adresa (URL):"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "Pouze přidat do řady skladeb k přehrání, neukládat"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Přidat do řady skladeb k přehrání a uložit do oblíbených"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "Přidat proud"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "Upravit proud"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>CHYBA:</b> Neplatný protokol</i>"
@@ -6293,39 +6378,39 @@ msgid "Installing/updating %1"
msgstr "Instaluje se/Aktualizuje se %1"
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
-msgstr "Nepodařilo se nainstalovat <b>%1</b>"
+msgid "Failed to install '%1'"
+msgstr "Nepodařilo se nainstalovat '%1'"
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
-msgstr "Nepodařilo se stáhnout <b>%1</b>"
+msgid "Failed to download '%1'"
+msgstr "Nepodařilo se stáhnout '%1'"
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
-msgstr "Poslouchat živě"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr "Nainstalovat/Aktualizovat poskytovatele vybraných proudů?"
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
-msgstr "Nainstalovat následující?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr "Nainstalovat poskytovatele vybraných proudů?"
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
-msgstr "Aktualizovat následující?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr "Aktualizovat poskytovatele vybraných proudů?"
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr "Instalovat/Aktualizovat"
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr "Zrušit instalaci/aktualizaci?"
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr "Stahuje se %1"
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr "Aktualizovat všechny aktualizovatelné poskytovatele"
@@ -6341,192 +6426,198 @@ msgstr "Vyvést oblíbené proudy"
msgid "Add New Stream To Favorites"
msgstr "Přidat nový proud do oblíbených"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Digitally Imported"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|Proudy XML"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "Zavést proudy"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "Proudy XML (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|Proudy XML"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "Vyvést proudy"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr "Proudy XML (*.xml.gz)"
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "Nepodařilo se vytvořit <b>%1</b>!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr "Nepodařilo se vytvořit '%1'!"
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "Proud již existuje!<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr "Proud '%1' již existuje!"
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "Proud pojmenovaný <b>%1</b> již existuje!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr "Proud pojmenovaný '%1' již existuje!"
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "Záložka přidána"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "Již opatřeno záložkou"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Již v oblíbených"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "Nahrát znovu <b>%1</b> proudů?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr "Nahrát znovu '%1' proudů?"
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "Opravdu chcete odstranit záložku k <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr "Opravdu chcete odstranit záložku k '%1'?"
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "Opravdu chcete odstranit všech <b>%1</b> záložek?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr "Opravdu chcete odstranit všech '%1' záložek?"
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "Opravdu chcete odstranit %1 vybrané proudy?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "Opravdu chcete odstranit <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "Opravdu chcete odstranit '%1'?"
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "Hledání %1:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "Přidáno \"%1'' do oblíbených"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr "Ze souboru..."
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr "Stáhnout..."
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.streams|Proudy Cantata"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr "Nainstalovat proudy"
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "Proudy Cantata (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Skupina pojmenovaná <b>%1</b> již existuje!<br/>Přepsat?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Skupina pojmenovaná '%1' již existuje!\n"
+"\n"
+"Přepsat?"
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
-msgstr "Nepodařilo se otevřít soubor balíčku"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
+msgstr "Nepodařilo se otevřít soubor s balíčkem."
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr "Neplatný souborový formát!"
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr "Nepodařilo se vytvořit složku pro skupinu proudu!"
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr "Nepodařilo se uložit seznam proudu."
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr "Nepodařilo se odstranit složku s proudy!"
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "&OK"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "&Zrušit"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "&Ano"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "&Ne"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "Za&hodit"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "&Uložit"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "&Použít"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "&Zavřít"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "&Přepsat"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "Nastavit &znovu"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "&Pokračovat"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "&Smazat"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "&Zastavit"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "&Odstranit"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "&Předchozí"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "&Další"
@@ -6538,14 +6629,32 @@ msgstr "Heslo"
msgid "Please enter password:"
msgstr "Zadejte, prosím, heslo:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr "Zavřít"
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "Varování"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "Otázka"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr "&Okno"
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr "Zmenšit"
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr "Zvětšení"
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "Vybrat složku"
@@ -6554,58 +6663,95 @@ msgstr "Vybrat složku"
msgid "Select File"
msgstr "Vybrat soubor"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 KB"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MB"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 GB"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "Jeden den %2"
msgstr[1] "%1 dny %2"
msgstr[2] "%1 dnů %2"
-#: tags/tageditor.cpp:180
-msgid "Set 'Album Artist' from 'Artist'"
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Značky"
+
+#: tags/tageditor.cpp:202
+msgid "Set 'Album Artist' from 'Artist'"
msgstr "Nastavit Umělec alba z Umělec"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr "Načíst hodnocení ze souboru"
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr "Zapsat hodnocení do souboru"
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "Všechny skladby"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr "Použít zařazení pod Různí umělci na <b>všechny</b> skladby?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>Toto nastaví Umělce alba a Umělce na Různí umělci, a nastaví Název na "
+"\"Umělec skladby - Název skladby\"</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr "Zvrátit zařazení pod Různí umělci pro <b>všechny</b> skladby?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "Zvrátit zařazení pod Různí umělci"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>Tam, kde Umělec alba je stejný jako Umělec a Název je ve formátu \"Umělec "
+"skladby - Název skladby\", se Umělec vezme z Názvu a samotný název se "
+"nastaví na prostý Název. Např. <br/><br/>Pokud je Název \"Wibble - Wobble\", "
+"pak Umělec se nastaví na \"Wibble\" a Název na \"Wobble\"</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6613,74 +6759,165 @@ msgstr ""
"Nastavit Umělec alba z Umělec (pokud je Umělec alba prázdný) pro <b>všechny</"
"b> skladby?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr "Nastavit Umělec alba z Umělec (pokud je Umělec alba prázdný)?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "Umělec alba z Umělec"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba u "
-"<b>všech</b> skladeb?"
+"Psát velkým písmenem první písmeno textových polí (např. Název, Umělec, "
+"Umělec alba, Album atd.) u <b>všech</b> skladeb?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+"Psát velkým písmenem první písmeno textových polí (např. Název, Umělec, "
+"Umělec alba, Album atd.)?"
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "Upravit hodnotu čísla každé skladby o:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr "Načíst hodnocení u všech skladeb z hudebních souborů?"
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr "Načíst hodnocení z hudebního souboru?"
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr "Hodnocení"
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr "Načíst hodnocení"
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr "Načíst hodnocení"
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr "Načíst aktualizovaná hodnocení z následujících skladeb:"
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr "Ne všechna hodnocení písní byla načtena z MPD!"
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+"Hodnocení písní nejsou uložena v souborech s písněmi, ale uvnitř databáze "
+"MPD. Pro jejich uložení do skutečného souboru je Cantata nejprve musí načíst "
+"z MPD."
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr "Hodnocení písně nebylo načteno z MPD!"
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr "Načíst hodnocení u všech skladeb do hudebních souborů?"
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr "Zapsat hodnocení do hudebního souboru?"
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr "Zapsat hodnocení"
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr "Zapsat hodnocení"
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr "Nepodařilo se zapsat hodnocení následujících skladeb:"
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr "Nepodařilo se zapsat hodnocení do hudebního souboru!"
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "Všechny skladby [změněno]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [změněno]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr ""
"Chcete také přejmenovat své soubory s písněmi tak, aby se shodovaly se "
"značkami?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "Přejmenovat soubory"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "Zrušit přejmenování souborů?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "Zdrojový soubor neexistuje!<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr "Zdrojový soubor neexistuje!"
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "Cílový soubor již existuje!<hr/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr "Cílový soubor již existuje!"
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "Nepodařilo se vytvořit cílovou složku!<br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr "Nepodařilo se vytvořit cílovou složku!"
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "Nepodařilo se přejmenovat %1 na %2"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr "Nepodařilo se přejmenovat '%1' na '%2'"
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+"Hodnocení písní nejsou uložena v souborech s písněmi, ale uvnitř databáze "
+"MPD.\n"
+"\n"
+"Pokud soubor přejmenujete (nebo složku, v níž je), potom bude hodnocení "
+"spojené s písní ztraceno."
+
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(Proud)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\"><b>Skladatel:</b></td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr "<tr><td align=\"right\"><b>Účinkující:</b></td><td>%1</td></tr>"
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6698,7 +6935,7 @@ msgstr "Filtr na žánr"
msgid "All Genres"
msgstr "Všechny žánry"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "Jít zpět"
@@ -6706,15 +6943,19 @@ msgstr "Jít zpět"
msgid "Menu"
msgstr "Nabídka"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr "<i><b>POZNÁMKA:</b> %1</i>"
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "Odstranit z řady skladeb k přehrání"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "Hledání..."
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "Zavřít vyhledávací pole"
@@ -6728,22 +6969,27 @@ msgstr "<b>NENÍ</b>přihlášen k %1"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
-"<p>Nelze přistupovat k souborům s písněmi!<br/><br/>Prověřte, prosím, "
-"nastavení složky s hudbou Cantaty a nastavení adresáře s hudbou MPD "
-"(music_directory).</p>"
+"Nelze přistupovat k souborům s písněmi!\n"
+"\n"
+"Prověřte, prosím, nastavení složky s hudbou Cantaty a nastavení adresáře s "
+"hudbou MPD (music_directory)."
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-"<p>Nelze přistupovat k souborům s písněmi!<br/><br/>Prověřte, prosím, že "
-"zařízení je stále ještě připojeno.</p>"
+"Nelze přistupovat k souborům s písněmi!\n"
+"\n"
+"Prověřte, prosím, že zařízení je stále ještě připojeno."
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr "Roztáhnout sloupce tak, aby se vešly do okna"
@@ -6879,6 +7125,788 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr "%1 aktualizací dostupných"
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "Na cílovém zařízení nezbývá dost místa.\n"
+#~ "Vybrané písně zabírají %1, ale zbývá jen %2.\n"
+#~ "Písně bude třeba překódovat na menší velikost souborů, aby mohly být "
+#~ "úspěšně zkopírovány."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "V cíli nezbývá dost místa.\n"
+#~ "Vybrané písně zabírají %1, ale zbývá jen %2."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Nenastavil jste cílové zařízení.<br/>Pokračovat s výchozím nastavením?"
+#~ "</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Nenastavil jste zdrojové zařízení.<br/>Pokračovat s výchozím "
+#~ "nastavením?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>Jaký typ aktualizace chcete provést?<ul><li>Částečný - Jsou prohledány "
+#~ "pouze nové písně <i>(rychlé)</i></li><li>Úplný - Jsou prohledány všechny "
+#~ "písně <i>(pomalé)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Opravdu chcete odstranit vybrané písně?\n"
+#~ "Tento krok nelze vrátit zpět."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "Opravdu chcete zapomenout na <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "Opravdu chcete vysunout zvukové CD <b>%1 - %2</b>?"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "Opravdu chcete odpojit <b>%1</b>?"
+
+#~ msgid ""
+#~ "<p>The following variables will be replaced with their corresponding "
+#~ "meaning for each track name.</p>"
+#~ msgstr ""
+#~ "<p>Následující proměnné budou nahrazeny jejich odpovídajícím významem pro "
+#~ "každý název skladby.</p>"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "Vzdálené zařízení s názvem \"%1\" již existuje!\n"
+#~ "Vyberte, prosím, jiný název"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Opravdu chcete odstranit vybraná pravidla?\n"
+#~ "Tento krok nelze vrátit zpět."
+
+#~ msgid ""
+#~ "<p>Cantata will query your library using all of the rules listed. The "
+#~ "list of <i>Include</i> rules will be used to build a set of songs that "
+#~ "can be used. The list of <i>Exclude</i> rules will be used to build a set "
+#~ "of songs that cannot be used. If there are no <i>Include</i> rules, "
+#~ "Cantata will assume that all songs (bar those from <i>Exclude</i>) can be "
+#~ "used. <br/>e.g. to have Cantata look for 'Rock songs by Wibble OR songs "
+#~ "by Various Artists', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> To have Cantata look for 'Songs by Wibble but not from "
+#~ "album Abc', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After the set of "
+#~ "usable songs has been created, Cantata will randomly select songs to keep "
+#~ "the play queue filled with 10 entries.</p>"
+#~ msgstr ""
+#~ "<p>Cantata se dotáže vaší knihovny za použití všech v seznamu uvedených "
+#~ "pravidel. Seznam pravidel <i>Zahrnout</i> se použije na sestavení souboru "
+#~ "písní, které se mohou použít. Seznam pravidel <i>Vyloučit</i> se použije "
+#~ "na sestavení souboru písní, které se použít nemohou. Pokud nejsou žádná "
+#~ "pravidla <i>Zahrnout</i>, Cantata bude předpokládat, že se mohou použít "
+#~ "všechny písně (nepřipouštět ta z <i>Vyloučit</i>). <br/>např. aby Cantata "
+#~ "hledala 'Rock songs od Wibble NEBO písně od Různí umělci, budete "
+#~ "potřebovat následující: <ul><li>Zahrnout Umělec alba=Wibble Žánr=Rock</"
+#~ "li><li>Zahrnout Umělec alba=Různí umělci</li></ul>. Aby Cantata hledala "
+#~ "'Písně od Wibble, ale ne z alba Abc', budete potřebovat následující: "
+#~ "<ul><li>Zahrnout Umělec alba=Wibble</li><li>Vyloučit Album=Abc</li></"
+#~ "ul>Poté co byl vytvořen soubor písní vhodných k použití, Cantata náhodně "
+#~ "vybere písně tak, udržela řadu skladeb k přehrání naplněnou 10 záznamy.</"
+#~ "p>"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "Seznam pravidel pojmenovaný '%1' již existuje!\n"
+#~ "Přepsat?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>Smazat vše z následujícího?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "Nepodařilo se nastavit obal!\n"
+#~ "Nepodařilo se stáhnout do dočasného souboru!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "Nepodařilo se nastavit obal!\n"
+#~ "Nepodařilo se udělat kopii!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "Nepodařilo se nastavit obal!\n"
+#~ "Nepodařilo se zazálohovat originál!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "Nepodařilo se nastavit obal!\n"
+#~ "Nepodařilo se zkopírovat soubor do '%1'!"
+
+#~ msgid "Medium"
+#~ msgstr "Střední"
+
+#~ msgid "Extra Large"
+#~ msgstr "Hodně velký"
+
+#~ msgid "Icon/List"
+#~ msgstr "Ikona/Seznam"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "Upravit značky písně"
+
+#~ msgid ""
+#~ "Podcasts are currently being downloaded\n"
+#~ "\n"
+#~ "Quiting now will abort all downloads."
+#~ msgstr ""
+#~ "Zvukové záznamy se nyní stahují.\n"
+#~ "\n"
+#~ "Pokud bude stahování přerušeno nyní, budou zrušena všechna stahování."
+
+#~ msgid "Abort downloads and quit"
+#~ msgstr "Zrušit stahování a ukončit."
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "<b>%1</b> se používá na ukládání oblíbených proudů. Vyberte, prosím, jiný "
+#~ "název."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr ""
+#~ "Seznam skladeb pojmenovaný <b>%1</b> již existuje!<br/>Přidat do tohoto "
+#~ "seznamu skladeb?"
+
+#~ msgid "Can only edit tags of songs within MPD's music collection."
+#~ msgstr "Značky písní je možné upravovat jen v hudební sbírce MPD."
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>Vyrovnání hlasitosti (Replay Gain) je navržený standard zveřejněný v "
+#~ "roce 2001 k normalizaci vnímané hlasitosti počítačových zvukových "
+#~ "formátů, jako jsou MP3 a Ogg Vorbis. Pracuje na základě skladba/album, a "
+#~ "je nyní podporován rostoucím počtem přehrávačů.</p><p>Je možné použít "
+#~ "následující nastavení vyrovnání hlasitosti:<ul><li><i>Žádné</i> - Není "
+#~ "použito žádné vyrovnání hlasitosti.</li><li><i>Skladba</i> - Hlasitost je "
+#~ "upravena za použití značek pro vyrovnání hlasitosti u skladby.</"
+#~ "li><li><i>Album</i> - Hlasitost je upravena za použití značek pro "
+#~ "vyrovnání hlasitosti u alba.</li><li><i>Automaticky</i> - Hlasitost je "
+#~ "upravena za použití značek pro vyrovnání hlasitosti u skladby, v případě "
+#~ "že je zapnuto náhodné přehrávání, jinak se použijí značky u alba.</li></"
+#~ "ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Opravdu chcete odstranit vybrané seznamy skladeb?\n"
+#~ "Tento krok nelze vrátit zpět."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Seznam skladeb pojmenovaný <b>%1</b> již existuje!<br/>Přepsat?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "Který typ sbírky chcete připojit?<br/><ul><li>Obvyklý - hudební sbírku "
+#~ "může být sdílena, je na jiném stroji, nebo je již nastavena</"
+#~ "li><li>Základní - hudební sbírka není sdílena s ostatními, a Cantata "
+#~ "nastaví a bude řídit instanci MPD</li></ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "Smazat <b>%1</b>?"
+
+#~ msgid "Multi-Media Keys"
+#~ msgstr "Multimediální klávesy"
+
+#~ msgid "Do not use media keys to control Cantata"
+#~ msgstr "Nepoužívat multimediální klávesy pro ovládání Cantaty"
+
+#~ msgid "Use media keys to control Cantata"
+#~ msgstr "Používat multimediální klávesy pro ovládání Cantaty"
+
+#~ msgid ""
+#~ "Use media keys, as configured in desktop settings, to control Cantata"
+#~ msgstr ""
+#~ "Používat multimediální klávesy, jak jsou nastaveny v nastavení pracovního "
+#~ "prostředí, pro ovládání Cantaty"
+
+#~ msgid ""
+#~ "Use media keys, as configured in GNOME/Unity settings, to control Cantata"
+#~ msgstr ""
+#~ "Používat multimediální klávesy, jak jsou nastaveny v nastavení GNOME/"
+#~ "Unity, pro ovládání Cantaty"
+
+#~ msgid "Add Albums In Random Order"
+#~ msgstr "Přidat alba v náhodném pořadí"
+
+#~ msgid "Edit Tags"
+#~ msgstr "Upravit značky"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(Přednost: %1)</b>"
+
+#~ msgid "Unsubscribe from <b>%1</b>?"
+#~ msgstr "Odhlásit odběr z <b>%1</b>?"
+
+#~ msgid "Refresh episode listing from <b>%1</b>?"
+#~ msgstr "Obnovit soupis dílů z <b>%1</b>?"
+
+#~ msgid "All selected podcasts have already been downloaded!"
+#~ msgstr "Všechny vybrané zvukové záznamy již byly staženy!"
+
+#~ msgid "Do you wish to download the following podcast episode?"
+#~ msgstr "Chcete stáhnout následující díl zvukového záznamu?"
+
+#~ msgid "Do you wish to download the following podcast episodes?"
+#~ msgstr "Chcete stáhnout následující díly zvukového záznamu?"
+
+#~ msgid "All selected downloaded podcast episodes have already been deleted!"
+#~ msgstr "Všechny vybrané stažené díly záznamu již byly smazány!"
+
+#~ msgid ""
+#~ "Do you wish to delete the downloaded file of the following podcast "
+#~ "episode?"
+#~ msgstr "Chcete smazat stažený soubor následujícího dílu zvukového záznamu?"
+
+#~ msgid ""
+#~ "Do you wish to the delete downloaded files of the following podcast "
+#~ "episodes?"
+#~ msgstr "Chcete smazat stažené soubory následujících dílů zvukového záznamu?"
+
+#~ msgid "Automatically download new episodes"
+#~ msgstr "Stáhnout nové díly automaticky"
+
+#~ msgid ""
+#~ "Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
+#~ "all three."
+#~ msgstr ""
+#~ "Ukázat jen umělce, album nebo text písně, i když je dost místa na ukázání "
+#~ "všech tří."
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Cantata neukazuje stránky na Wikipedii celé (s "
+#~ "obrázky, odkazy atd.), místo toho ukazuje ořezanou verzi. Toto ořezání "
+#~ "není vždy 100 % přesné. Z tohoto důvodu bude Cantata ve výchozím "
+#~ "nastavení ukazovat jen základní úvod ke každému článku. Pokud bude vaší "
+#~ "volbou zobrazení úplného článku, potom se mohou objevit chyby ve "
+#~ "zpracování. Také budete muset odstranit všechny články, jež jsou nyní "
+#~ "uloženy ve vyrovnávací paměti (pomocí stránky pro vyrovnávací paměť).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Připojeno k serveru Mopidy (vyžadována ruční "
+#~ "aktualizace).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Tato nastavení jsou platná, a upravitelná, jen když "
+#~ "je zařízení připojeno.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "Nevšímat si The ve jménech umělců"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Tato nastavení jsou upravitelná, jen když není "
+#~ "zařízení připojeno.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud zde zadáte heslo, bude uloženo "
+#~ "<b>nezašifrované</b> v souboru s nastavením pro Cantatu. Aby Cantata "
+#~ "vyzvala k zadání hesla před přístupem k sdílení, nastavte heslo na '-'</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Kvůli způsobu, jakým sshfs pracuje, bude k zadání "
+#~ "hesla vyžadován vhodný program ssh-askpass (ksshaskpass, ssh-askpass-"
+#~ "gnome, atd.).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Tento dialog se používá jen pro přidání vzdálených "
+#~ "zařízení (např. přes Samba), nebo pro přístup k místně připojeným "
+#~ "složkám. Pro běžné přehrávače záznamů, připojené přes USB, Cantata "
+#~ "zobrazí zařízení automaticky, když je připojeno.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Zadejte hodnoty pouze pro značky, které si přejete "
+#~ "hledat. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Když má žánr odpovídat různým žánrům, ukončete "
+#~ "řetězec hvězdičkou. Např. 'rock*' odpovídá 'Hard Rock' a 'Rock and Roll'. "
+#~ "</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
+#~ "backdrops, within the music folder, and you do not have write access to "
+#~ "this folder, then Cantata will revert to saving the files in your "
+#~ "personal cache folder.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud se rozhodnete, že má Cantata ukládat obaly, "
+#~ "texty písní nebo obrázky pozadí do složky s hudbou, a nemáte přístupová "
+#~ "práva pro zápis do této složky, Cantata se vrátí k zapisování souborů do "
+#~ "vaší osobní složky pro ukládání vyrovnávací paměti.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
+#~ "Tracks')</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Cantata může pozadí a obrázky umělců ukládat ve "
+#~ "složkách s hudbou a jejich podsložkách, pouze pokud tato hierarchie jde "
+#~ "jen do dvou úrovní dolů. (např. 'Artist/Album/Tracks')</i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata je klient pro Music Player Daemon (MPD). "
+#~ "MPD je program běžící na pozadí, který se používá k přehrávání hudby.</"
+#~ "p><p>Více informací o MPD naleznete na stránkách MPD <a href=\"http://www."
+#~ "musicpd.org\"><span style=\" text-decoration: underline; color:#0000ff;"
+#~ "\">http://www.musicpd.org</span></a></p><p>Tento průvodce vás provede "
+#~ "základními nastaveními, která jsou potřeba pro to, aby Cantata pracovala "
+#~ "správně.</p></body></html>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music. MPD may be started either system-wide, or on a per-"
+#~ "user basis. Please select how you would like to have Cantata initially "
+#~ "connect to (or startup) MPD:</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata je klient pro Music Player Daemon (MPD). "
+#~ "MPD je program běžící na pozadí, který se používá k přehrávání hudby. MPD "
+#~ "lze spustit buď pro celý systém, anebo uživatelsky. Vyberte, prosím, jak "
+#~ "chcete, aby byla Cantata na začátku připojena k (nebo spouštěna) MPD:</"
+#~ "p></body></html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
+#~ "lyrics, etc. If you're MPD instance is on a remote host, you may set this "
+#~ "to a HTTP URL.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Nastavení složky s hudbou je používáno k vyhledávání "
+#~ "obalu alba, textu písně atd. Pokud se vaše instance MPD nachází na "
+#~ "vzdáleném počítači, můžete tuto nastavit na adresu HTTP.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Při použití místní zásuvky je potřeba nastavit úplnou "
+#~ "absolutní cestu k zásuvce. (Číslo přípojky požadováno není.)</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, "
+#~ "within the music folder, and you do not have write access to this folder, "
+#~ "then Cantata will revert to saving the files in your personal cache "
+#~ "folder. However, for streams, if you do not have write access, then you "
+#~ "will only be able to view (and play) the streams stored in the music "
+#~ "folder, and not add (or edit) any streams. If you elect not to store "
+#~ "streams within the music folder, then these will be saved in your local "
+#~ "config folder - and will only be accessible to yourself.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud zvolíte, aby Cantata ukládala obaly, nebo texty "
+#~ "písní ve složce s hudbou, a nemáte k této složce oprávnění pro zápis, "
+#~ "potom se Cantata vrátí k ukládání souborů do vaší osobní složky s "
+#~ "vyrovnávací pamětí. Nicméně v případě proudů, pokud nemáte přístupová "
+#~ "oprávnění pro zápis, budete pouze moci vidět (a přehrávat) proudy uložené "
+#~ "ve složce s hudbou, a žádné proudy nebudete moci přidávat (nebo "
+#~ "upravovat). Pokud zvolíte, aby se proudy do složky s hudbou neukládaly, "
+#~ "budou uloženy do místní složky s nastavením a jen vy k nim budete moci "
+#~ "přistupovat.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/"
+#~ "Tracks'.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Cantata může pozadí a obrázky umělců ukládat ve "
+#~ "složkách s hudbou a jejich podsložkách, pouze pokud tato hierarchie jde "
+#~ "jen do dvou úrovní dolů (např. 'Artist/Album/Tracks'),</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
+#~ "currently cannot upload files to external HTTP servers. Therefore, the "
+#~ "above settings should be left un-checked.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Složka s hudbou je nastavena na adresu HTTP a Cantata "
+#~ "v současnosti nedokáže nahrávat soubory na vnější servery HTTP. Z tohoto "
+#~ "důvodu by se nastavení výše měla ponechat zakázána.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the play queue appears to the side of the "
+#~ "other views. If you enable the option above, then it will be merged into "
+#~ "the sidebar as per other views.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Ve výchozím nastavení se řada skladeb určených k "
+#~ "přehrání objevuje po straně vedle jiných pohledů. Pokud povolíte volbu "
+#~ "výše, bude sloučena do postranního panelu k jiným pohledům.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
+#~ "accessible by pressing its icon in the main toolbar. If you enable the "
+#~ "option above, then it will be merged into the sidebar as per other views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Ve výchozím nastavení je pohled na informace "
+#~ "(informace o nynější skladbě) zpřístupněn stisknutím ikony pro něj v "
+#~ "hlavním nástrojovém pruhu. Pokud povolíte volbu výše, bude sloučena do "
+#~ "postranního panelu k jiným pohledům.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "Obaly:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Při hledání obrázků umělců bude Cantata hledat buď "
+#~ "artist.jpg, artist.png, 'Artist'.jpg, nebo 'Artist'.png\n"
+#~ "ve složce s nynější skladbou, nebo v její rodičovské složce. Pokud není "
+#~ "nalezen žádný obrázek, Cantata se pokusí o stažení jednoho.</i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "Třídit alba:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "Styl pohledu se složkami:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "Styl pohledu s proudy:"
+
+#~ msgid "Online view style:"
+#~ msgstr "Styl pohledu s internetem:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "Styl pohledu se zařízeními:"
+
+#~ msgid "Search view style:"
+#~ msgstr "Styl pohledu s hledáním:"
+
+#~ msgid "Cache scaled covers"
+#~ msgstr "Uložit obaly se změněnou velikostí do vyrovnávací paměti"
+
+#~ msgid ""
+#~ "<p>This will change Cantata's interface as detailed:\n"
+#~ "<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views "
+#~ "will be 'flickable'</li><li>To drag items, you will need to 'touch' the "
+#~ "top-left corner</li><li>Scrollbars will only be a few pixels wide</"
+#~ "li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not "
+#~ "just when item is under mouse)</li><li>Spin buttons with have + and - "
+#~ "buttons at the side of the text field</li></ul></p>"
+#~ msgstr ""
+#~ "<p>Toto změní rozhraní Cantaty, jak je to popsáno dále:\n"
+#~ "<ul><li>Tlačítka pro přehrávání a ovládání budou o 33 % širší</"
+#~ "li><li>Pohledy budou odstrčitelné.</li><li>Pro táhnutí položek budete "
+#~ "potřebovat najet do horního levého rohu</li><li>Posuvníky budou široké "
+#~ "jen několik pixelů</li><li>Činnosti (např. Přidat do řady skladeb k "
+#~ "přehrání) budou vždy viditelné (ne jen tehdy, když je položka pod myší)</"
+#~ "li><li>Otočná tlačítka budou mít tlačítka + a - na straně textového pole."
+#~ "</li></ul></p>"
+
+#~ msgid "Show stop button in toolbar"
+#~ msgstr "Ukázat tlačítko pro zastavení v nástrojovém pruhu"
+
+#~ msgid "Show cover of current track in toolbar"
+#~ msgstr "Ukázat obal nynější skladby v nástrojovém pruhu"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Změna nastavení Vynutit zapnutí jedním klepnutím u "
+#~ "položek vyžaduje opětovné spuštění Cantaty.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Změna nastavení jazyka vyžaduje opětovné spuštění "
+#~ "Cantaty.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
+#~ "start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Změna nastavení rozhraní na dotykově přátelské "
+#~ "vyžaduje opětovné spuštění Cantaty.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud stisknete a podržíte tlačítko pro zastavení, "
+#~ "ukáže se nabídka, v níž si budete moci zvolit, zda se má přehrávání "
+#~ "zastavit nyní, nebo po nynější skladbě.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>Poznámka:</b> Nastavení Složka s hudbou se používá pro hledání "
+#~ "obrázků obalů (buď hodnota stanovená výše, nebo <code>cover.jpg / cover."
+#~ "png</code>). Pokud k této složce máte i oprávnění k zápisu (a do jejích "
+#~ "podsložek), potom Cantata uloží všechny stažené obaly do příslušné složky "
+#~ "alba.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD "
+#~ "configured to output to a HTTP stream, and you wish Cantata to be able to "
+#~ "play that stream.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Adresa (URL) proudu HTTP se používá jen tehdy, když "
+#~ "máte nastaveno MPD na výstup do proudu HTTP, a přejete si, aby Cantata "
+#~ "mohla tento proud přehrávat.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud změníte nastavení pro složku s hudbou, budete "
+#~ "muset hudební databázi obnovovat ručně. To je možné provádět stisknutím "
+#~ "tlačítka Obnovit databázi v pohledech s umělci nebo alby.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud není nastaveno žádné nastavení pro název "
+#~ "souboru s obalem, pak bude Cantata používat výchozí <code>obal</code> </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> MPD obvykle přehrává pouze ty písně, jež jsou uloženy "
+#~ "v jeho složkách. Cantata obsahuje malý HTTP server, který se dá použít na "
+#~ "podávání jiných souborů MPD. Nicméně toto bude pracovat, jen když Cantata "
+#~ "běží.<br/><br/>\n"
+#~ "<b>POZNÁMKA:</b> Pokud zvolíte pro síťové rozhraní místní smyčku, potom "
+#~ "<b>musí</b> být MPD rovněž na tomto počítači.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio."
+#~ "com, RockRadio.com, and Sky.fm</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Tato nastavení se použijí na Digitally Imported, "
+#~ "JazzRadio.com, RockRadio.com, and Sky.fm.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter account details, then a 'DI' status item "
+#~ "will appear under the list of streams. This will indicate if you are "
+#~ "logged in or not</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud zadáte podrobnosti účtu, stav 'DI' (Digitally "
+#~ "Imported) se objeví pod seznamem proudů. To ukáže, zda jste přihlášen "
+#~ "nebo nejste.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot "
+#~ "be removed.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Vestavěné skupiny jsou zobrazovány kurzívou, a tyto "
+#~ "nelze odstranit.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
+#~ "'Rock;Hard Rock')</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Více žánrů se musí oddělit středníkem (např. 'Rock;"
+#~ "Hard Rock')</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "Prohledat <b>všechny</b> skladby?<br><br><i>POZNÁMKA: Všechny skladby "
+#~ "mají existující značky pro vyrovnání hlasitost.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via "
+#~ "MPD)' (such as %1), then you will need to have this already started and "
+#~ "running. Cantata can only 'Love' tracks via this, and cannot enable/"
+#~ "disable scrobbling.</i>"
+#~ msgstr ""
+#~ "<i><b>POZNÁMKA:</b> Pokud použijete odesílání údajů o skladbách "
+#~ "(scrobbler), což je označeno jako '(přes MPD)' (například %1), potom "
+#~ "musíte mít tuto službu již spuštěnu a běžící. Cantata umí skladby Zařadit "
+#~ "mezi oblíbené jen pomocí této služby, a neumí odesílání údajů o skladbách "
+#~ "zakázat/povolit</i>"
+
+#~ msgid "Failed to install <b>%1</b>"
+#~ msgstr "Nepodařilo se nainstalovat <b>%1</b>"
+
+#~ msgid "Failed to download <b>%1</b>"
+#~ msgstr "Nepodařilo se stáhnout <b>%1</b>"
+
+#~ msgid "ListenLive"
+#~ msgstr "Poslouchat živě"
+
+#~ msgid "Install the following?"
+#~ msgstr "Nainstalovat následující?"
+
+#~ msgid "Update the following?"
+#~ msgstr "Aktualizovat následující?"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "Nepodařilo se vytvořit <b>%1</b>!"
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "Proud již existuje!<br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "Proud pojmenovaný <b>%1</b> již existuje!"
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "Nahrát znovu <b>%1</b> proudů?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "Opravdu chcete odstranit záložku k <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "Opravdu chcete odstranit všech <b>%1</b> záložek?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "Opravdu chcete odstranit <b>%1</b>?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Skupina pojmenovaná <b>%1</b> již existuje!<br/>Přepsat?"
+
+#~ msgid "Failed top open package file"
+#~ msgstr "Nepodařilo se otevřít soubor balíčku"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba u "
+#~ "<b>všech</b> skladeb?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "Zdrojový soubor neexistuje!<br/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "Cílový soubor již existuje!<hr/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "Nepodařilo se vytvořit cílovou složku!<br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "Nepodařilo se přejmenovat %1 na %2"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music "
+#~ "folder\" setting, and MPD's \"music_directory\" setting.</p>"
+#~ msgstr ""
+#~ "<p>Nelze přistupovat k souborům s písněmi!<br/><br/>Prověřte, prosím, "
+#~ "nastavení složky s hudbou Cantaty a nastavení adresáře s hudbou MPD "
+#~ "(music_directory).</p>"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check that the device is "
+#~ "still attached.</p>"
+#~ msgstr ""
+#~ "<p>Nelze přistupovat k souborům s písněmi!<br/><br/>Prověřte, prosím, že "
+#~ "zařízení je stále ještě připojeno.</p>"
+
#~ msgid "TextLabel"
#~ msgstr "TextovýŠtítek"
@@ -7381,9 +8409,6 @@ msgstr "%1 aktualizací dostupných"
#~ msgid " seconds"
#~ msgstr " sekund"
-#~ msgid "Devices:"
-#~ msgstr "Zařízení:"
-
#~ msgid "Current URL:"
#~ msgstr "Nynější adresa (URL):"
@@ -7493,9 +8518,6 @@ msgstr "%1 aktualizací dostupných"
#~ msgid "Disc %1"
#~ msgstr "Disk %1"
-#~ msgid "Are you sure you wish to forget '%1'?"
-#~ msgstr "Opravdu chcete zapomenout na '%1'?"
-
#~ msgid "Biography"
#~ msgstr "Životopis"
@@ -7588,9 +8610,6 @@ msgstr "%1 aktualizací dostupných"
#~ msgid "Online Music"
#~ msgstr "Hudba z internetu"
-#~ msgid "Are you sure you wish to remove '%1'?"
-#~ msgstr "Opravdu chcete odstranit '%1'?"
-
#~ msgid "Are you sure you wish to unload '%1'?"
#~ msgstr "Opravdu se chcete zbavit '%1'?"
diff --git a/po/de.po b/po/de.po
index 5405b93..dfa83cc 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: 2014-07-09 13:26+0200\n"
"Last-Translator: Markus Slopianka <kamikazow at web.de>\n"
"Language-Team: German <kde-i18n-de at kde.org>\n"
@@ -23,10 +23,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "Aktualisiere Albuminformationen"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "Album"
@@ -37,32 +37,33 @@ msgstr "Album"
msgid "Tracks"
msgstr "Stücke"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "Aktualisiere Künstlerinformationen"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "Künstler"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "Alben"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Weblinks"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "Ähnliche Künstler"
@@ -70,28 +71,28 @@ msgstr "Ähnliche Künstler"
msgid "Lyrics Providers"
msgstr "Textanbieter"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "Wikipedia"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "Andere"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "Abstand zurücksetzen"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "&Künstler"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "Al&bum"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr ""
@@ -121,16 +122,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "Titel:"
@@ -138,17 +139,17 @@ msgstr "Titel:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "Künstler:"
@@ -164,38 +165,39 @@ msgstr "Bitte die Webseiten zur Liedtextsuche wählen."
msgid "Song Information"
msgstr ""
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "Bilder (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr "10px"
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr "%1px"
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "Texte"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "Information"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "Tags"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr ""
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -217,14 +219,14 @@ msgstr "Lösche Liedtextdatei?"
msgid "Refresh Track Information"
msgstr ""
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "Abbrechen"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "Stück"
@@ -237,7 +239,7 @@ msgid ""
msgstr ""
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "Erneut Laden"
@@ -269,39 +271,39 @@ msgstr "Löschen der Liedtextdatei?"
msgid "Delete File"
msgstr "Lösche Datei"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr ""
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr ""
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr ""
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr ""
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr ""
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr ""
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr ""
@@ -313,102 +315,119 @@ msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "Genre"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "Datum"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr ""
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr ""
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr ""
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr ""
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr ""
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr ""
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr ""
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr ""
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr ""
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr ""
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "Encoder"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr ""
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr ""
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "Bitrate"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr ""
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr ""
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr ""
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr ""
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr ""
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr ""
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr ""
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "Jahr"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr ""
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "Empfange Texte über %1"
@@ -458,16 +477,16 @@ msgstr "Cantata spielt ein Stück ab"
msgid "Songs To Be Copied"
msgstr "Stücke zum kopieren"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>UNGÜLTIG</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(Wenn unterschiedlich)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -476,135 +495,130 @@ msgid ""
"refresh Mopidy's database, and restart Cantata for any changes to be active."
msgstr ""
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "Künstler:%1, Alben:%2, Stücke:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 frei"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "Lokale Musikbibliothek"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "Audio CD"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-"Es ist nicht ausreichend Speicherplatz auf dem Ziel vorhanden.\n"
-"Die gewählten Stücke benötigen %1, aber es sind nur noch %2 verfügbar.\n"
-"Die Stücke müssen in ein kleineres Dateiformat umgewandelt werden um "
-"erfolgreich kopiert zu werden."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"Es ist nicht ausreichend Speicherplatz auf dem Ziel vorhanden.\n"
-"Die gewählten Stücke benötigen %1, aber es sind nur noch %2 verfügbar."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "Kopiere Stücke"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "Lösche Stücke"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Sie haben das Zielgerät nicht konfiguriert.<br/>Mit den "
-"Standardeinstellungen fortfahren?</p>"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "Nicht konfiguriert"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "Benutze Voreinstellung"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Sie haben das Quellgerät nicht konfiguriert.<br/>Mit den "
-"Standardeinstellungen fortfahren?</p>"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "Wollen Sie wirklich stoppen?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "Stopp"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "Gerät wurde entfernt."
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "Gerät ist nicht verbunden."
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "Gerät aktuell beschäftig?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "Gerät wurde geändert?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "Bereinige unbenutzte Ordner"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "Errechne ReplayGain der Stücke?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr "ReplayGain"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "Berechne"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "Der Dateiname existiert bereits."
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "Lied existiert bereits."
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "Titel existiert nicht."
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
@@ -612,31 +626,31 @@ msgstr ""
"Fehler beim Erstellen des Ordners auf Zielgerät.<br/>Bitte überprüfen Sie "
"auf vorhandene Berechtigung."
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "Quelldatei nicht mehr verfügbar?"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "Fehler beim Kopieren."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "Fehler beim Löschen."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "Nicht zum Gerät verbunden."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "Ausgewählter Codec ist nicht vorhanden."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "Umwandeln fehlgeschlagen."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
@@ -644,172 +658,164 @@ msgstr ""
"Fehler beim Erstellen einer temporären Datei.<br/>(Benötigt zum Umwandeln "
"für MTP-Geräte.)"
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "Fehler beim Lesen der Quelldatei."
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "Fehler beim Erstellen der Zieldatei."
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "Kein Platz auf Gerät mehr verfügbar."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "Fehler beim Aktualisieren der Metadaten."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "Fehler beim Herunterladen"
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "Fehler beim Verriegeln des Gerätes."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "Lokale Bibliothekseinstellungen"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "Fehler"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "Überspringen"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "Automatisches Überspringen"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "wiederholen"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "Album:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "Stück:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "Quelldatei:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "Zieldatei:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "Datei:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "Berechne..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (Erwartet)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "Verbleibende Zeit:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "Speichere Cache"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "Hinzufügen der „Verschiedene Künstler Problembehebung"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "Zurücksetzen der „Verschiedene Künstler“ Problembehebung"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Großschrift"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "Anpassen der Stücknummern"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "Werkzeuge"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "Hinzufügen der „Verschiedene Künstler“ Problembehebung?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>Dies wird den 'Albumkünstler' und 'Künstler' zu „Verschiedene Künstler“ "
-"gesetzt, und der 'Titel' zu \"TrackArtist - TrackTitle\"</i>"
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "Zurücksetzen der „Verschiedene Künstler“ Problembehebung"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr ""
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>Wenn der 'Albumkünstler' der gleiche ist wie 'Künstler' und der 'Titel' "
-"ist – im Format \"TrackArtist - TrackTitle\" –, wird der 'Künstler' von "
-"'Titel' und der 'Titel' selbst nur zu Titel gesetzt.<br/><br/>Wenn z. B. "
-"'Titel' \"Wibble - Wobble\" lautet, wird der 'Künstler' zu \"Wibble\" "
-"gesetzt und der 'Titel' zu \"Wobble\" gesetzt</i>"
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "Umkehren"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-"Erster Buchstabe von 'Title', 'Künstler', 'Albumkünstler', and 'Album' in "
-"Großschrift"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "Anpassen der Stücknummern durch:"
@@ -858,8 +864,8 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "Titel"
@@ -982,75 +988,76 @@ msgstr "Synchronisieren"
msgid "Forget Device"
msgstr "Vergesse Gerät"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "Gerät hinzufügen"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "Nach Album und Stücken suchen?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "Aktualisieren"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "Via CDDB"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "Via MusicBrainz"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr ""
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr ""
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
msgstr ""
-"<p>Welcher Typ von Aktualisierung soll ausgeführt werden?<ul><li> Partiell – "
-"Nur neue Stücke werden gesucht <i>(schnell)</i></li><li> Voll – Alle Stücke "
-"werden neu gesucht <i>(langsam)</i></li></ul></p>"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "Partiell"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "Voll"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Sind Sie sicher, dass Sie die ausgewählten Stücke entfernen möchten?\n"
-"Dies kann nicht rückgängig gemacht werden."
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "Wollen Sie wirklich <b>%1</b> entfernen?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "Wollen Sie wirklich '%1' vergessen?"
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "Wollen Sie wirklich Audio-CD <b>%1 – %2</b> auswerfen?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr ""
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "Auswerfen"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "Wollen Sie wirklich die Verbindung zu <b>%1</b> beenden?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr ""
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "Verbindung beenden"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "Andere Dialoge bitte zuerst schließen."
@@ -1161,7 +1168,7 @@ msgstr ""
"<b>120kb/s</b> könnte nicht zufriedenstellend sein alles über <b>205kb/s</b> "
"ist wahrscheinlich übertrieben."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1281,7 +1288,7 @@ msgstr ""
"Musik.<br>Empfohlen wird dies nur für Apple Geräte und Geräte welche keine "
"Unterstützung FLAC besitzen."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1414,63 +1421,62 @@ msgstr "Dance"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
msgstr ""
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "Aktualisiere..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "Lese den Zwischenspeicher"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "Verbinde mit Gerät..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "Keine Geräte gefunden"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "Mit Gerät verbunden"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "Vom Gerät getrennt"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "Aktualisiere Ordner..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "Aktualisiere Dateien..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "Aktualisiere Titel..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "Nicht verbunden"
@@ -1478,7 +1484,7 @@ msgstr "Nicht verbunden"
msgid "%1 (Disc %2)"
msgstr "%1 (Disk %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "Keine Treffer in MusicBrainz gefunden"
@@ -1486,17 +1492,16 @@ msgstr "Keine Treffer in MusicBrainz gefunden"
msgid "Connection"
msgstr "Verbindung"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "Musikbibliothek"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"Ein entferntes Gerät mit Namen \"%1\" existiert bereits.\n"
-"Bitte einen anderen Namen wählen."
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1577,20 +1582,20 @@ msgstr "Größe unbekannt"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "Suche"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "Aktiviere markiere Stücke"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "Deaktiviere markierte Stücke"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "Nichts ausgewählt"
@@ -1634,7 +1639,7 @@ msgstr ""
msgid "Failed to save %1."
msgstr ""
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "Fehler beim Löschen der Einstellungsdatei. (%1)"
@@ -1666,20 +1671,24 @@ msgstr ""
msgid "Unknown method called."
msgstr ""
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "Unbekannter Fehler"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "Starte dynamische Wiedergabeliste"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "Stoppe dynamischen Modus"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
@@ -1687,47 +1696,47 @@ msgstr ""
"Sie müssen \"perl\" auf ihrem System installieren, um den dynamischen Modus "
"von Cantata zu benutzen."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "Fehler beim Finden der Einstellungsdatei – %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "Fehler beim Entfernen der bestehenden Regeldatei – %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "Fehler beim Erstellen der Einstellungsdatei – %1 → %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "Dynamizer wurde beendet"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "Speichere Regel"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "Lösche Regel"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "Warte auf Antwort vom vorherigen Kommando. (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr ""
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Fehler beim Setzen des Dynamizer-Status. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "Fehler beim Setzen der dynamischen Regeln. (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1748,26 +1757,25 @@ msgstr "Entferne dynamische Regeln"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Sind Sie sicher, dass Sie die Regel entfernen möchten?\n"
-"Dies kann nicht rückgängig gemacht werden."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "Dynamische Regel"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "Hinzufügen"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr "<i><b>FEHLER:</b> 'Von Jahr' muss kleiner als 'Zu Jahr' sein</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1799,63 +1807,68 @@ msgstr " (Exakt)"
msgid "Dynamic Rules"
msgstr "Dynamische Regeln"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "Fehler beim Speichern von %1"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-"Eine Regelliste mit Namen '%1' existiert bereits.\n"
-"Überschreiben?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "Regel überschreiben:"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "Speichere %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "Lösche..."
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "Name"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "Gezählte Stücke"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "Verbrauchter Speicherplatz"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr ""
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1864,67 +1877,67 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "Cover"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "Skalierte Cover"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "Hintergrundbilder"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "Künstlerinformationen"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "Albuminformation"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr ""
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr ""
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "Jamendo"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "Magnatune"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr ""
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr ""
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "Lösche alle"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "Lösche alle '%1' Einträge?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "Löschen Zwischenspeicher"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>Alles folgende löschen?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr ""
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1935,7 +1948,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1946,69 +1959,68 @@ msgstr ""
"%1\n"
"%2 x %3"
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "Aktuelles Cover"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr ""
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "Bild"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "Lade herunter..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "Bild (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr ""
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr ""
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-"Fehler beim Setzen Covers.\n"
-"Kann temporäre Datei nicht herunterladen."
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "Kann Bild nicht herunterladen."
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "Lade lokales Cover"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "Datei ist bereits in Liste."
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "Fehler beim Lesen des Bildes."
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "Anzeige"
@@ -2020,36 +2032,33 @@ msgstr "Anzeige"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "Entfernen"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-"Fehler beim Setzen des Covers.\n"
-"Kann keine Kopie anfertigen."
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-"Fehler beim Setzen des Covers.\n"
-"Kann keine Kopie des Originals anfertigen."
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-"Fehler beim Setzen des Covers.\n"
-"Kann die Datei nicht zu '%1' kopieren."
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "Suche..."
@@ -2065,257 +2074,199 @@ msgstr "Verbindung hergestellt"
msgid "Connection Failed"
msgstr "Verbindung fehlgeschlagen"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr ""
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr ""
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr ""
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr ""
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "Keine"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "Klein"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "Mittel"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "Groß"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "Extra groß"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr ""
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "Einfacher Dateibaum"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "Detaillierter Dateibaum"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "Gruppierte Alben"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "Liste"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "Symbol/Liste"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr ""
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "Tabelle"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "Warteschlange"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "Künstler"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "Ordner"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "Wiedergabelisten"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "Dynamische Wiedergabelisten"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "Streams (z. B. Radiostationen)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr ""
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr ""
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr ""
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "Stil:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Groß"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Klein"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "Links"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "Rechts"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "Oben"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "Unten"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr ""
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "Benutze Systemeinstellung"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "Cantata"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "Ein KDE-Client für MPD"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "Alle Rechte © 2011–2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "Betreuer"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "Oberflächenverbesserungen"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "QtMPC-Autor"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
@@ -2323,114 +2274,119 @@ msgstr ""
"Kontextansicht-Hintergründe (Bitte ziehen Sie in Betracht, ihre Musik-Fan-"
"Art bei fanart.tv hochzuladen.)"
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "Wikipedia"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "Kontextansicht-Metadaten"
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "URL zum Öffnen"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "Cantata einrichten..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr ""
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "Beenden"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "Über Cantata"
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "Zeige Fenster"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "Serverinformationen ..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "Aktualisiere Datenbank"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "Verbinde"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "Sammlung"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "Ausgaben"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "Stoppe nach Stück"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "Hinzufügen zur gespeicherten Wiedergabeliste"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "Abschneiden"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "Stream-URL hinzufügen"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "Leeren"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr ""
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "Ansicht erweitern"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "Zeige aktuelle Songinformation"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "Vollbild"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "Zufall"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "Wiederholen"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "Einzeln"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2438,11 +2394,11 @@ msgstr ""
"Wenn 'Single' aktiviert ist, wird die Wiedergabe nach dem aktuell "
"abgespielten Stück gestoppt oder wiederholt, falls 'Repeat' aktiviert ist."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "Entfernen nach dem Abspielen"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
@@ -2450,107 +2406,115 @@ msgstr ""
"Wenn \"Consume\" aktiviert ist wird ein Stück von der Warteschlange "
"entfernt, sobald es abgespielt wurde."
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr ""
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "Setze Priorität"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "Spiele Stream ab"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "Finde in Musikbibliothek"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "Bearbeite Tags"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "Alles erweitern"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "Alles einklappen"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr ""
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr ""
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "Dynamisch"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "Streams"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "Online"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "Geräte"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "Information"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr ""
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr ""
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "&Bearbeiten"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr ""
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr ""
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "&Einstellungen"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "&Hilfe"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
"Keine Stücke gefunden, welche auf den dynamischen Regeln der Wiedergabeliste "
"entsprechen."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "Verbinde zu %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "Die MPD-Datenbank aktualisieren?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "Über Cantata"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2561,7 +2525,7 @@ msgstr ""
"Drummond<br/>Veröffentlicht unter der <a href=\"http://www.gnu.org/licenses/"
"gpl.html\">GPLv3</a>"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
@@ -2569,7 +2533,7 @@ msgstr ""
"Basierend auf <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> – © 2007–"
"2010 Die QtMPC Authoren<br/>"
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
@@ -2578,7 +2542,7 @@ msgstr ""
"Kontextansicht-Hintergründe mit freundlicher Genehmigung von <a href="
"\"http://www.fanart.tv\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2588,7 +2552,7 @@ msgstr ""
"www.wikipedia.org\">Wikipedia</a> und <a href=\"http://www.last.fm\">Last."
"fm</a>"
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2596,18 +2560,30 @@ msgstr ""
"Bitte laden Sie ihren eigenen Content zu <a href=\"http://www.fanart.tv"
"\">FanArt.tv</a> hoch."
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
+msgstr ""
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr ""
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
msgstr ""
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
msgstr ""
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Serverinformationen"
+
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2616,7 +2592,7 @@ msgid ""
"tr><tr><td align=\"right\">Tags: </td><td>%7</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2625,78 +2601,96 @@ msgid ""
"\"right\">Updated: </td><td>%5</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "Serverinformationen"
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "Cantata (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr ""
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr ""
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr ""
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "Priorität"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "Eingabe der Priorität (0..255)"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "Name der Wiedergabeliste"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "Bitte einen Namen für die Wiedergabeliste angeben"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-"Eine Wiedergabeliste mit Namen <b>%1</b>existiert bereits.<br/> Zur "
-"Wiedergabeliste hinzufügen?"
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "Wiedergabeliste existiert bereits"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "Stream-URL"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr ""
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr ""
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr ""
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Keine"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "Automatisch"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
@@ -2704,9 +2698,9 @@ msgstr ""
"<i>Verbindung zu %1<br/>Die unten angezeigten Einträge beziehen sich auf die "
"aktuelle MPD-Instanz.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2714,31 +2708,21 @@ msgstr ""
"<i>Nicht verbunden.<br/>Einige Einträge können nicht bearbeitet werden "
"solange Cantata nicht mit MPD verbunden wird.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
-msgstr ""
-"<p>Replay Gain ist ein vorgeschlagener Standard aus dem Jahr 2001, zur "
-"Normalisierung der wahrgenommene Lautstärke von Computer-Audio-Formaten wie "
-"MP3 und Ogg Vorbis. Sie arbeitet auf auf Basis von Track und Album und wird "
-"nun in einer wachsenden Anzahl von Playern unterstützt.</p><p>Die folgenden "
-"Einstellungen können gewählt werden:<ul><li><i>Keine</i> – ReplayGain wird "
-"nicht hinzugefügt.</li><li><i>Stück</i> – Lautstärke wird eingestellt auf "
-"das Stück.</li><li><i>Album</i> – Lautstärke wird eingestellt auf das Album."
-"</li><li><i>Automatisch</i> – Lautstärke wird auf das Stück eingestellt, "
-"wenn die zufällige Wiedergabe eingestellt ist. Sonst wird auf Album "
-"eingestellt.</li></ul></p>"
-
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+"li></ul>"
+msgstr ""
+
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "Umbenennen"
@@ -2746,37 +2730,37 @@ msgstr "Umbenennen"
msgid "Remove Duplicates"
msgstr ""
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Sind Sie sicher, dass Sie die gewählte Wiedergabeliste entfernen möchten?\n"
-"Dies kann nicht rückgängig gemacht werden."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "Entferne Wiedergabelisten?"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-"Eine Wiedergabeliste mit Namen <b>%1</b>existiert bereits.<br/> "
-"Überschreiben?"
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "Wiedergabeliste überschreiben?"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "Wiedergabeliste umbenennen"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "Bitte neuen Namen für die Wiedergabeliste angeben:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr ""
@@ -2840,113 +2824,117 @@ msgid_plural "%1 Updates available"
msgstr[0] ""
msgstr[1] ""
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "Einstellungen zur Sammlung"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "Wiedergabe"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "Wiedergabeeinstellungen"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "Dateien"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "Dateieinstellungen"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "Oberfläche"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "Einstellungen zur Oberfläche"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "Kontext"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "Einstellungen zur Kontextansicht"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "HTTP-Server"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "HTTP-Server-Einstellungen"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "Audio-CD-Einstellungen"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "Proxy"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "Proxyeinstellungen"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "Tastaturkürzel"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "Tastaturkürzel-Einstellungen"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "Zwischenspeicher"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "Zwischengespeicherte Daten"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr ""
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "Einstellungen"
@@ -2954,60 +2942,64 @@ msgstr "Einstellungen"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr ""
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr ""
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "Genre:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr ""
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "Datum:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr ""
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr ""
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "Keine Texte gefunden."
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
@@ -3015,333 +3007,313 @@ msgstr ""
"<i> Dieser Ordner wird verwendet für Musik-Dateien zur Übertragung zum und "
"vom Gerät.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "Host:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr ""
+
+#: gui/serversettings.cpp:240
+msgid ""
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr ""
+
+#: gui/serversettings.cpp:241
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
msgstr ""
-"Zu welcher Art von Sammlung möchten Sie sich verbinden?<br/><li> Standard: "
-"<br>Musiksammlung kann geteilt werden, ist auf einem anderen Rechner, oder "
-"ist bereits eingerichtet. </li><li> Einfach: <br>Musiksammlung ist nicht mit "
-"anderen geteilt und Cantata wird Konfiguration und Steuerung der MPD-Instanz "
-"übernehmen.</ li></ ul>"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "Füge Sammlung hinzu"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "Standard"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "Einfach"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "Lösche <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr ""
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "Lösche"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "Neue Sammlung %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "Voreinstellung"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "Einstellungen…"
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "Vorheriges Stück"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "Nächstes Stück"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "Abspielen/Pause"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "Stoppe nach aktuellem Stück"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "Lautstärke anheben"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "Lautstärke verringern"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "Speichern unter"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "In Warteschlange einreihen"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr ""
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "Warteschlange ersetzen"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "Hinzufügen mit Priorität"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "Höchste Priorität (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "Hohe Priorität (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "Mittlere Priorität (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "Niedrige Priorität (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "Normale Priorität (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "Angepasste Priorität"
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "Zur Wiedergabeliste hinzufügen"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Dateien organisieren"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "Bearbeite Tags"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "ReplayGain"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr ""
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "Kopiere Stücke auf Gerät"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "Setze Bild"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr ""
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "Spiele jetzt"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr ""
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr ""
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr ""
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "Erstes aktives Interface"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr ""
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr ""
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%1 von %2"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Cue Sheet"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "Playlist"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "Geräteeinstellungen"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "Aktualisiere Gerät"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "Mit Gerät verbinden"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "Vom Gerät trennen"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "Bearbeite CD-Details"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "Keine Geräte verbunden"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "Nicht eingeloggt"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "Eingeloggt"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "Keine Abonnements"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "Sie haben noch ein aktives Abonnement"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "Eingeloggt seit (expiry:%1)"
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "Sitzung abgelaufen"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "Audio-Datei"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "Einzelne Lieder"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "Dienst einrichten"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "Aktualisiere Dienst"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "Abonnements hinzufügen"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "Abonnement entfernen"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "Abonnement aktualisieren"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "Letzte Suche: %1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "Nicht geladen"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "Benutzen Sie die Suche, um Stücke zu finden"
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(Lädt herunter: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr ""
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "Neue Wiedergabeliste…"
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "Intelligente Wiedergabeliste"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "Länge"
@@ -3349,6 +3321,10 @@ msgstr "Länge"
msgid "Disc"
msgstr "Disk"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr ""
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr ""
@@ -3371,85 +3347,81 @@ msgstr ""
msgid "Album Artist"
msgstr "Albumkünstler"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(Priorität: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "Lade..."
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "Lesezeichen"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr ""
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Favoriten"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "Kategorie zu Lesezeichen hinzufügen"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Füge Stream den Favoriten hinzu"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "Konfiguriere Streams"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "Unbekannt"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "\"%1\""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "\"%1\" (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "Verbindung zu %1 fehlgeschlagen"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr ""
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "Verbindung zu %1 fehlgeschlagen – falsches Passwort"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "Fehler beim Senden von Kommando zu %1 – nicht verbunden"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr "Fehler beim Laden. Bitte prüfen ob \"mpd\" Leseberechtigung besitzt."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
@@ -3457,30 +3429,30 @@ msgstr ""
"Fehler beim Laden. MPD kann nur lokale Dateien abspielen, wenn eine "
"Verbindung über einen lokalen Socket besteht."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "Fehler beim Senden des Kommandos. Verbindung zu %1 unterbrochen"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "Fehler beim Umbenennen von <b>%1</b> nach <b>%2</b>"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "Fehler beim Speichern von <b>%1</b>"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr ""
"Sie können keine Teile eines Cue-Sheets zu einer Wiedergabeliste hinzufügen."
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr ""
"Sie können eine Wiedergabeliste nicht zu einer anderen Wiedergabeliste "
"hinzufügen."
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
@@ -3488,15 +3460,11 @@ msgstr ""
msgid "Personal"
msgstr "Persönlich"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "Unbekannt"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "Verschiedene Künstler:"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3510,12 +3478,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr ""
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr ""
@@ -3548,19 +3516,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "Streaming-Format:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "Streaming"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3570,85 +3538,85 @@ msgstr "Magnatune-Einstellungen"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "Benutzername:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "Kennwort:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "Mitgliedschaft:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "Downloads:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "Lade herunter"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "Aktualisiere Anzeige"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "Gruppiere Stücke"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "Analyseergebnis"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "Fehler beim Analysieren"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "Fehler beim Herunterladen"
@@ -3664,189 +3632,193 @@ msgstr ""
msgid "Delete Downloaded Podcast Episodes"
msgstr ""
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr ""
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr ""
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr ""
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Einstellungen…"
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "Suche %1:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "Musikliste noch einmal für %1 herunterladen?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "Noch einmal herunterladen"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr ""
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr ""
-
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr ""
-
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr ""
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
+#: online/onlineservicespage.cpp:648
+msgid ""
+"Cancel podcast episode downloads (both current and any that are queued)?"
msgstr ""
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:685
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
+"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
msgstr ""
-#: online/onlineservicespage.cpp:699
-msgid ""
-"Do you wish to the delete downloaded files of the selected podcast episodes?"
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
msgstr ""
-#: online/podcastsearchdialog.cpp:253
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "Webseite:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "Podcastdetails"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr ""
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr ""
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "Fehler beim Herunterladen des Podcasts von %1"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "URL"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr ""
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr ""
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr ""
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr ""
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr ""
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr ""
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
msgstr ""
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "Suche %1"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr ""
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr ""
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr ""
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "Podcasts"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr ""
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr ""
@@ -3858,59 +3830,77 @@ msgstr ""
msgid "Download episodes to:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr ""
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr ""
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr ""
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr ""
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr ""
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr ""
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr ""
@@ -3922,61 +3912,61 @@ msgstr "Künstlerbilder"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr ""
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr ""
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10px"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr ""
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40%"
@@ -4001,7 +3991,7 @@ msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " ms"
@@ -4028,8 +4018,8 @@ msgstr ""
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
#. i18n: file: context/othersettings.ui:213
@@ -4038,25 +4028,17 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "Zeige nur einfachen Wikipedia-Text"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
-msgstr ""
-"<i><b>Hinweis:</b> Cantata zeigt nicht die volle Wikipedia-Seiten (mit "
-"Bildern,Links usw.) sondern zeigt eine minimale Version. Das Trimmen "
-"funktioniert nicht immer zu 100% genau. Daher wird Cantata standardmäßig nur "
-"die grundlegende Einführung zu jedem Artikel anzeigen. Wenn Sie sich dafür "
-"entscheiden den ganzen Artikel zeigen kann es zu Verarbeitungsfehlern "
-"kommen. Der Zwischenspeicher für Artikel muss geleert werden (über die "
-"„Zwischenpeicher“ Seite).<i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4113,21 +4095,20 @@ msgid "To copy:"
msgstr "Zum Kopieren:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
msgstr ""
#. i18n: file: devices/albumdetails.ui:26
@@ -4138,13 +4119,13 @@ msgstr "Album Details"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "Jahr:"
@@ -4209,172 +4190,169 @@ msgid "Never skip on read error"
msgstr "Niemals Lesefehler überspringen"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-"<i><b>Hinweis:</b> Diese Einstellungen sind nur gültig, wenn das Gerät "
-"verbunden ist.</i>"
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "Name:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "Musikverzeichnis:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "Kopiere Albencovers als:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "Maximale Größe des Albumcovers:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "Voreinstellung der Lautstärke:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "Automatisch nach Musik suchen, wenn verbunden"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "Benutze Zwischenspeicher"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "Dateinamen"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "Dateinamenschema"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "VFAT-sicher"
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "Nur ASCII-Zeichen verwenden"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "Ersetze Leerzeichen mit Unterstrichen"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "Ignoriere „The“ im Künstlernamen"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "Umwandeln"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4496,176 +4474,159 @@ msgid "The genre of the album."
msgstr ""
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-"<i><b>Hinweis:</b> Diese Einstellungen sind nur gültig, wenn das Gerät nicht "
-"verbunden ist.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "Type:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "Optionen"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "Port:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "Benutzer:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "Domain:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "Freigabe:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>Hinweis:</b> Wenn Sie hier ein Kennwort eingeben, wird es "
-"<b>unverschlüsselt</b> in Cantatas Konfigurationdatei gespeichert. Wenn Sie "
-"möchten, dass Cantata sie zur Passworteingabe auffordert, setzen Sie das "
-"Kennwort auf '-'</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "Servicename:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "Ordner:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "Weitere Optionen:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>Hinweis:</b> Aufgrund der Art wie sshfs arbeitet, benötigen Sie eine "
-"geeignete ssh-askpass-Anwendung (ksshaskpass, ssh-askpass-gnome usw.), um "
-"ein Kennwort eingeben zu können.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>Hinweis:</b> Dieser Dialog wird nur verwendet, um entfernte (z. B. via "
-"samba) Geräte hinzuzufügen, oder auf lokal eingehängte Ordner zuzugreifen. "
-"Für normale Medienabspieler, welche über USB eingehängt wurden, wird Cantata "
-"diese automatisch anzeigen</i>"
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4685,39 +4646,51 @@ msgstr "Name der dynamischen Regeln"
msgid "Edit"
msgstr "Bearbeiten"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "Über Regeln"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "Einbeziehung von Stücken, auf welche folgendes zutrifft:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "Ausschluss von Stücken, auf welche folgendes zutrifft:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "Künstler ähnlich zu:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "Albumkünstler:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "Von Jahr:"
@@ -4729,161 +4702,152 @@ msgstr "Von Jahr:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "Jegliches"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "Zu Jahr:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "Exakter Treffer"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
msgstr ""
-"<i><b>Hinweis:</b> Nur Werte für Tags angeben, welche auch gesucht werden.</"
-"i>"
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>Hinweis:</b> Für Genre nach dem letzten Buchstaben ein * findet "
-"mehrere Genre. z. B. 'rock*' findet 'Hard Rock' und 'Rock and Roll'.</i>"
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr ""
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr ""
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "Speichere heruntergeladene Songtexte ins Musikverzeichnis"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "Speichere heruntergeladene Hintergrundbilder ins Musikverzeichnis"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "Cantata erster Start"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "Willkommen bei Cantata"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
-"<html><head/><body><p>Cantata ist ein umfangreiches Clientprogramm für den "
-"Music Player Daemon (MPD). Damit Cantata funktioniert, muss eine laufende "
-"Installation von MPD vorhanden sein.</p><p>Für weitere Information zu MPD "
-"besuchen Sie bitte dessen Webseite unter <a href=\"http://www.musicpd.org"
-"\"><span style=\" text-decoration: underline; color:#0000ff;\">http://www."
-"musicpd.org</span></a></p><br/><p>Diese 'Hilfsdialog' wird Sie durch die "
-"Konfiguration begleiten. damit Cantata richtig funktioniert.</p></body></"
-"html>"
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr "<html><head/><body><p>Willkommen bei Cantata</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "Standard Mehrbenutzer/Server-Konfiguration"
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4894,13 +4858,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "Einfache Konfiguration für Einzelnutzer"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4911,7 +4875,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4927,13 +4891,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "Verbindungdetails"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -4942,65 +4906,61 @@ msgstr ""
"Cantata benötigt. Bitte die nötigen Details eingeben und die „Verbinden“-"
"Schaltfläche zum Testen der Verbindung drücken."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "Host (oder lokaler Socket):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>Hinweis:</b> Wenn Sie einen lokalen Domain-Socket benutzen, müssen Sie "
-"den absoluten Pfad dorthin angeben. (Portnummer wird dann nicht benötigt.)</"
-"i>"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "Musikverzeichnis"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "Bitte wählen Sie den Ordner mit ihrem Musikverzeichnis."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "Cover, Texte und Streams"
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -5008,59 +4968,52 @@ msgid ""
"folders.</p>"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-"<i><b>Hinweis:</b> Das Musikverzeichnis zeigt auf eine HTTP-Adresse und "
-"Cantata kann aktuell keine Dateien hochladen. Daher sollten die obigen "
-"Einstellungen deaktiviert werden.</i>"
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "Fertig."
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
"etc."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5076,262 +5029,295 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "Seitenleiste"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Stil:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "Position:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "Zeige nur Symbole, keinen Text"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "Monochrome Symbole"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "Seitenleiste automatisch ausblenden"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "Cover:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "Zeige Künstlerbilder"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>Hinweis:</b> Wenn nach Künstlerbildern gesucht wird, schaut Cantata "
-"nach 'Artist'.jpg oder 'Artist'.png\n"
-"im Ordner des aktuellen Titels oder im darüber liegenden Ordner. Ist kein "
-"Bild vorhanden, wird Cantata versuchen eines herunterzuladen.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "Zeige Künstlerbilder"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "Sortiere Alben:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "Alben standardmäßig einklappen"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "Andere Ansichten"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "Stil der Verzeichnisansicht:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "Stil der Streamansicht:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "Stil der Onlineansicht"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "Stil der Geräteansicht:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Geräte:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr ""
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Suche:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "Automatisch aktuelles Album erweitern"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "Zum aktuellen Stück blättern"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "Aktuelles Albencover"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "Externe Funktionen"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "Zeige Hinweis beim Liedwechsel"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr "Zeige Symbol in der Systemleiste"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Beim Schließen in die Systemleiste minimieren"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr "Zeige Hauptfenster"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "Allgemein"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr "Gruppiere Alben mit nur einem Titel"
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5340,39 +5326,33 @@ msgid ""
"to 'Metal'."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr "Zeige Löschfunktion im Kontextmenü"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr "Erzwinge Einzelklick zur Aktivierung von Elementen"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5380,159 +5360,160 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "Sprache:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Hinweis:</b> Zur Änderung der Einzelklick-Einstellung muss Cantata neu "
-"gestartet werden.</i>"
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Hinweis:</b> Änderung Sprache benötigt einen Neustart von Cantata.</i>"
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[Dynamik]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "Ausblenden bei Stopp:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Stoppe Wiedergabe beim Beenden"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>Hinweis:</b> Wenn Sie die Stopp-Schaltfläche gedrückt halten, öffnet "
-"sich ein Menü für verschiedene Aktionen.</i>"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "Ausgabe"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "Überblenden zwischen Stücken:"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr " s"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "Lautstärkeanpassung (ReplayGain):"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "Über ReplayGain"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr ""
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "Sammlung:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "Dateiname des Covers:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5547,151 +5528,138 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "HTTP-Stream-URL:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>Hinweis:</b> Das Musikverzeichnis wird zur Coversuche benötigt (z. B. "
-"<code>cover.jpg</code>). Wenn Sie die Berechtigung zum Schreiben auf diese "
-"Verzeichnisse (und Unterverzeichnisse) haben, wird Cantata alle "
-"heruntergeladenen Cover in den entsprechenden Albenordner ablegen.</i>"
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>Hinweis:</b> Wenn sie die Einstellung zum Musikverzeichnis ändern, "
-"muss die Musikbibliothek manuell aktualisiert werden. Dies kann über die "
-"Schaltfläche 'Aktualisiere Datenbank' ausgeführt werden.</i>"
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
-"<i><b>Hinweis:</b> Wenn keine Einstellung zum Covernamen angegeben sind, "
-"wird Cantata den voreingestellten Namen <code>cover</code> nehmen.</i>"
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "Netzwerkkarte:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
-msgstr ""
-"<i><b>Hinweis:</b> MPD spielt normal nur Stücke welche in seinem "
-"konfigurierten Musikordner sich befinden. Cantata besitzt einen einfachen "
-"HTTP-Server welcher Stücke direkt zu MPD senden kann. Dies funktioniert nur, "
-"wenn Cantata in gestartet ist.<br/><br/>\n"
-"<b>Hinweis:</b> Wenn Sie 'Local loopback' für die 'Netzwerkkarte', "
-"eingestellt haben <b>muss</b> sich MPD auf dem gleichen Computer befinden.</"
-"i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "Modus:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "Proxy HTTP"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "Proxy SOCKS"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "Status:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "Logge ein"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5705,133 +5673,149 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "Premium-Konto"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "Streamtyp:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "Sitzung abgelaufen:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr ""
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr ""
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "Suche:"
-
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "Tastaturkürzel für gewählte Aktion"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "Voreinstellung:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "Eigene Einstellung:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "Albumkünstler:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "Stücknummer:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "Disk-Nummer:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr ""
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
msgstr ""
-#. i18n: file: tags/trackorganiser.ui:115
-#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
+msgid ""
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
+msgstr ""
+
+#. i18n: file: tags/trackorganiser.ui:115
+#. i18n: ectx: property (text), widget (QTreeWidget, files)
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "Ursprünglicher Name"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "Neuer Name:"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr ""
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Markus Slopianka"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "kamikazow at web.de"
@@ -5882,7 +5866,7 @@ msgstr "Überprüfung der Stücke abbrechen?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "Abbrechen"
@@ -5892,11 +5876,9 @@ msgstr "Lesen der Dateien auf vorhandene Tags abbrechen?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"Suche in <b>allen</b> Stücken?<br><br><i>Hinweis: Alle Stücke besitzen einen "
-"ReplayGain-Tag. </i>"
#: replaygain/rgdialog.cpp:263
msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
@@ -5918,17 +5900,17 @@ msgstr "Untersuche Stücke..."
msgid "Reading existing tags..."
msgstr "Lese vorhandene Tags..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr ""
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "Fehler beim aktualisieren der Tags aus den folgenden Stücken:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "Gerät ist nicht verbunden."
@@ -5952,63 +5934,63 @@ msgstr ""
msgid "Original: %1"
msgstr ""
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "Das ausgewählte Stück von der Liste entfernen?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "Stücke entfernen?"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr ""
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr ""
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr ""
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr ""
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr ""
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr ""
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr ""
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr ""
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr ""
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr ""
@@ -6020,29 +6002,29 @@ msgstr ""
msgid "%1: Love Current Track"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6072,27 +6054,27 @@ msgstr "AAC 128k"
msgid "Logout"
msgstr "Ausloggen"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "URL:"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "Nur zur Warteschlange hinzufügen und nicht speichern"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Der Warteschlange hinzufügen und zu Favoriten hinzufügen"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "Stream hinzufügen"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "Stream bearbeiten"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>FEHLER:</b> Ungültiges Protokoll</i>"
@@ -6137,39 +6119,39 @@ msgid "Installing/updating %1"
msgstr ""
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
+msgid "Failed to install '%1'"
msgstr ""
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
+msgid "Failed to download '%1'"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr ""
@@ -6185,193 +6167,195 @@ msgstr "Favorisierte Streams exportieren"
msgid "Add New Stream To Favorites"
msgstr "Füge neuen Stream zu den Favoriten hinzu"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Digitally Imported"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|XML-Streams"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "Stream importieren"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "XML-Streams (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|XML-Streams"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "Stream exportieren"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr ""
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "Fehler beim Erstellen von <b>%1</b>."
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr ""
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "Stream existiert bereits.<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "Der Stream mit dem Namen <b>%1</b> existiert bereits."
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "Lesezeichen hinzugefügt"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "Bereits in den Lesezeichen"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Existiert bereits in Favoriten"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "Erneutes Laden <b>%1</b> der Streams?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr ""
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "Wollen Sie wirklich das Lesezeichen <b>%1</b> entfernen?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr ""
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "Wollen Sie wirklich alle <b>%1</b> Lesezeichen entfernen?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr ""
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "Wollen Sie wirklich die gewählten %1 Streams entfernen?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "Wollen Sie wirklich <b>%1</b> entfernen?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "Wollen Sie wirklich '%1' entfernen?"
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "Suche %1:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr ""
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr ""
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr ""
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.cantata|Cantata-Streams"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr ""
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "Cantata-Streams (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-"Eine Kategorie mit Namen <b>%1</b>existiert bereits.<br/> Überschreiben?"
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
msgstr ""
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr ""
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr ""
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr ""
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr ""
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "&OK"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "&Abbrechen"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "&Ja"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "&Nein"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "&Verwerfen"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "&Speichern"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "&Anwenden"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "S&chließen"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "&Überschreiben:"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "&Zurücksetzen"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "&Fortsetzen"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "&Löschen"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "&Stopp"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "&Entfernen"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "&Vorheriges"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "&Nächstes"
@@ -6383,14 +6367,32 @@ msgstr "Kennwort"
msgid "Please enter password:"
msgstr "Bitte Kennwort eingeben:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr ""
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "Warnung"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "Frage"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr ""
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr ""
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr ""
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "Gewählter Ordner"
@@ -6399,61 +6401,99 @@ msgstr "Gewählter Ordner"
msgid "Select File"
msgstr "Wähle Datei"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 kB"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MB"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 GB"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "Ein Tag %2"
msgstr[1] "%1 Tage %2"
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Tags"
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr "Setze 'Albumkünstler' von 'Künstler'"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr ""
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr ""
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "Alle Stücke"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
"Hinzufügen der „Verschiedene Künstler“ Problembehebung bei <b>allen</b> "
"Stücken?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>Dies wird den 'Albumkünstler' und 'Künstler' zu „Verschiedene Künstler“ "
+"gesetzt, und der 'Titel' zu \"TrackArtist - TrackTitle\"</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
"Zurücksetzen der „Verschiedene Künstler“ Problembehebung bei <b>allen</b> "
"Stücken?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "Zurücksetzen der „Verschiedene Künstler“ Problembehebung"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>Wenn der 'Albumkünstler' der gleiche ist wie 'Künstler' und der 'Titel' "
+"ist – im Format \"TrackArtist - TrackTitle\" –, wird der 'Künstler' von "
+"'Titel' und der 'Titel' selbst nur zu Titel gesetzt.<br/><br/>Wenn z. B. "
+"'Titel' \"Wibble - Wobble\" lautet, wird der 'Künstler' zu \"Wibble\" "
+"gesetzt und der 'Titel' zu \"Wobble\" gesetzt</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6461,73 +6501,152 @@ msgstr ""
"Setze 'Albumkünstler' mit 'Künstler' (wenn 'Albumkünstler' leer ist) bei "
"<b>allen</b> Stücken?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr "Setze 'Albumkünstler' mit 'Künstler' (wenn 'Albumkünstler' leer ist)?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "Setze Albumkünstler von Künstler"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"Ersten Buchstaben von 'Title', 'Artist', 'Album artist', and 'Album' in "
-"Großbuchstaben von <b>allen</b> Stücken?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "Angleichen des Wertes einer jeden Stücknummer durch:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr ""
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "Alle Stücke [geändert]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [geändert]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr ""
"Möchten Sie Ihre Song Dateien so umbenennen, dass Sie zu Ihren Tags passen?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "Dateien umbenennen"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "Umbenennen der Dateien abbrechen?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "Quelldatei existiert nicht.<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr ""
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "Zieldateiname existiert bereits.<br/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr ""
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "Fehler beim Erstellen des Zielordners<br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr ""
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "Fehler beim Umbenennen %1 zu %2"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr ""
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(Stream)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\">Komponist:</td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr ""
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6545,7 +6664,7 @@ msgstr ""
msgid "All Genres"
msgstr "Alle Genre"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "Zurück"
@@ -6553,15 +6672,19 @@ msgstr "Zurück"
msgid "Menu"
msgstr "Menü"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr ""
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "Von Warteschlange entfernen"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "Suche..."
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "Schließe Suchleiste"
@@ -6575,17 +6698,20 @@ msgstr "<b>NICHT</b> eingeloggt bei %1"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr ""
@@ -6721,6 +6847,455 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr ""
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "Es ist nicht ausreichend Speicherplatz auf dem Ziel vorhanden.\n"
+#~ "Die gewählten Stücke benötigen %1, aber es sind nur noch %2 verfügbar.\n"
+#~ "Die Stücke müssen in ein kleineres Dateiformat umgewandelt werden um "
+#~ "erfolgreich kopiert zu werden."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "Es ist nicht ausreichend Speicherplatz auf dem Ziel vorhanden.\n"
+#~ "Die gewählten Stücke benötigen %1, aber es sind nur noch %2 verfügbar."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Sie haben das Zielgerät nicht konfiguriert.<br/>Mit den "
+#~ "Standardeinstellungen fortfahren?</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Sie haben das Quellgerät nicht konfiguriert.<br/>Mit den "
+#~ "Standardeinstellungen fortfahren?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "Erster Buchstabe von 'Title', 'Künstler', 'Albumkünstler', and 'Album' in "
+#~ "Großschrift"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>Welcher Typ von Aktualisierung soll ausgeführt werden?<ul><li> "
+#~ "Partiell – Nur neue Stücke werden gesucht <i>(schnell)</i></li><li> Voll "
+#~ "– Alle Stücke werden neu gesucht <i>(langsam)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Sind Sie sicher, dass Sie die ausgewählten Stücke entfernen möchten?\n"
+#~ "Dies kann nicht rückgängig gemacht werden."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "Wollen Sie wirklich <b>%1</b> entfernen?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "Wollen Sie wirklich Audio-CD <b>%1 – %2</b> auswerfen?"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "Wollen Sie wirklich die Verbindung zu <b>%1</b> beenden?"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "Ein entferntes Gerät mit Namen \"%1\" existiert bereits.\n"
+#~ "Bitte einen anderen Namen wählen."
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Sind Sie sicher, dass Sie die Regel entfernen möchten?\n"
+#~ "Dies kann nicht rückgängig gemacht werden."
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "Eine Regelliste mit Namen '%1' existiert bereits.\n"
+#~ "Überschreiben?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>Alles folgende löschen?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "Fehler beim Setzen Covers.\n"
+#~ "Kann temporäre Datei nicht herunterladen."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "Fehler beim Setzen des Covers.\n"
+#~ "Kann keine Kopie anfertigen."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "Fehler beim Setzen des Covers.\n"
+#~ "Kann keine Kopie des Originals anfertigen."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "Fehler beim Setzen des Covers.\n"
+#~ "Kann die Datei nicht zu '%1' kopieren."
+
+#~ msgid "Medium"
+#~ msgstr "Mittel"
+
+#~ msgid "Extra Large"
+#~ msgstr "Extra groß"
+
+#~ msgid "Icon/List"
+#~ msgstr "Symbol/Liste"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "Bearbeite Tags"
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr ""
+#~ "Eine Wiedergabeliste mit Namen <b>%1</b>existiert bereits.<br/> Zur "
+#~ "Wiedergabeliste hinzufügen?"
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>Replay Gain ist ein vorgeschlagener Standard aus dem Jahr 2001, zur "
+#~ "Normalisierung der wahrgenommene Lautstärke von Computer-Audio-Formaten "
+#~ "wie MP3 und Ogg Vorbis. Sie arbeitet auf auf Basis von Track und Album "
+#~ "und wird nun in einer wachsenden Anzahl von Playern unterstützt.</"
+#~ "p><p>Die folgenden Einstellungen können gewählt werden:<ul><li><i>Keine</"
+#~ "i> – ReplayGain wird nicht hinzugefügt.</li><li><i>Stück</i> – Lautstärke "
+#~ "wird eingestellt auf das Stück.</li><li><i>Album</i> – Lautstärke wird "
+#~ "eingestellt auf das Album.</li><li><i>Automatisch</i> – Lautstärke wird "
+#~ "auf das Stück eingestellt, wenn die zufällige Wiedergabe eingestellt ist. "
+#~ "Sonst wird auf Album eingestellt.</li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Sind Sie sicher, dass Sie die gewählte Wiedergabeliste entfernen "
+#~ "möchten?\n"
+#~ "Dies kann nicht rückgängig gemacht werden."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr ""
+#~ "Eine Wiedergabeliste mit Namen <b>%1</b>existiert bereits.<br/> "
+#~ "Überschreiben?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "Zu welcher Art von Sammlung möchten Sie sich verbinden?<br/><li> "
+#~ "Standard: <br>Musiksammlung kann geteilt werden, ist auf einem anderen "
+#~ "Rechner, oder ist bereits eingerichtet. </li><li> Einfach: "
+#~ "<br>Musiksammlung ist nicht mit anderen geteilt und Cantata wird "
+#~ "Konfiguration und Steuerung der MPD-Instanz übernehmen.</ li></ ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "Lösche <b>%1</b>?"
+
+#~ msgid "Edit Tags"
+#~ msgstr "Bearbeite Tags"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(Priorität: %1)</b>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Cantata zeigt nicht die volle Wikipedia-Seiten (mit "
+#~ "Bildern,Links usw.) sondern zeigt eine minimale Version. Das Trimmen "
+#~ "funktioniert nicht immer zu 100% genau. Daher wird Cantata standardmäßig "
+#~ "nur die grundlegende Einführung zu jedem Artikel anzeigen. Wenn Sie sich "
+#~ "dafür entscheiden den ganzen Artikel zeigen kann es zu "
+#~ "Verarbeitungsfehlern kommen. Der Zwischenspeicher für Artikel muss "
+#~ "geleert werden (über die „Zwischenpeicher“ Seite).<i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Diese Einstellungen sind nur gültig, wenn das Gerät "
+#~ "verbunden ist.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "Ignoriere „The“ im Künstlernamen"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Diese Einstellungen sind nur gültig, wenn das Gerät "
+#~ "nicht verbunden ist.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Wenn Sie hier ein Kennwort eingeben, wird es "
+#~ "<b>unverschlüsselt</b> in Cantatas Konfigurationdatei gespeichert. Wenn "
+#~ "Sie möchten, dass Cantata sie zur Passworteingabe auffordert, setzen Sie "
+#~ "das Kennwort auf '-'</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Aufgrund der Art wie sshfs arbeitet, benötigen Sie "
+#~ "eine geeignete ssh-askpass-Anwendung (ksshaskpass, ssh-askpass-gnome "
+#~ "usw.), um ein Kennwort eingeben zu können.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Dieser Dialog wird nur verwendet, um entfernte (z. B. "
+#~ "via samba) Geräte hinzuzufügen, oder auf lokal eingehängte Ordner "
+#~ "zuzugreifen. Für normale Medienabspieler, welche über USB eingehängt "
+#~ "wurden, wird Cantata diese automatisch anzeigen</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Nur Werte für Tags angeben, welche auch gesucht werden."
+#~ "</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Für Genre nach dem letzten Buchstaben ein * findet "
+#~ "mehrere Genre. z. B. 'rock*' findet 'Hard Rock' und 'Rock and Roll'.</i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata ist ein umfangreiches Clientprogramm für "
+#~ "den Music Player Daemon (MPD). Damit Cantata funktioniert, muss eine "
+#~ "laufende Installation von MPD vorhanden sein.</p><p>Für weitere "
+#~ "Information zu MPD besuchen Sie bitte dessen Webseite unter <a href="
+#~ "\"http://www.musicpd.org\"><span style=\" text-decoration: underline; "
+#~ "color:#0000ff;\">http://www.musicpd.org</span></a></p><br/><p>Diese "
+#~ "'Hilfsdialog' wird Sie durch die Konfiguration begleiten. damit Cantata "
+#~ "richtig funktioniert.</p></body></html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Wenn Sie einen lokalen Domain-Socket benutzen, müssen "
+#~ "Sie den absoluten Pfad dorthin angeben. (Portnummer wird dann nicht "
+#~ "benötigt.)</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
+#~ "currently cannot upload files to external HTTP servers. Therefore, the "
+#~ "above settings should be left un-checked.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Das Musikverzeichnis zeigt auf eine HTTP-Adresse und "
+#~ "Cantata kann aktuell keine Dateien hochladen. Daher sollten die obigen "
+#~ "Einstellungen deaktiviert werden.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "Cover:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Wenn nach Künstlerbildern gesucht wird, schaut Cantata "
+#~ "nach 'Artist'.jpg oder 'Artist'.png\n"
+#~ "im Ordner des aktuellen Titels oder im darüber liegenden Ordner. Ist kein "
+#~ "Bild vorhanden, wird Cantata versuchen eines herunterzuladen.</i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "Sortiere Alben:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "Stil der Verzeichnisansicht:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "Stil der Streamansicht:"
+
+#~ msgid "Online view style:"
+#~ msgstr "Stil der Onlineansicht"
+
+#~ msgid "Devices view style:"
+#~ msgstr "Stil der Geräteansicht:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Zur Änderung der Einzelklick-Einstellung muss Cantata "
+#~ "neu gestartet werden.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Änderung Sprache benötigt einen Neustart von Cantata.</"
+#~ "i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Wenn Sie die Stopp-Schaltfläche gedrückt halten, "
+#~ "öffnet sich ein Menü für verschiedene Aktionen.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Das Musikverzeichnis wird zur Coversuche benötigt (z. "
+#~ "B. <code>cover.jpg</code>). Wenn Sie die Berechtigung zum Schreiben auf "
+#~ "diese Verzeichnisse (und Unterverzeichnisse) haben, wird Cantata alle "
+#~ "heruntergeladenen Cover in den entsprechenden Albenordner ablegen.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Wenn sie die Einstellung zum Musikverzeichnis ändern, "
+#~ "muss die Musikbibliothek manuell aktualisiert werden. Dies kann über die "
+#~ "Schaltfläche 'Aktualisiere Datenbank' ausgeführt werden.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> Wenn keine Einstellung zum Covernamen angegeben sind, "
+#~ "wird Cantata den voreingestellten Namen <code>cover</code> nehmen.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>Hinweis:</b> MPD spielt normal nur Stücke welche in seinem "
+#~ "konfigurierten Musikordner sich befinden. Cantata besitzt einen einfachen "
+#~ "HTTP-Server welcher Stücke direkt zu MPD senden kann. Dies funktioniert "
+#~ "nur, wenn Cantata in gestartet ist.<br/><br/>\n"
+#~ "<b>Hinweis:</b> Wenn Sie 'Local loopback' für die 'Netzwerkkarte', "
+#~ "eingestellt haben <b>muss</b> sich MPD auf dem gleichen Computer befinden."
+#~ "</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "Suche in <b>allen</b> Stücken?<br><br><i>Hinweis: Alle Stücke besitzen "
+#~ "einen ReplayGain-Tag. </i>"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "Fehler beim Erstellen von <b>%1</b>."
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "Stream existiert bereits.<br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "Der Stream mit dem Namen <b>%1</b> existiert bereits."
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "Erneutes Laden <b>%1</b> der Streams?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "Wollen Sie wirklich das Lesezeichen <b>%1</b> entfernen?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "Wollen Sie wirklich alle <b>%1</b> Lesezeichen entfernen?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "Wollen Sie wirklich <b>%1</b> entfernen?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr ""
+#~ "Eine Kategorie mit Namen <b>%1</b>existiert bereits.<br/> Überschreiben?"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "Ersten Buchstaben von 'Title', 'Artist', 'Album artist', and 'Album' in "
+#~ "Großbuchstaben von <b>allen</b> Stücken?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "Quelldatei existiert nicht.<br/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "Zieldateiname existiert bereits.<br/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "Fehler beim Erstellen des Zielordners<br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "Fehler beim Umbenennen %1 zu %2"
+
#~ msgid "&Lyrics"
#~ msgstr "&Texte"
@@ -7123,9 +7698,6 @@ msgstr ""
#~ msgid " seconds"
#~ msgstr "Sekunden"
-#~ msgid "Devices:"
-#~ msgstr "Geräte:"
-
#~ msgid "Stopping Playback"
#~ msgstr "Stoppe Wiedergabe"
@@ -7168,9 +7740,6 @@ msgstr ""
#~ msgid "Disc %1"
#~ msgstr "Disc %1"
-#~ msgid "Are you sure you wish to forget '%1'?"
-#~ msgstr "Wollen Sie wirklich '%1' vergessen?"
-
#~ msgid "Biography"
#~ msgstr "Biographie"
@@ -7262,9 +7831,6 @@ msgstr ""
#~ msgid "Online Music"
#~ msgstr "Onlinemusik"
-#~ msgid "Are you sure you wish to remove '%1'?"
-#~ msgstr "Wollen Sie wirklich '%1' entfernen?"
-
#~ msgid "Are you sure you wish to unload '%1'?"
#~ msgstr "Wollen Sie wirklich '%1' entfernen?"
diff --git a/po/en_GB.po b/po/en_GB.po
index c93cd77..4edaf5b 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: 2013-07-20 19:42+0100\n"
"Last-Translator: Craig Drummond <craig.p.drummond at gmail.com>\n"
"Language-Team: British English <craig.p.drummond at gmail.com>\n"
@@ -20,10 +20,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr ""
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr ""
@@ -34,32 +34,33 @@ msgstr ""
msgid "Tracks"
msgstr ""
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr ""
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr ""
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr ""
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr ""
@@ -67,28 +68,28 @@ msgstr ""
msgid "Lyrics Providers"
msgstr ""
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr ""
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr ""
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr ""
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr ""
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr ""
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr ""
@@ -111,16 +112,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr ""
@@ -128,17 +129,17 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr ""
@@ -154,37 +155,38 @@ msgstr ""
msgid "Song Information"
msgstr ""
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr ""
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr ""
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr ""
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr ""
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr ""
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr ""
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
+#: context/songview.cpp:124
+msgid "Metadata"
msgstr ""
#: context/songview.cpp:136
@@ -207,14 +209,14 @@ msgstr ""
msgid "Refresh Track Information"
msgstr ""
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr ""
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr ""
@@ -227,7 +229,7 @@ msgid ""
msgstr ""
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr ""
@@ -259,39 +261,39 @@ msgstr ""
msgid "Delete File"
msgstr ""
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr ""
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr ""
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr ""
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr ""
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr ""
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr ""
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr ""
@@ -303,102 +305,119 @@ msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr ""
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr ""
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr ""
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr ""
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr ""
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr ""
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr ""
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr ""
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr ""
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr ""
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr ""
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr ""
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr ""
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr ""
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr ""
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr ""
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr ""
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr ""
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr ""
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr ""
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr ""
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr ""
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr ""
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr ""
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr ""
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr ""
@@ -446,16 +465,16 @@ msgstr ""
msgid "Songs To Be Copied"
msgstr ""
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr ""
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr ""
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -464,318 +483,325 @@ msgid ""
"refresh Mopidy's database, and restart Cantata for any changes to be active."
msgstr ""
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr ""
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr ""
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr ""
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr ""
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr ""
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr ""
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr ""
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr ""
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr ""
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr ""
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr ""
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr ""
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr ""
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr ""
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr ""
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr ""
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr ""
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr ""
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr ""
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr ""
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr ""
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
msgstr ""
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr ""
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr ""
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr ""
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr ""
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr ""
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr ""
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
msgstr ""
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr ""
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr ""
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr ""
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr ""
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr ""
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr ""
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr ""
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr ""
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr ""
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr ""
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr ""
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr ""
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr ""
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr ""
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr ""
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr ""
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr ""
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr ""
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr ""
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr ""
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Capitalise"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr ""
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr ""
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr ""
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
msgstr ""
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr ""
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-"Capitalise the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalise the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr ""
@@ -823,8 +849,8 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr ""
@@ -930,70 +956,76 @@ msgstr ""
msgid "Forget Device"
msgstr ""
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr ""
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr ""
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr ""
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr ""
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr ""
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr ""
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr ""
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
msgstr ""
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr ""
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr ""
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
msgstr ""
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
msgstr ""
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr ""
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
msgstr ""
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr ""
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr ""
@@ -1067,7 +1099,7 @@ msgid ""
"anything above <b>205kb/s</b> is probably overkill."
msgstr ""
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr ""
@@ -1149,7 +1181,7 @@ msgid ""
"FLAC."
msgstr ""
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr ""
@@ -1252,63 +1284,62 @@ msgstr ""
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
msgstr ""
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr ""
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr ""
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr ""
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr ""
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr ""
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr ""
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr ""
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr ""
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr ""
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr ""
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr ""
@@ -1316,7 +1347,7 @@ msgstr ""
msgid "%1 (Disc %2)"
msgstr ""
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr ""
@@ -1324,14 +1355,15 @@ msgstr ""
msgid "Connection"
msgstr ""
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr ""
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
#: devices/remotedevicepropertieswidget.cpp:52
@@ -1409,20 +1441,20 @@ msgstr ""
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr ""
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr ""
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr ""
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr ""
@@ -1466,7 +1498,7 @@ msgstr ""
msgid "Failed to save %1."
msgstr ""
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr ""
@@ -1498,66 +1530,70 @@ msgstr ""
msgid "Unknown method called."
msgstr ""
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr ""
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr ""
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr ""
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
msgstr ""
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr ""
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr ""
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr ""
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "Dynamiser has been terminated."
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr ""
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr ""
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr ""
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr ""
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Failed to control dynamiser state. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr ""
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1580,24 +1616,25 @@ msgstr ""
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr ""
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr ""
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr ""
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1627,61 +1664,68 @@ msgstr ""
msgid "Dynamic Rules"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr ""
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr ""
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr ""
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1690,67 +1734,67 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr ""
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr ""
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr ""
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr ""
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr ""
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr ""
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr ""
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr ""
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr ""
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr ""
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr ""
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr ""
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr ""
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr ""
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
msgstr ""
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1759,7 +1803,7 @@ msgid ""
"%2 x %3 (%4)"
msgstr ""
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1768,67 +1812,68 @@ msgid ""
"%2 x %3"
msgstr ""
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr ""
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr ""
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr ""
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr ""
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr ""
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr ""
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr ""
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr ""
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr ""
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr ""
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr ""
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr ""
@@ -1840,30 +1885,33 @@ msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr ""
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr ""
@@ -1879,484 +1927,439 @@ msgstr ""
msgid "Connection Failed"
msgstr ""
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr ""
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr ""
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr ""
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr ""
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr ""
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr ""
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr ""
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr ""
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr ""
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr ""
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr ""
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr ""
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr ""
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr ""
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
msgstr ""
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr ""
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr ""
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr ""
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr ""
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr ""
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr ""
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr ""
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr ""
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
msgstr ""
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr ""
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr ""
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr ""
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr ""
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr ""
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr ""
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr ""
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr ""
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr ""
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr ""
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr ""
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr ""
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr ""
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr ""
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr ""
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr ""
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr ""
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr ""
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
msgstr ""
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr ""
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr ""
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr ""
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr ""
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr ""
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr ""
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr ""
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr ""
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr ""
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr ""
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr ""
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr ""
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr ""
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr ""
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr ""
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr ""
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr ""
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr ""
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr ""
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr ""
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr ""
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr ""
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr ""
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr ""
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr ""
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
msgstr ""
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr ""
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
msgstr ""
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr ""
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr ""
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr ""
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr ""
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr ""
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr ""
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr ""
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr ""
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr ""
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr ""
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr ""
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr ""
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr ""
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr ""
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr ""
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr ""
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr ""
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr ""
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr ""
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr ""
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr ""
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr ""
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr ""
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr ""
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2364,44 +2367,56 @@ msgid ""
"html\">GPLv3</a>"
msgstr ""
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
msgstr ""
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
"tv</a>"
msgstr ""
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
"\">Wikipedia</a> and <a href=\"http://www.last.fm\">Last.fm</a>"
msgstr ""
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
msgstr ""
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
+msgstr ""
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr ""
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
msgstr ""
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
msgstr ""
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr ""
+
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2410,7 +2425,7 @@ msgid ""
"tr><tr><td align=\"right\">Tags: </td><td>%7</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2419,105 +2434,124 @@ msgid ""
"\"right\">Updated: </td><td>%5</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr ""
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr ""
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr ""
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr ""
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr ""
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr ""
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr ""
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr ""
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr ""
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-"<b>%1</b> is used to store favourite streams, please choose another name."
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr ""
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr ""
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr ""
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr ""
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
msgstr ""
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr ""
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
msgstr ""
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
+"li></ul>"
msgstr ""
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr ""
@@ -2525,33 +2559,37 @@ msgstr ""
msgid "Remove Duplicates"
msgstr ""
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr ""
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr ""
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr ""
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr ""
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr ""
@@ -2615,113 +2653,117 @@ msgid_plural "%1 Updates available"
msgstr[0] ""
msgstr[1] ""
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr ""
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr ""
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr ""
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr ""
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr ""
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr ""
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr ""
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr ""
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr ""
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr ""
@@ -2729,387 +2771,376 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr ""
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr ""
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr ""
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr ""
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr ""
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr ""
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr ""
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr ""
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr ""
+
+#: gui/serversettings.cpp:240
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:241
+msgid ""
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
+msgstr ""
+
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr ""
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
msgstr ""
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr ""
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr ""
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr ""
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr ""
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr ""
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr ""
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr ""
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr ""
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr ""
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr ""
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr ""
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr ""
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr ""
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr ""
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr ""
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr ""
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr ""
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr ""
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr ""
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr ""
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr ""
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr ""
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Organise Files"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr ""
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
msgstr ""
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr ""
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr ""
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr ""
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr ""
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr ""
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr ""
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr ""
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr ""
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr ""
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr ""
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr ""
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr ""
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr ""
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr ""
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr ""
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr ""
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr ""
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr ""
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr ""
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr ""
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr ""
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr ""
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr ""
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr ""
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr ""
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr ""
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr ""
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr ""
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr ""
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr ""
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr ""
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr ""
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr ""
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr ""
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr ""
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr ""
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr ""
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr ""
@@ -3117,6 +3148,10 @@ msgstr ""
msgid "Disc"
msgstr ""
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr ""
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr ""
@@ -3139,111 +3174,107 @@ msgstr ""
msgid "Album Artist"
msgstr ""
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr ""
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr ""
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr ""
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr ""
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr ""
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr ""
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr ""
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Favourites"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr ""
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Add Stream To Favourites"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr ""
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr ""
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr ""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr ""
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr ""
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr ""
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr ""
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr ""
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr ""
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
msgstr ""
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr ""
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr ""
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr ""
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr ""
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr ""
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
@@ -3251,15 +3282,11 @@ msgstr ""
msgid "Personal"
msgstr ""
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr ""
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr ""
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3270,12 +3297,12 @@ msgid ""
"%3"
msgstr ""
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr ""
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr ""
@@ -3308,19 +3335,19 @@ msgstr ""
msgid "Streaming format:"
msgstr ""
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr ""
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr ""
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr ""
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr ""
@@ -3330,85 +3357,85 @@ msgstr ""
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr ""
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr ""
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr ""
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr ""
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr ""
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr ""
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr ""
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr ""
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr ""
@@ -3424,189 +3451,193 @@ msgstr ""
msgid "Delete Downloaded Podcast Episodes"
msgstr ""
-#: online/onlineservicespage.cpp:299
-msgctxt "Search ServiceName:"
-msgid "Search %1:"
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
msgstr ""
-#: online/onlineservicespage.cpp:437
-msgid "Re-download music listing for %1?"
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
msgstr ""
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
-msgid "Re-download"
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
msgstr ""
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
msgstr ""
-#: online/onlineservicespage.cpp:544
-msgid "Refresh all podcast listings?"
+#: online/onlineservicespage.cpp:322
+msgctxt "Search ServiceName:"
+msgid "Search %1:"
+msgstr ""
+
+#: online/onlineservicespage.cpp:467
+msgid "Re-download music listing for %1?"
msgstr ""
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
+msgid "Re-download"
msgstr ""
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
+#: online/onlineservicespage.cpp:574
+msgid "Refresh all podcast listings?"
msgstr ""
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
+#: online/onlineservicespage.cpp:648
+msgid ""
+"Cancel podcast episode downloads (both current and any that are queued)?"
msgstr ""
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:685
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
+"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
msgstr ""
-#: online/onlineservicespage.cpp:699
-msgid ""
-"Do you wish to the delete downloaded files of the selected podcast episodes?"
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
msgstr ""
-#: online/podcastsearchdialog.cpp:253
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr ""
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr ""
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr ""
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr ""
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr ""
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr ""
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr ""
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr ""
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr ""
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr ""
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr ""
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
msgstr ""
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr ""
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr ""
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr ""
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr ""
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr ""
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr ""
@@ -3618,59 +3649,77 @@ msgstr ""
msgid "Download episodes to:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr ""
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr ""
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr ""
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr ""
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr ""
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr ""
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr ""
@@ -3682,61 +3731,61 @@ msgstr ""
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr ""
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr ""
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr ""
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr ""
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr ""
@@ -3761,7 +3810,7 @@ msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr ""
@@ -3789,8 +3838,8 @@ msgstr ""
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
#. i18n: file: context/othersettings.ui:213
@@ -3799,17 +3848,16 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr ""
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
msgstr ""
#. i18n: file: context/togglelist.ui:17
@@ -3867,21 +3915,20 @@ msgid "To copy:"
msgstr ""
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
msgstr ""
#. i18n: file: devices/albumdetails.ui:26
@@ -3892,13 +3939,13 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr ""
@@ -3963,170 +4010,169 @@ msgid "Never skip on read error"
msgstr ""
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4248,162 +4294,158 @@ msgid "The genre of the album."
msgstr ""
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
#. i18n: file: dynamic/dynamicpage.ui:26
@@ -4424,39 +4466,51 @@ msgstr ""
msgid "Edit"
msgstr ""
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr ""
@@ -4468,149 +4522,152 @@ msgstr ""
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr ""
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
msgstr ""
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr ""
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr ""
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr ""
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr ""
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4621,13 +4678,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4635,7 +4692,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4646,74 +4703,73 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -4721,56 +4777,52 @@ msgid ""
"folders.</p>"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
"etc."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -4781,258 +4833,295 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Minimise to notification area when closed"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5041,39 +5130,33 @@ msgid ""
"to 'Metal'."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5081,154 +5164,160 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr ""
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Stop playback on exit"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr ""
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr ""
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr ""
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5239,135 +5328,138 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr ""
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr ""
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
msgstr ""
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr ""
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr ""
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr ""
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5377,133 +5469,149 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr ""
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr ""
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
-msgstr ""
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr ""
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr ""
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr ""
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr ""
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr ""
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
+msgid ""
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr ""
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr ""
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr ""
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""
@@ -5554,7 +5662,7 @@ msgstr ""
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr ""
@@ -5564,8 +5672,8 @@ msgstr ""
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
#: replaygain/rgdialog.cpp:263
@@ -5588,17 +5696,17 @@ msgstr ""
msgid "Reading existing tags..."
msgstr ""
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr ""
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr ""
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr ""
@@ -5622,63 +5730,63 @@ msgstr ""
msgid "Original: %1"
msgstr ""
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr ""
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr ""
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr ""
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr ""
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr ""
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr ""
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr ""
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr ""
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr ""
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr ""
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr ""
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr ""
@@ -5690,29 +5798,29 @@ msgstr ""
msgid "%1: Love Current Track"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -5742,27 +5850,27 @@ msgstr ""
msgid "Logout"
msgstr ""
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr ""
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr ""
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Add to play queue, and save to favourites"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr ""
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr ""
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr ""
@@ -5807,39 +5915,39 @@ msgid "Installing/updating %1"
msgstr ""
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
+msgid "Failed to install '%1'"
msgstr ""
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
+msgid "Failed to download '%1'"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr ""
@@ -5855,192 +5963,195 @@ msgstr "Export Favourite Streams"
msgid "Add New Stream To Favorites"
msgstr "Add New Stream To Favourites"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr ""
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr ""
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr ""
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr ""
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr ""
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr ""
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr ""
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
msgstr ""
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
msgstr ""
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
msgstr ""
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr ""
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr ""
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Already in favourites"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
msgstr ""
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
msgstr ""
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
msgstr ""
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr ""
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
msgstr ""
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr ""
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "Added '%1'' to favourites"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr ""
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr ""
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr ""
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr ""
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr ""
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
msgstr ""
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr ""
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr ""
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr ""
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr ""
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr ""
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr ""
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr ""
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr ""
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr ""
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr ""
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr ""
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr ""
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr ""
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr ""
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr ""
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr ""
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr ""
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr ""
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr ""
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr ""
@@ -6052,14 +6163,32 @@ msgstr ""
msgid "Please enter password:"
msgstr ""
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr ""
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr ""
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr ""
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr ""
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr ""
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr ""
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr ""
@@ -6068,128 +6197,241 @@ msgstr ""
msgid "Select File"
msgstr ""
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr ""
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr ""
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr ""
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr ""
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr ""
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr ""
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr ""
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] ""
msgstr[1] ""
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr ""
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr ""
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr ""
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr ""
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr ""
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr ""
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
msgstr ""
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr ""
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr ""
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"Capitalise the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalise the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+"Capitalise the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr ""
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr ""
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr ""
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr ""
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr ""
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr ""
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr ""
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr ""
+
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
msgstr ""
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
msgstr ""
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
msgstr ""
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
msgstr ""
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr ""
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr ""
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr ""
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6204,7 +6446,7 @@ msgstr ""
msgid "All Genres"
msgstr ""
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr ""
@@ -6212,15 +6454,19 @@ msgstr ""
msgid "Menu"
msgstr ""
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr ""
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr ""
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr ""
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr ""
@@ -6234,17 +6480,20 @@ msgstr ""
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr ""
@@ -6380,6 +6629,25 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr ""
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "Capitalise the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "<b>%1</b> is used to store favourite streams, please choose another name."
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "Capitalise the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+
#~ msgid "Stop dynamizer on exit"
#~ msgstr "Stop dynamiser on exit"
diff --git a/po/es.po b/po/es.po
index 6d7fd4f..9dedf95 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: 2014-07-20 13:21+0200\n"
"Last-Translator: Omar Campagne <ocampagne at gmail.com>\n"
"Language-Team: Debian l10n Spanish <debian-l10n-spanish at lists.debian.org>\n"
@@ -21,10 +21,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "Actualizar información de álbum"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "Álbum"
@@ -35,32 +35,33 @@ msgstr "Álbum"
msgid "Tracks"
msgstr "Pistas"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "Actualizar información de artista"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "Artista"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "Álbumes"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Enlaces web"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "Artistas similares"
@@ -68,28 +69,28 @@ msgstr "Artistas similares"
msgid "Lyrics Providers"
msgstr "Proveedores de letras"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "Idiomas de Wikipedia"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "Otro"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "Restablecer espaciado"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "&Artista"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "Ál&bum"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr "&Pista"
@@ -119,16 +120,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "Título:"
@@ -136,17 +137,17 @@ msgstr "Título:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "Artista:"
@@ -162,38 +163,39 @@ msgstr "Seleccione los sitios web que utilizar para la búsqueda de letras."
msgid "Song Information"
msgstr "Información de canción"
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "Imágenes (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr "10px"
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr "%1px"
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "Letras"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "Información"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "Etiquetas"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr ""
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -215,14 +217,14 @@ msgstr "Eliminar fichero de letras"
msgid "Refresh Track Information"
msgstr "Actualizar información de pista"
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "Cancelar"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "Pista"
@@ -239,7 +241,7 @@ msgstr ""
"vez?"
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "Actualizar"
@@ -271,39 +273,39 @@ msgstr "¿Desea eliminar el fichero de letras?"
msgid "Delete File"
msgstr "Eliminar fichero"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr "Artista del álbum"
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr "Compositor"
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr "Letrista"
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr "Director"
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr "Remezclador"
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr "Subtítulo"
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr "Número de pista"
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr "Número de disco"
@@ -315,102 +317,119 @@ msgstr "Número de disco"
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "Género"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "Fecha"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr "Fecha original"
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr "Comentario"
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr "Derechos de autor"
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr "Etiqueta"
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr "Número de catálogo"
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr "Ordenar por títuo"
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr "Ordenar por artista"
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr "Ordenar por artista del álbum"
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr "Ordenar por álbum"
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr "Codificado por"
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "Codificador"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr "Mood"
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr "Medio"
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "Tasa de bits"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr "Frecuencia de muestreo"
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr "Canales"
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr "Hora de etiquetado"
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr "Intérprete (%1)"
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr ""
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr ""
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr ""
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr "Intérprete"
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "Año"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr ""
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "Obteniendo letras mediante %1"
@@ -460,16 +479,16 @@ msgstr "Cantata está reproduciendo una pista"
msgid "Songs To Be Copied"
msgstr "Canciones que copiar"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>NO VÁLIDO</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(Cuando hay diferencias)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -483,135 +502,130 @@ msgstr ""
"música local. Por ello, debe detener Cantata, actualizar manualmente la base "
"de datos de Mopidy, y reiniciar Cantata para activar los cambios."
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "Artistas:%1, Álbumes:%2, Canciones:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 libre"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "Biblioteca de música local"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "CD de audio"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-"No hay suficiente espacio en el dispositivo de destino.\n"
-"Las canciones seleccionadas ocupan %1, pero sólo hay %2 libre.\n"
-"Las canciones se tendrán que transcodificar a un tamaño de fichero menor "
-"para la copia."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"No hay suficiente espacio en el destino.\n"
-"Las canciones seleccionadas ocupan %1, pero sólo hay %2 libre."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "Copiar canciones"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "Eliminar canciones"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>El dispositivo de destino no está configurado.<br/>¿Desea continuar con "
-"las opciones predefinidas?</p>"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "Sin configuración"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "Utilizar valores predefinidos"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>El dispositivo de origen no está configurado.<br/>¿Desea continuar con "
-"las opciones predefinidas?</p>"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "¿Está seguro de que desea detener?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "Detener"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "El dispositivo se ha extraído."
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "El dispositivo no está conectado."
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "¿Está el dispositivo en uso?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "¿Ha cambiado el dispositivo?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "Eliminando directorios no utilizados"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "¿Desea calcular la ganancia de reproducción para pistas extraídas?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr "Ganancia de reproducción"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "Calcular"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "El nombre de fichero de destino ya existe."
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "La canción ya existe."
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "La canción no existe."
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
@@ -619,31 +633,31 @@ msgstr ""
"No se pudo crear el directorio de destino.<br/>Compruebe que tiene los "
"permisos necesarios."
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "¿El fichero fuente ya no existe?"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "Fallo al copiar."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "Fallo al eliminar."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "No conectado al dispositivo."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "El códec seleccionado no está disponible."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "Fallo al transcodificar."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
@@ -651,172 +665,164 @@ msgstr ""
"Fallo al crear el fichero temporal.<br/>(Necesario para transcodificar a "
"dispositivos MTP.)"
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "Fallo de lectura del fichero fuente."
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "Fallo de escritura al fichero de destino."
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "No hay espacio disponible en el dispositivo."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "Fallo al actualizar metadatos."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "Fallo al descargar la pista."
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "Fallo de bloqueo de dispositivo."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "Propiedades de la biblioteca de música local"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "Fallo"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "Omitir"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "Omitir automáticamente"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "Reintentar"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "Álbum:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "Pista:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "Fichero fuente:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "Fichero destino:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "Fichero:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "Calculando..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (Estimación)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "Tiempo restante:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "Guardando almacén"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "Arreglo para «Varios Artistas»"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "Deshacer arreglo para «Varios Artistas»"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Aplicar mayúsculas"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "Ajustar números de pista"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "Herramientas"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "¿Desea aplicar el arreglo para «Various Artists»?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>Esto define «Artista del álbum» y «Artista» con el valor de «Varios "
-"Artistas», y «Título» con el de «Artista de pista - Título de pista»</i>"
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "Deshacer arreglo para «Varios Artistas»"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr ""
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>Si «Artista del álbum» es igual a «Artista» y «Título» tiene el formato "
-"«Artista de pista - Título de pista», el valor para «Artista» se tomará de "
-"«Título», y «Título» se definirá solo con el título de pista. Por ejemplo:"
-"<br/><br/>si «Título» es «Wibble - Wobble», entonces «Artista» se define "
-"como «Wibble», y «Título» se define como «Wobble»</i>"
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "Revertir"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-"Poner en mayúscula la primera letra de «Título», «Artista», «Artista del "
-"álbum», y «Álbum»"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "Ajustar números de pista según:"
@@ -866,8 +872,8 @@ msgstr ""
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "Título"
@@ -988,75 +994,76 @@ msgstr "Sincronizar"
msgid "Forget Device"
msgstr "Olvidar dispositivo"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "Añadir dispositivo"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "¿Desea consultar los detalles de álbum y pista?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "Actualizar"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "Mediante CDDB"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "Mediante MusicBrainz"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr ""
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr ""
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
msgstr ""
-"<p>¿Qué tipo de actualización desea realizar?<ul><li>Parcial - Solo se "
-"analizan canciones nuevas <i>(rápido)</i></li><li>Completa - Se analizan "
-"todas las canciones <i>(lento)</i></li></ul></p>"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "Parcial"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "Completa"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"¿Desea eliminar las canciones seleccionadas?\n"
-"Esta acción no se puede deshacer."
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "¿Desea olvidar <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr ""
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "¿Desea expulsar el CD de audio <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr ""
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "Expulsar"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "¿Está seguro de que quiere desconectar <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr ""
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "Desconectar"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "Primero cierre otras ventanas de diálogo."
@@ -1095,8 +1102,8 @@ msgid ""
msgstr ""
"La tasa de bits es la medida de la cantidad de datos utilizados para "
"representar un segundo de la pista de audio.<br>El codificador <b>AAC</b> "
-"utilizado por Cantata permite una <a href=http://en.wikipedia.org/wiki/Varia"
-"ble_bitrate#Advantages_and_disadvantages_of_VBR>tasa de bits variable "
+"utilizado por Cantata permite una <a href=http://en.wikipedia.org/wiki/"
+"Variable_bitrate#Advantages_and_disadvantages_of_VBR>tasa de bits variable "
"(VBR)</a> ; esto es, la tasa de bits varía a lo largo de la pista en base al "
"contenido de audio. Los intervalos de datos más complejos se codifican con "
"una tasa de bits más elevada que los intervalos más sencillos; este enfoque "
@@ -1105,8 +1112,8 @@ msgstr ""
"la tasa de bits en esta barra deslizante es una estimación de la <a "
"href=http://www.ffmpeg.org/faq.html#SEC21>tasa de bits media</a> de la pista "
"codificada.<br><b>150kb/s</b> es una buena elección para la reproducción de "
-"música con un dispositivo portátil.<br/>Algo inferior a <b>120kb/s</b> "
-"puede ser insatisfactorio para la música y algo superior a <b>200kb/s</b> es "
+"música con un dispositivo portátil.<br/>Algo inferior a <b>120kb/s</b> puede "
+"ser insatisfactorio para la música y algo superior a <b>200kb/s</b> es "
"posiblemente demasiado."
#: devices/encoders.cpp:101 devices/encoders.cpp:141
@@ -1157,20 +1164,20 @@ msgid ""
msgstr ""
"La tasa de bits es la medida de la cantidad de datos utilizados para "
"representar un segundo de la pista de audio.<br>El codificador <b>MP3</b> "
-"utilizado por Cantata permite una <a "
-"href=http://en.wikipedia.org/wiki/MP3#VBR>tasa de bits variable (VBR)</a> ; "
-"esto es, la tasa de bits varía a lo largo de la pista en base al contenido "
-"de audio. Los intervalos de datos más complejos se codifican con una tasa de "
-"bits más elevada que los intervalos más sencillos; este enfoque ofrece una "
-"calidad general superior y un fichero más pequeño que el generado con una "
-"tasa de bits constante en toda la pista.<br>Por ello, la medida de la tasa "
-"de bits en esta barra deslizante es una estimación de la tasa de bits media "
-"de la pista codificada.<br><b>160kb/s</b> es una buena elección para la "
-"reproducción de música con un dispositivo portátil.<br/>Algo inferior a "
-"<b>120kb/s</b> puede ser insatisfactorio para la música y algo superior a "
-"<b>205kb/s</b> es posiblemente demasiado."
+"utilizado por Cantata permite una <a href=http://en.wikipedia.org/wiki/"
+"MP3#VBR>tasa de bits variable (VBR)</a> ; esto es, la tasa de bits varía a "
+"lo largo de la pista en base al contenido de audio. Los intervalos de datos "
+"más complejos se codifican con una tasa de bits más elevada que los "
+"intervalos más sencillos; este enfoque ofrece una calidad general superior y "
+"un fichero más pequeño que el generado con una tasa de bits constante en "
+"toda la pista.<br>Por ello, la medida de la tasa de bits en esta barra "
+"deslizante es una estimación de la tasa de bits media de la pista codificada."
+"<br><b>160kb/s</b> es una buena elección para la reproducción de música con "
+"un dispositivo portátil.<br/>Algo inferior a <b>120kb/s</b> puede ser "
+"insatisfactorio para la música y algo superior a <b>205kb/s</b> es "
+"posiblemente demasiado."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1262,19 +1269,18 @@ msgid ""
msgstr ""
"La tasa de bits es la medida de la cantidad de datos utilizados para "
"representar un segundo de la pista de audio.<br>El codificador <b>Opus</b> "
-"utilizado por Cantata permite una <a "
-"href=http://es.wikipedia.org/wiki/Tasa_de_bits_variable>tasa de bits "
-"variable (VBR)</a> ; esto es, la tasa de bits varía a lo largo de la pista "
-"en base al contenido de audio. Los intervalos de datos más complejos se "
-"codifican con una tasa de bits más elevada que los intervalos más sencillos; "
-"este enfoque ofrece una calidad general superior y un fichero más pequeño "
-"que el generado con una tasa de bits constante en toda la pista.<br>Por "
-"ello, la medida de la tasa de bits en esta barra deslizante es una "
-"estimación de la tasa de bits media de la pista "
-"codificada.<br><b>128kb/s</b> es una buena elección para la reproducción de "
-"música con un dispositivo portátil.<br/>Algo inferior a <b>100kb/s</b> puede "
-"ser insatisfactorio para la música y algo superior a <b>256kb/s</b> es "
-"posiblemente demasiado."
+"utilizado por Cantata permite una <a href=http://es.wikipedia.org/wiki/"
+"Tasa_de_bits_variable>tasa de bits variable (VBR)</a> ; esto es, la tasa de "
+"bits varía a lo largo de la pista en base al contenido de audio. Los "
+"intervalos de datos más complejos se codifican con una tasa de bits más "
+"elevada que los intervalos más sencillos; este enfoque ofrece una calidad "
+"general superior y un fichero más pequeño que el generado con una tasa de "
+"bits constante en toda la pista.<br>Por ello, la medida de la tasa de bits "
+"en esta barra deslizante es una estimación de la tasa de bits media de la "
+"pista codificada.<br><b>128kb/s</b> es una buena elección para la "
+"reproducción de música con un dispositivo portátil.<br/>Algo inferior a "
+"<b>100kb/s</b> puede ser insatisfactorio para la música y algo superior a "
+"<b>256kb/s</b> es posiblemente demasiado."
#: devices/encoders.cpp:242
msgid "Apple Lossless"
@@ -1295,7 +1301,7 @@ msgstr ""
"de datos.<br>Solo se recomienda para reproductores de música Apple y "
"reproductores no compatibles con FLAC."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1429,67 +1435,64 @@ msgstr "Dance"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-"<p>Las siguientes variables se sustituirán por su significado "
-"correspondiente para cada nombre de pista.</p>"
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
msgstr ""
-"<tr><th><em>Variable</em></th><th><em>Botón</em></th><th><em>Descripción</em"
-"></th></tr>"
+"<tr><th><em>Variable</em></th><th><em>Botón</em></th><th><em>Descripción</"
+"em></th></tr>"
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "Actualizando..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "Leyendo caché"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "Conectando al dispositivo..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "No se han encontrado dispositivos"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "Conectado al dispositivo"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "Desconectado del dispositivo"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "Actualizando directorios..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "Actualizando ficheros..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "Actualizando pistas..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "Sin conexión"
@@ -1497,7 +1500,7 @@ msgstr "Sin conexión"
msgid "%1 (Disc %2)"
msgstr "%1 (Disco %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "No se han encontrado coincidencias en MusicBrainz"
@@ -1505,17 +1508,16 @@ msgstr "No se han encontrado coincidencias en MusicBrainz"
msgid "Connection"
msgstr "Conexión"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "Biblioteca de música"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"Ya hay un dispositivo llamado «%1»\n"
-"Seleccione un nombre distinto"
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1596,20 +1598,20 @@ msgstr "Capacidad desconocida"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "Buscar"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "Seleccionar elementos"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "Deseleecionar elementos"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "Nada seleccionado"
@@ -1653,7 +1655,7 @@ msgstr "Nombre de fichero inválido. (%1)"
msgid "Failed to save %1."
msgstr "Fallo al guardar %1."
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "Fallo al eliminar el fichero de normas. (%1)"
@@ -1685,20 +1687,24 @@ msgstr "Argumentos incorrectos introducidos."
msgid "Unknown method called."
msgstr "Invocado método desconocido."
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "Error desconocido"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "Iniciar lista de reproducción dinámica"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "Detener modo dinámico"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
@@ -1706,47 +1712,47 @@ msgstr ""
"Es necesario instalar Perl en su sistema para el funcionamiento del modo "
"dinámico de Cantata."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "No se ha podido detectar el fichero de normas - %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "No se ha podido eliminar el fichero anterior de normas - %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "No se ha podido instalar el fichero de normas - %1 -> %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "El dinamizador se ha interrumpido."
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "Guardando norma"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "Eliminando norma"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "Esperando la respuesta de la orden anterior. (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr "Fallo al guardar %1. (%2)"
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Fallo de control del estado del dinamizador. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "Fallo al definir la lista de normas dinámicas. (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1769,26 +1775,25 @@ msgstr "Eliminar normas dinámicas"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"¿Desea eliminar las normas seleccionadas?\n"
-"Esta acción no se puede deshacer."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "Norma dinámica"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "Añadir"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr "<i><b>ERROR</b>: 'Desde el año' debe ser menor que 'Al año'</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1820,77 +1825,68 @@ msgstr " (Exacto)"
msgid "Dynamic Rules"
msgstr "Normas dinámicas"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-"<p>Cantata analizará la biblioteca utilizando todas las normas enumeradas. "
-"La lista de normas <i>Incluir</i> sirve para generar un conjunto de "
-"canciones que utilizar. La lista de normas <i>Excluir</i> sirve para generar "
-"un conjunto de canciones que no se utilizarán. Si no hay normas bajo "
-"<i>Incluir</i>, Cantata supone que todas las canciones (a excepción de las "
-"normas <i>Excluir</i>) se pueden utilizar. <br/>Por ejemplo, para que "
-"Cantata busque \"Canciones de rock por Wibble O canciones de Varios Artistas"
-"\", necesita lo siguiente: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> Para que Cantata busque "
-"\"Canciones por Wibble pero no del álbum Abc\", necesita lo siguiente: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></"
-"ul>Después de generar el conjunto de canciones que utilizar, Cantata "
-"seleccionará canciones de forma aleatoria para mantener 10 canciones en la "
-"lista de reproducción.</p>"
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "Fallo al guardar %1"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-"Ya existe un conjunto de normas llamado «%1».\n"
-"¿Desea sobrescribir?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "Sobreescribir normas"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "Guardando %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "Eliminando…"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "Nombre"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "Recuento de elementos"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "Espacio utilizado"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr "Espacio total utilizado: %1"
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1905,67 +1901,67 @@ msgstr ""
"para no guardar elementos en ese sitio). A continuación tiene un resumen del "
"uso actual del almacén de Cantata."
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "Carátulas"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "Carátulas escaladas"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "Fondos"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "Información de artista"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "Información de albúm"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr "Información de pista"
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr "Listados de flujos"
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "Jamendo"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "Magnatune"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr "Directorios de podcast"
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr "Registrar pistas escuchadas"
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "Eliminar todo"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "¿Desea eliminar los '%1' elementos?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "Eliminar los elementos de la caché"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>¿Desea eliminar todos los elementos a continuación?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr ""
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1976,7 +1972,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1987,73 +1983,71 @@ msgstr ""
"%1\n"
"%2 x %3"
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "Carátula actual"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr "Almacen de carátulas"
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "Imagen"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "Descargando..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "Imagen (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
-"Ya existe una imagen para este artista, y el fichero no permite la "
-"escritura."
+"Ya existe una imagen para este artista, y el fichero no permite la escritura."
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
"Ya existe una carátula para este artista, y el fichero no permite la "
"escritura."
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr "'%1' Imagen de artista"
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr "'%1 - %2' Carátula de álbum"
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-"Fallo al definir al carátula.\n"
-"No se pudo descargar a un fichero temporal."
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "Fallo al descargar la imagen."
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "Cargar carátula local"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "El fichero ya está listado."
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "Fallo al leer la imagen"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "Mostrar"
@@ -2065,36 +2059,33 @@ msgstr "Mostrar"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "Eliminar"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-"Fallo al definir la carátula.\n"
-"No se ha podido realizar una copia."
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-"Fallo al definir la carátula.\n"
-"No ha podido realizar una copia de seguridad del original."
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-"Fallo al definir la carátula.\n"
-"No se pudo copiar el fichero a «%1».!"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "Buscando..."
@@ -2110,372 +2101,319 @@ msgstr "Conexión realizada"
msgid "Connection Failed"
msgstr "Fallo de conexión"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr "Álbum, Artista, Año"
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr "Álbum, Año, Artista"
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr "Artista, Álbum, Año"
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr "Artista, Año, Álbum"
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr "Año, Álbum, Artista"
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr "Año, Artista, Álbum"
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "Ninguno"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "Pequeña"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "Mediana"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "Grande"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "Extra grande"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr "Árbol básico (sin iconos)"
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "Árbol sencillo"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "Árbol con detalles"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "Álbumes agrupados"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "Lista"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "Icono/Lista"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr ""
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "Tabla"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "Reproducir lista de reproducción"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "Artistas"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "Directorios"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "Listas de reproducción"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "Listas de reproducción dinámicas"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "Flujos (p.ej. emisoras de radio)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr "Servicios online - Jamendo, Maganatune, SoundCloud, y podcasts"
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr "Dispositivos - UMS, MTP (p.ej. Android), y CDs de audio"
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr "Búsqueda (mediante MPD)"
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr "Info - Información de pista actual (artista, álbum y letras)"
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "Estilo:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Grande"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Pequeña"
+
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr "Barra de pestañas"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "Izquierda"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "Derecha"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "Arriba"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "Abajo"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr ""
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "Predefinido por el sistema"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "Cantata"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "Un cliente de MPD para KDE"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "© 2011-2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "Desarrollador"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "Mejora de la interfaz"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "Autor de QtMPC"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
msgstr ""
-"Fondos de vista contextual (considere enviar su fan-art de música a "
-"fanart.tv)"
+"Fondos de vista contextual (considere enviar su fan-art de música a fanart."
+"tv)"
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "Wikipedia"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "Metadatos de vista contextual"
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "URL a abrir"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "Configurar Cantata..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr "Preferencias"
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "Cerrar"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "Acerca de Cantata..."
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "Mostrar ventana"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "Información del servidor..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "Actualizar base de datos"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "Conectar"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "Colección"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "Salidas"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "Detener después de la pista"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "Añadir a lista de reproducción guardada"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "Recortar"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "Añadir URL de flujo"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "Vaciar"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr "Centrar en pista actual"
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "Interfaz expandida"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "Mostrar información de la canción actual"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "Pantalla completa"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "Aleatorio"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "Repetir"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "Pistas únicas"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2483,11 +2421,11 @@ msgstr ""
"Cuando se activa «Pistas únicas», la reproducción se detiene tras la canción "
"actual, o se repite si se activa el modo de repetición."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "Eliminar tras reproducir"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
@@ -2495,107 +2433,115 @@ msgstr ""
"Cuando se activa esta opción, se elimina la canción de la cola de "
"reproducción tras su reproducción"
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr ""
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "Definir prioridad"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "Reproducir flujo"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "Ubicar en biblioteca"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "Editar etiquetas de canciones"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "Expandir todo"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "Contraer todo"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr "Eliminar todas las canciones"
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr "Eliminar estado \"Nuevo\" de artistas y álbumes"
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "Dinámico"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "Flujos"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "Conectado"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "Dispositivos"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "Información"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr "Mostrar barra de menú"
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr "&Música"
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "&Editar"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr "&Ver"
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr "&Cola"
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "A&justes"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "A&yuda"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
"No se ha detectado ninguna canción que coincida con las normas de lista "
"dinámica de reproducción."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "Conectando a %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "¿Desea actualizar la base de datos de MPD?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "Acerca de Cantata"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2603,27 +2549,27 @@ msgid ""
"html\">GPLv3</a>"
msgstr ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
-"Drummond<br/>Publicado bajo la licencia <a "
-"href=\"http://www.gnu.org/licenses/gpl.html\">GPLv3</a>"
+"Drummond<br/>Publicado bajo la licencia <a href=\"http://www.gnu.org/"
+"licenses/gpl.html\">GPLv3</a>"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
msgstr ""
-"Basado en <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 Los "
-"autores de QtMPC<br/>"
+"Basado en <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
+"Los autores de QtMPC<br/>"
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
"tv</a>"
msgstr ""
-"Fondos de vista contextual gracias a <a "
-"href=\"http://www.fanart.tv\">FanArt.tv</a>"
+"Fondos de vista contextual gracias a <a href=\"http://www.fanart.tv\">FanArt."
+"tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2632,7 +2578,7 @@ msgstr ""
"Metadatos de vista contextual gracias a <a href=\"http://www.wikipedia.org"
"\">Wikipedia</a> y <a href=\"http://www.last.fm\">Last.fm</a>"
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2640,21 +2586,30 @@ msgstr ""
"Considere enviar su propio fan-art de música a <a href=\"http://www.fanart.tv"
"\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
+msgstr ""
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr ""
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr ""
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
msgstr ""
-"Hay podcasts en descarga en este momento.\n"
-"\n"
-"Si se cierra ahora se cancelarán todas las descargas."
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
-msgstr "Cancelar descargas y cerrar"
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Información del servidor"
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2662,14 +2617,14 @@ msgid ""
"%5</td></tr><tr><td align=\"right\">Handlers: </td><td>%6</td></"
"tr><tr><td align=\"right\">Tags: </td><td>%7</td></tr>"
msgstr ""
-"<tr><td colspan=\"2\"><b>Servidor</b></td></tr><tr><td "
-"align=\"right\">Protocolo: </td><td>%1.%2.%3</td></tr><tr><td "
-"align=\"right\">Tiempo de actividad: </td><td>%4</td></tr><tr><td "
-"align=\"right\">Reproduciendo: </td><td>%5</td></tr><tr><td "
-"align=\"right\">Manipuladores: </td><td>%6</td></tr><tr><td "
-"align=\"right\">Etiquetas: </td><td>%7</td></tr>"
+"<tr><td colspan=\"2\"><b>Servidor</b></td></tr><tr><td align=\"right"
+"\">Protocolo: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Tiempo "
+"de actividad: </td><td>%4</td></tr><tr><td align=\"right"
+"\">Reproduciendo: </td><td>%5</td></tr><tr><td align=\"right"
+"\">Manipuladores: </td><td>%6</td></tr><tr><td align=\"right"
+"\">Etiquetas: </td><td>%7</td></tr>"
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2677,89 +2632,102 @@ msgid ""
"tr><tr><td align=\"right\">Duration: </td><td>%4</td></tr><tr><td align="
"\"right\">Updated: </td><td>%5</td></tr>"
msgstr ""
-"<tr><td colspan=\"2\"><b>Base de datos</b></td></tr><tr><td "
-"align=\"right\">Artistas: </td><td>%1</td></tr><tr><td "
-"align=\"right\">Álbumes: </td><td>%2</td></tr><tr><td "
-"align=\"right\">Canciones: </td><td>%3</td></tr><tr><td "
-"align=\"right\">Duración: </td><td>%4</td></tr><tr><td "
+"<tr><td colspan=\"2\"><b>Base de datos</b></td></tr><tr><td align=\"right"
+"\">Artistas: </td><td>%1</td></tr><tr><td align=\"right\">Álbumes: "
+"</td><td>%2</td></tr><tr><td align=\"right\">Canciones: </td><td>%3</"
+"td></tr><tr><td align=\"right\">Duración: </td><td>%4</td></tr><tr><td "
"align=\"right\">Actualizado: </td><td>%5</td></tr>"
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "Información del servidor"
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "Cantata (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr "MPD ha informado del siguiente fallo: %1"
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr "Reproducción detenida"
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr "¿Desea eliminar todas las canciones de la cola de reproducción?"
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "Prioridad"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "Introduzca la prioridad (0...255):"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "Nombre de lista de reproducción"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "Introduzca un nombre para la lista de reproducción:"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-"<b>%1</b> se utiliza para descargar los flujos favoritos, seleccione otro "
-"nombre."
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-"Se ha detectado una lista de reproducción llamada <b>%1</b>.<br/> ¿Añadir a "
-"esa lista de reproducción?"
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "Lista de reproducción existente"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "URL de flujo"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr "Introduzca la URL de flujo"
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr "URL no válida o incompatible."
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr ""
-"Solo se pueden editar etiquetas de canciones dentro de la colección de "
-"música de MPD."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Ninguno"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "Automático"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
@@ -2767,9 +2735,9 @@ msgstr ""
"<i>Conectando a %1.</b>Las entradas a continuación afectan a la colección de "
"MPD conectada actualmente.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2777,31 +2745,21 @@ msgstr ""
"<i>No conectado.</b>Las entradas a continuación no se pueden modificar, ya "
"que Cantata no está conectado a MPD.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
-msgstr ""
-"<p>ReplayGain es una propuesta de estándar publicada en 2001 para normalizar "
-"el alto volumen percibido en formatos de audio de PC como MP3 y Ogg Vorbis. "
-"Funciona para pista/álbum, y ya es compatible con un número creciente de "
-"reproductores.</p><p>Se pueden utilizar los siguientes ajustes de ReplayGain:"
-"<ul><li><i>Ninguno</i> No se aplica ReplayGain.</li><li>Pista<i> El volumen "
-"se ajusta con las etiquetas ReplayGain de la pista</li><li><i>Álbum</i> El "
-"volumen se ajusta con las etiquetas ReplayGain del álbum.</"
-"li><li><i>Automático</i> El volumen se ajusta con las etiquetas ReplayGain "
-"si se selecciona reproducción aleatoria; de no ser así, se utilizarán las "
-"etiquetas del álbum.</li></ul></p>"
-
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+"li></ul>"
+msgstr ""
+
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "Renombrar"
@@ -2809,37 +2767,37 @@ msgstr "Renombrar"
msgid "Remove Duplicates"
msgstr "Eliminar duplicados"
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"¿Desea eliminar las listas de reproducción seleccionadas?\n"
-"No se puede deshacer esta acción."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "Eliminar listas de reproducción"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-"Se ha detectado una lista de reproducción llamada <b>%1</b><br/>. "
-"¿Sobrescribir?"
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "Sobrescribir la lista de reproducción"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "Renombrar lista de reproducción"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "Introduzca un nombre nuevo para la lista de reproducción:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr "No se puede añadir canciones desde '%1' a '%2'"
@@ -2903,113 +2861,117 @@ msgid_plural "%1 Updates available"
msgstr[0] "1 actualización disponible"
msgstr[1] "%1 actualizaciones disponibles"
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "Ajustes de collección"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "Reproducción"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "Opciones de reproducción"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "Ficheros"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "Configuración de fichero"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "Interfaz"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "Configuración de la interfaz"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr "Ajustes de flujos"
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr "Proveedores online"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "Contexto"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "Configuración de visualización de contexto"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr "Scrobbling"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr "Ajustes de scrobbling"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "Servidor HTTP"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "Configuración del servidor HTTP"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "Configuración de CD de audio"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "Proxy"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "Ajustes de proxy"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "Atajos de teclado"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "Configuración de atajos de teclado"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "Almacén"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "Elementos almacenados"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr ""
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "Configuración"
@@ -3017,60 +2979,64 @@ msgstr "Configuración"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr "Compositor:"
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr "Intérprete:"
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "Género:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr "Comentario:"
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "Fecha:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr ""
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr "Cualquiera:"
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "No se han encontrado pistas."
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
@@ -3078,336 +3044,313 @@ msgstr ""
"<i> Este directorio se utilizará para ubicar los ficheros de audio para la "
"transferencia desde y al dispositivo.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "Host:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr ""
+
+#: gui/serversettings.cpp:240
+msgid ""
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr ""
+
+#: gui/serversettings.cpp:241
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
msgstr ""
-"¿A qué tipo de colección quiere conectarse?<br/><ul><li> Estándar: la "
-"colección de música puede ser compartida, en otro sistema, o ya está "
-"configurada.</li><li>Básica: la colección de música no es compartida, y "
-"Cantata configurará y controlará la instancia de MPD.</li></ul>"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "Añadir colección"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "Estándar"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "Básico"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "¿Eliminar <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr ""
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "Eliminar"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "Colección nueva %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "Predefinido"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr "Teclas multimedia"
+#: gui/stdactions.cpp:43
+msgid "Previous Track"
+msgstr "Pista anterior"
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr "No utilizar teclas multimedia para controlar Cantata"
+#: gui/stdactions.cpp:44
+msgid "Next Track"
+msgstr "Pista siguiente"
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr "Utilizar teclas multimedia para controlar Cantata"
+#: gui/stdactions.cpp:45
+msgid "Play/Pause"
+msgstr "Reproducir/Pausa"
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-"Utilizar teclas multimedia, como definen los ajustes de escritorio, para "
-"controlar Cantata"
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-"Utilizar teclas multimedia, como definen los ajustes de GNOME/Unity, para "
-"controlar Cantata"
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "Configurar..."
-
-#: gui/stdactions.cpp:47
-msgid "Previous Track"
-msgstr "Pista anterior"
-
-#: gui/stdactions.cpp:48
-msgid "Next Track"
-msgstr "Pista siguiente"
+#: gui/stdactions.cpp:47
+msgid "Stop After Current Track"
+msgstr "Detener después de la pista actual"
#: gui/stdactions.cpp:49
-msgid "Play/Pause"
-msgstr "Reproducir/Pausa"
-
-#: gui/stdactions.cpp:51
-msgid "Stop After Current Track"
-msgstr "Detener después de la pista actual"
-
-#: gui/stdactions.cpp:53
msgid "Increase Volume"
msgstr "Subir volumen"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "Bajar volumen"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "Guardar como"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "Añadir a lista de reproducción"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr "Añadir álbumes en orden aleatorio"
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "Reemplazar lista de reproducción"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "Añadir con prioridad"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "Prioridad máxima (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "Prioridad alta (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "Prioridad media (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "Prioridad baja (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "Prioridad predefinida (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "Prioridad personalizada..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "Añadir a lista de reproducción"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Organizar ficheros"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "Editar etiquetas"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "Ganancia de reproducción"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr ""
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "Copiar canciones a dispositivo"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "Establecer imagen"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr "Buscar"
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "En reproducción"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr "Loopback local (%1)"
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr "Cableado (%1)"
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr "Inalámbrico (%1)"
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "Primera interfaz activa"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr ""
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr ""
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%1 por %2"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Hoja cue"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "Lista de reproducción"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "Configurar dispositivo"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "Actualizar dispositivo"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "Conecte el dispositivo"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "Desconecte el dispositivo"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "Editar detalles de CD"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "No hay dispositivos conectados"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "No ha iniciado una sesión"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "Sesión iniciada"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "Ninguna suscripción"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "No tiene ninguna suscripción activa"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "Sesión iniciada (finalización:%1)"
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "Sesión finalizada"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "Fichero de audio"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "Pistas únicas"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "Configurar servicio"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "Actualizar servicio"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "Añadir suscripción"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "Eliminar suscripción"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "Actualizar suscripción"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "Última búsqueda:%1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "No se ha cargado"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "Utilizar búsqueda para ubicar pistas"
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(Descargando: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr ""
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "Nueva lista de reproducción…"
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "Lista de reproducción inteligente"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "Duración"
@@ -3415,6 +3358,10 @@ msgstr "Duración"
msgid "Disc"
msgstr "Disco"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr ""
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr "Deshacer"
@@ -3437,86 +3384,82 @@ msgstr "Ordenar por"
msgid "Album Artist"
msgstr "Artista del álbum"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(Prioridad: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "Cargando…"
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "Favoritos"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr "Dirble"
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Favoritos"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "Categoría de favorito"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Añadir flujo a favoritos"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "Configuración de flujos"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "Desconocido"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "\"%1\""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "\"%1\" (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "Fallo de conexión a %1"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr "Fallo de conexión a %1 failed - compruebe los ajustes de proxy"
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "Fallo de conexión a %1 - contraseña incorrecta"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "Fallo al enviar la orden a %1: no conectado"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr ""
"Fallo al cargar. Compruebe que el usuario «mpd» tiene permisos de lectura."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
@@ -3524,27 +3467,27 @@ msgstr ""
"Fallo al cargar. MPD solo puede reproducir ficheros locales si se conecta a "
"través de un fichero socket local."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "Fallo al enviar la orden. Desconectado de %1"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "Fallo al renombrar <b>%1</b> to <b>%2</b>"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "Fallo al crear <b>%1</b>"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr "No puede añadir secciones de una hoja CUE a una lista de reproducción."
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr "No puede añadir una lista de reproducción a otra."
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr "Fallo al enviar '%1' a %2. Compruebe que %2 está registrado con MPD."
@@ -3552,15 +3495,11 @@ msgstr "Fallo al enviar '%1' a %2. Compruebe que %2 está registrado con MPD."
msgid "Personal"
msgstr "Personal"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "Desconocido"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "Varios artistas"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3574,12 +3513,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr "<b>%1</b> en <b>%2</b>"
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr "<b>%1</b> por <b>%2</b> en <b>%3</b>"
@@ -3612,19 +3551,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "Formato de flujo:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "Emisión de flujo"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3634,85 +3573,85 @@ msgstr "Configuración de Magnatune"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "Nombre de usuario:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "Contraseña:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "Datos de la cuenta:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "Descargas:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "Descargando"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "Actualizando visualización"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "Agrupación de pistas"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "Analizando respuesta"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "Fallo de análisis"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "Fallo de descarga"
@@ -3728,137 +3667,137 @@ msgstr "Descargar episodios de podcast"
msgid "Delete Downloaded Podcast Episodes"
msgstr "Eliminar episodios de podcast descargados"
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr ""
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr ""
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr ""
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Configurar..."
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "Buscar %1:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "¿Desea descargar otra vez el listado de música de %1?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "Volver a descargar"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
-msgstr "¿Desea desuscribirse de <b>%1</b>?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr ""
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr "¿Desea actualizar todos los listados de podcast?"
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr "¿Desea actualizar el listado de episodios de <b>%1</b>?"
-
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr "Se han descargado todos los podcast seleccionados."
-
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr "¿Desea descargar el siguiente episodio de podcast?"
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
-msgstr "¿Desea descargar los siguientes episodios de podcast?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr ""
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr "¿Desea descargar los episodios de podcast seleccionados?"
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
-msgstr ""
-"Se han eliminado todos los episodios de podcast descargados seleccionados."
-
-#: online/onlineservicespage.cpp:693
-msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
-msgstr ""
-"¿Desea eliminar el fichero descargado del siguiente episodio de podcast?"
-
-#: online/onlineservicespage.cpp:696
+#: online/onlineservicespage.cpp:648
msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
+"Cancel podcast episode downloads (both current and any that are queued)?"
msgstr ""
-"¿Desea eliminar los ficheros descargados de los siguientes episodios de "
-"podcast?"
-#: online/onlineservicespage.cpp:699
+#: online/onlineservicespage.cpp:685
msgid ""
"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr ""
"¿Desea eliminar los ficheros descargados de los episodios de podcast "
"seleccionados?"
-#: online/podcastsearchdialog.cpp:253
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr ""
+
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "Sitio web:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "Detalles del podcast"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr "Seleccione un podcast para mostrar sus detalles"
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr "Introduzca el término de búsqueda..."
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "No se pudo obtener podcasts desde %1"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr "Se ha detectado un problema al analizar al respuesta de %1"
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr "No se pudo descargar el listado de directorio"
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr "No se pudo analizar el listado de directorio"
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "URL"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr "Introduzca la URL de podcast..."
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr "Cargar"
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr "Introduzca a continuación la URL de podcast y pulse 'Cargar'"
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr "URL no válida."
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr "No se pudo obtener el podcast."
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr "No se puedo analizar el podcast."
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
@@ -3866,60 +3805,60 @@ msgstr ""
"Cantata solo admite podcasts de audio. La URL introducida solo contiene "
"podcasts de vídeo."
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr "Suscribir"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr "Introduzca la URL"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr "URL de podcast manual"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "Buscar %1"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr "Buscar podcasts en %1"
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr "Añadir suscripción de podcast"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr "Explorar %1"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr "Explorar %1 podcasts"
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr "Suscripción añadida"
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr "Ya hay una suscripción a este podcast."
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "Podcasts"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
"Cantata solo admite podcasts de audio. %1 solo contiene podcasts de vídeo."
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr "No se pudo analizar %1"
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr "No se pudo descargar %1"
@@ -3931,59 +3870,77 @@ msgstr "Comprobar si hay episodios nuevos:"
msgid "Download episodes to:"
msgstr "Descargar episodios a:"
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
-msgstr "Descargar de forma automática episodios nuevos"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr ""
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr "Ajustes de podcast"
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr "Manualmente"
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr "Cada 15 minutos"
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr "Cada 30 minutos"
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr "Cada hora"
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr "Cada 2 horas"
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr "Cada 6 horas"
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr "Cada 12 horas"
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr "Cada día"
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr "Cada semana"
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr ""
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr "Imagen de fondo"
@@ -3995,61 +3952,61 @@ msgstr "Imagen de artista"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr "Imagen seleccionada:"
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr "Difuminar:"
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10px"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr "Opacidad:"
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40%"
@@ -4074,7 +4031,7 @@ msgstr "No cambiar automáticamente"
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " ms"
@@ -4089,7 +4046,8 @@ msgstr "Fondo oscuro"
#: po/rc.cpp:40 rc.cpp:40
msgid ""
"Darken background, and use white text, regardless of current color palette."
-msgstr "Fondo oscurecido y texto blanco sin importar la paleta de color actual."
+msgstr ""
+"Fondo oscurecido y texto blanco sin importar la paleta de color actual."
#. i18n: file: context/othersettings.ui:203
#. i18n: ectx: property (text), widget (QCheckBox, contextAlwaysCollapsed)
@@ -4101,10 +4059,9 @@ msgstr "Siempre colapsar en un solo panel"
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
-"Solo mostrar 'Artista', 'Álbum' o 'Letras' aunque hay espacio para los tres."
#. i18n: file: context/othersettings.ui:213
#. i18n: ectx: property (text), widget (QCheckBox, wikipediaIntroOnly)
@@ -4112,25 +4069,17 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "Mostrar solo el texto básico de Wikipedia"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
-msgstr ""
-"<i><b>NOTA:</b> Cantata no muestra siempre páginas completas de Wikipedia "
-"(con imágenes, enlaces, etc), sino que muestra una versión simplificada. "
-"Esta simplificación no es siempre correcta al 100%, y por ello, de forma "
-"predefinida, Cantata solo muestra la introducción básica de cada artículo. "
-"Si selecciona mostrar la página completa, pueden haber errores de análisis. "
-"También tendrá que eliminar cualquier artículo almacenado (mediante la "
-"página «Almacén»).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4187,24 +4136,21 @@ msgid "To copy:"
msgstr "Para copiar:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
msgstr ""
-"<i><b>NOTA:</b> Conectado a un servidor Mopidy (requiere actualización "
-"manual).</i>"
#. i18n: file: devices/albumdetails.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
@@ -4214,13 +4160,13 @@ msgstr "Detalles del álbum"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "Año:"
@@ -4285,172 +4231,169 @@ msgid "Never skip on read error"
msgstr "No omitir por fallo de lectura"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-"<i><b>NOTA:</b> Estos ajustes solo son válidos y editables cuando el "
-"dispositivo está conectado.</i>"
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "Nombre:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "Directorio de música:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "Copiar carátulas de álbum como:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "Tamaño máximo de carátula:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "Volumen predefinido:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr "Arreglo para 'Various Artists'"
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "Analizar música de forma automática al conectar"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "Utilizar caché"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "Nombres de fichero"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "Esquema de nombre de fichero:"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "Compatibilidad con VFAT"
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "Utilizar solo caracteres ASCII"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "Sustituir espacios con guiones bajos"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "Ignorar 'The' en nombres de artista"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "Transcodificación"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4578,176 +4521,159 @@ msgid "The genre of the album."
msgstr "El género del álbum."
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-"<i><b>NOTA:</b> Estos ajustes solo son editables cuando el dispositivo está "
-"conectado.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "Tipo:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "Opciones"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "Puerto:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "Usuario:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "Dominio:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "Recurso compartido:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>NOTA:</b> Si introduce una contraseña aquí, se almacenará <b>sin "
-"cifrar</b> en el fichero de configuración de Cantata. Para que Cantata "
-"solicite la contraseña antes de acceder al recurso compartido, defina la "
-"contraseña como «-».</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "Nombre del servicio:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "Directorio:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "Opciones adicionales:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>NOTA:</b> Debido al funcionamiento de sshfs, se requiere una "
-"aplicación ssh-askpass adecuada (ksshaskpass, ssh-askpass-gnome, etc.) para "
-"introducir la contraseña.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>NOTA:</b> Este diálogo se utiliza solo para añadir dispositivos "
-"remotos (por ejemplo, mediante Samba), o para acceder a directorios montados "
-"localmente. Para reproductores normales con conexión USB, Cantata mostrará "
-"automáticamente el dispositivo cuando se conecte.</i>"
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4767,39 +4693,51 @@ msgstr "Nombre de las normas dinámicas"
msgid "Edit"
msgstr "Editar"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "Acerca de las normas"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "Incluir las canciones que coinciden con lo siguiente:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "Excluir las canciones que coinciden con lo siguiente:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "Artistas similares a:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "Artista del álbum:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "Del año:"
@@ -4811,57 +4749,51 @@ msgstr "Del año:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "Todo"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "Al año:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "Coincidencia exacta"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
msgstr ""
-"<i><b>NOTA</b> Introduzca valores sólo para las etiquetas en las que desea "
-"buscar. </i>"
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>NOTA</b> Para el género, finalice la etiqueta con un asterisco para "
-"que coincida con otros géneros. Por ejemplo, 'rock*' coincide con 'Hard "
-"Rock' y 'Rock and Roll'. </i>"
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr "Añadir fichero local"
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr ""
"Guardar carátulas e imágenes de artista descargadas en el directorio de "
@@ -4869,117 +4801,102 @@ msgstr ""
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "Guardar letras descargadas en el directorio de música"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "Guardar fondos descargados en el directorio de música"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-"<i><b>NOTA:</b> Si se selecciona guardar carátulas, letras o fondos de "
-"Cantata en el directorio de música, y no tiene permisos de escritura en ese "
-"directorio, Cantata guardará los ficheros en su directorio de caché "
-"personal.</i>"
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
-"<i><b>NOTA:</b> Cantata solo puede guardar fondos e imágenes de artista a "
-"dos niveles de profundidad dentro del directorio de música. (esto es, "
-"\"Artista/Álbum/Pistas\")</i>"
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "Primera ejecución de Cantata"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "Bienvenido a Cantata"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
-"<html><head/><body><p>Cantata es un cliente de Music Player Daemon (MPD) "
-"potente y fácil de utilizar. MPD es una aplicación de segundo plano que "
-"sirve para reproducir música.</p><p>Para más información sobre MPD, consulte "
-"el sitio web de MPD <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>Este asistente le guiará por los pasos necesarios para el "
-"funcionamiento adecuado de Cantata.</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr "<html><head/><body><p>Bienvenido a Cantata</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
-"<html><head/><body><p>Cantata es un cliente de Music Player Daemon (MPD) "
-"potente y fácil de utilizar. MPD es una aplicación de segundo plano que "
-"sirve para reproducir música. MPD se puede ejecutar para todo el sistema o "
-"para un solo usuario. Seleccione como desea que Cantata se conecte "
-"inicialmente (o arranque) a MPD:</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "Configuración estándar para varios usuarios/servidores"
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4995,13 +4912,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "Configuración básica para un usuario"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -5011,7 +4928,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -5027,13 +4944,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "Detalles de conexión"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -5042,133 +4959,98 @@ msgstr ""
"Introduzca los detalles pertinentes y utilice el botón «Conectar» para "
"probar la conexión."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "Host (o socket local):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-"<i><b>NOTA:</b> El ajuste de \"Directorio de música\" se utiliza para obtener "
-"carátulas, letras, etc. Si la instancia de MPD está en un sistema remoto, "
-"puede definir este valor para una URL de HTTP.</i>"
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>NOTA:</b> Al utilizar un «socket» local, se debe especificar la ruta "
-"absoluta al mismo. (El número de puerto no es necesario.)</i>"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "Directorio de música"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "Seleccione la carpeta que contiene su colección de música."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "Portadas, letras y flujos"
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
"relevant files within the music folder, or within your personal cache/config "
"folders.</p>"
msgstr ""
-"<p>Cantata descargará las carátulas faltantes y las letras desde "
-"Internet.</p><p>Para cada uno de ellos, confirme si se desea que Cantata "
-"guarde los ficheros pertinentes dentro del directorio de música, o dentro de "
-"sus directorios personales cache/config.</p>"
-
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-"<i><b>NOTA:</b> Si se selecciona que Cantata almacene portadas o letras "
-"dentro de la carpeta de música, y el usuario no tiene permisos de escritura "
-"para esta carpeta, Cantata almacenará los ficheros en su carpeta de caché "
-"personal. Por otra parte, para flujos, si el usuario no tiene permisos de "
-"escritura, sólo podrá ver (y reproducir) los flujos almacenados en la "
-"carpeta de música, y no podrá añadir o editar ningún flujo. Si se selecciona "
-"no almacenar los flujos en la carpeta de música, entonces se almacenan en la "
-"carpeta de configuración personal del personal, solo accesible por éste.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
-msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"<p>Cantata descargará las carátulas faltantes y las letras desde Internet.</"
+"p><p>Para cada uno de ellos, confirme si se desea que Cantata guarde los "
+"ficheros pertinentes dentro del directorio de música, o dentro de sus "
+"directorios personales cache/config.</p>"
+
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-"<i><b>NOTA:</b> Cantata solo puede guardar fondos e imágenes de artista a "
-"dos niveles de profundidad dentro del directorio de música. (esto es, "
-"\"Artista/Álbum/Pistas\")</i>"
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-"<i><b>NOTA:</b> El \"Directorio de música\" está definido con una dirección de "
-"HTTP, y Cantata no puede enviar ficheros a servidores externos HTTP. Por "
-"ello, no se deben seleccionar los ajustes que se muestran arriba.</i>"
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "Finalizado"
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
@@ -5178,9 +5060,20 @@ msgstr ""
"se puede utilizar para personalizar la apariencia de Cantata, y para añadir "
"sistemas MPD adicionales, etc."
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5195,273 +5088,300 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "Barra lateral"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr "Vistas"
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr ""
"Utilice las casillas a continuación para configurar la lista de vistas "
"activas."
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-"<i><b>NOTA:</b> De forma predefinida, la cola de reproducción se muestra a "
-"un lado de las otras vistas. Si se activa la opción en la parte superior, se "
-"incorporará a la barra lateral como las otras vistas.</i>"
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
-"<i><b>NOTA:</b> De forma predefinida, la vista 'Info' (información de pista "
-"actual) es accesible pulsando su icono en la barra de herramientas "
-"principal. Si se activa esta opción, se incorporará a la barra lateral como "
-"las otras vistas.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Estilo:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "Posición:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "Mostrar solo iconos, sin texto"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "Utilizar iconos monocromos"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "Ocultar automáticamente"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "Carátulas:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "Mostrar imágenes de artista"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr "Ordenar álbumes por año"
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>NOTA:</b>Durante la búsqueda de imágenes de artista, Cantata buscara "
-"artist.jpg, artist.png \"Artista\".jpg o \"Artista\".jpg\n"
-"dentro del directorio de la pista actual, o dentro del directorio superior. "
-"Si no se encuentra ninguna imagen, Cantata intentará descargar una.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "Mostrar imágenes de artista"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "Ordenar álbumes:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "Colapsar álbumes en el inicio"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "Otras vistas"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "Estilo de vista de directorios:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "Estilo de vista de flujos:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "Estilo de vista online:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "Estilo de vista de dispositivos:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Dispositivos:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr "Estilo de vista de búsqueda:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Buscar:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "Expandir de forma automática el álbum actual"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "Desplazar a pista actual"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr "Consultar antes de eliminar"
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "Carátula de álbum actual"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "Externo"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "Mostrar mensajes emergentes al cambiar de pista"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr "Mostrar icono en el área de notificación"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Minimizar al área de notificación al cerrar"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr "Al iniciar"
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr "Mostrar ventana principal"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr "Ocultar ventana principal"
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr "Restablecer estado anterior"
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "General"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
-msgstr "Colocar álbumes de una sola pista bajo 'Varios artistas/Pistas únicas'"
+msgstr ""
+"Colocar álbumes de una sola pista bajo 'Varios artistas/Pistas únicas'"
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr "Agrupar álbumes de pista única"
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
"Utilizar la etiqueta 'Compositor', y no 'Artista' o 'Artista de álbum' para "
"agrupar álbumes."
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr "Agrupar álbumes por compositor"
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5475,39 +5395,33 @@ msgstr ""
"5 tienen el género definido como \"Metal\", solo estos 5 se añaden si el "
"filtro de vista de género está definido como \"Metal\"."
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr "Solo actuar sobre canciones que pasan el filtrado"
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr "Obtener carátulas faltantes de Last.fm"
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr "Almacenar carátulas escaladas"
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr "Mostrar la acción de eliminar en menús contextuales"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr "Forzar la activación con un solo clic de los elementos"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5515,171 +5429,161 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-"<p>Esto modifica la interfaz de Cantata de la forma siguiente:\n"
-"<ul><li>Los botones de reproducción y control son un 33% más "
-"grandes.</li><li>Las vistas serán \"hojeables\".</li><li>Para arrastrar "
-"elementos, se deberá \"tocar\" la esquina superior izquierda.</li><li>Las "
-"barras de desplazamiento tendrán un ancho de solo unos píxeles.</li><li>Las "
-"acciones (por ejemplo, \"Añadir a la lista de reproducción\") siempre serán "
-"visibles (no solo cuando el elemento está debajo del ratón).</li></li>Los "
-"botones giratorios tendrán botones + y - a los lados del campo de "
-"texto.</li></ul></p>"
-
-#. i18n: file: gui/interfacesettings.ui:798
+
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr "Adaptar la interfaz a una interacción táctil"
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
-msgstr "Mostrar botón de detener en la barra de herramientas"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
-msgstr "Mostrar la carátula de la pista actual en la barra de herramientas"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "Idioma:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
msgstr ""
-"<i><b>NOTA:</b> Cantata requiere reiniciar si se modifica la opción «Forzar "
-"la activación de elementos con un solo clic».</i>"
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-"<i><b>NOTA:</b> Modificar el ajuste de idioma requiere reiniciar "
-"Cantata.</i>"
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-"<i><b>NOTA:</b> Modificar el ajuste \"táctil\" requiere reiniciar Cantata.</i>"
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[Dinámico]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr "Salir de pantalla completa"
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "Desvanecimiento progresivo de audio al detener:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Detener reproducción al cerrar"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr "Inhibir la suspensión durante la reproducción"
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>NOTA:</b> Si mantiene pulsado el botón de detener, se muestra un menú "
-"que permite seleccionar si detener la reproducción inmediatamente o después "
-"de la pista actual.</i>"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "Salida"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "Crossfade entre pistas:"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr " s"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "Ganancia de reproducción:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "Acerca de la ganancia de reproducción"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
-msgstr "Utilice las casillas a continuación para controlar las salidas activas."
+msgstr ""
+"Utilice las casillas a continuación para controlar las salidas activas."
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "Colección:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "Nombre de fichero de carátula:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5694,157 +5598,140 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "URL de flujo HTTP:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>NOTA:</b> Las opciones de «Directorio de música» se utilizan para "
-"obtener las carátulas (con el valor definido anteriormente, o, si no se "
-"define, <code>cover.jpg / cover.png</code>). Si también tiene permisos de "
-"escritura en el directorio (y subdirectorios), Cantata guardará cualquier "
-"portada descargada en la carpeta respectiva de cada álbum.</i>"
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-"<i><b>NOTE:</b> 'URL de flujo HTTP' solo es útil si MPD esta configurado "
-"para una salida mediante flujo HTTP, y desea que Cantata puede reproducir "
-"ese flujo.</i>"
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>NOTA:</b> Si modifica la opción «Carpeta de música», tendrá que "
-"actualizar manualmente la base de datos de música. Esto se puede hacer "
-"pulsando el botón «Actualizar base de datos» en las vistas de «Artistas» o "
-"«Álbumes».</i>"
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
-"<i><b>NOTE:</b> Si no se define ninguna opción para «Nombre de fichero de "
-"carátula», Cantata utilizará un valor predefinido <code>cover</code> </i>"
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "Interfaz de red:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
-msgstr ""
-"<i><b>NOTA:</b> Habitualmente, MPD solo reproduce canciones almacenadas en "
-"sus carpetas. Cantata incorpora un servidor HTTP básico que sirve para "
-"introducir otras canciones a MPD. No obstante, solo funciona mientras "
-"Cantata está en ejecución.<br/><br/>\n"
-"<b>NOTA:</b> Si selecciona «Loopback local» para «Interfaz de red», MPD "
-"<b>debe</b> estar presente en este sistema</i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "Modo:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "Proxy HTTP"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "Proxy SOCKS"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr ""
"Utilice las casillas a continuación para configurar la lista de servicios "
"activos."
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr "Registrar pistas reproducidas mediante:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "Estado:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "Iniciar sesión"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr "Registrar pistas reproducidas"
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr "Mostrar el botón \"Love\""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5858,47 +5745,41 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "Cuenta premium"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "Tipo de flujo:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "Hora de finalización de sesión:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-"<i><b>NOTA:</b> Estos ajustes se aplican a Importado digitalmente, "
-"JazzRadio.com, RockRadio.com, y Sky.fm</i>"
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
-"<i><b>NOTA:</b> Si se introducen detalles de cuenta, se muestra un elemento "
-"de estado \"DI\" bajo la lista de flujos. Esto indica si ha iniciado sesión o "
-"no.</i>"
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
"Utilice las casillas a continuación para configurar la lista de proveedores "
@@ -5906,96 +5787,109 @@ msgstr ""
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr "Configurar proveedor"
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr "Instalar"
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
-"<i><b>NOTA:</b> Las categorías integradas se muestran en itálica, y no se "
-"pueden eliminar.</i>"
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "Buscar:"
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "Atajo para la acción seleccionada"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "Predefinido:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "Personalizado:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "Artista del álbum:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "Número de pista:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "Número de disco:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr ""
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
+msgid ""
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
-"<i><b>NOTA</b> Varios géneros se deben separa mediante un punto y coma "
-"(p.ej. 'Rock;Hard Rock')</i>"
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "Nombre original"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "Nombre nuevo"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr ""
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Omar Campagne Polaino"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "ocampagne at gmail.com"
@@ -6046,7 +5940,7 @@ msgstr "¿Desea interrumpir el análisis de las pistas?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "Cancelar"
@@ -6056,11 +5950,9 @@ msgstr "¿Desea cancelar la lectura de las etiquetas existentes?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"¿Desea analizar <b>todas</b>las pistas?<br><br><i>NOTA: Todas las pistas ya "
-"tienen etiquetas ReplyGain.</i>"
#: replaygain/rgdialog.cpp:263
msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
@@ -6082,17 +5974,17 @@ msgstr "Analizando pistas..."
msgid "Reading existing tags..."
msgstr "Leyendo etiquetas existentes..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr "%1 (¿Etiquetas corruptas?)"
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "Fallo al actualizar las etiquetas de las siguientes pistas:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "El dispositivo no está conectado."
@@ -6116,63 +6008,63 @@ msgstr "Original: %1 dB"
msgid "Original: %1"
msgstr "Original: %1"
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "¿Eliminar las pistas seleccionadas de la lista?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "Eliminar pistas"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr "Servicio no válido"
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr "Método no válido"
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr "Fallo de identificación"
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr "Formato no válido"
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr "Parámetros no válidos"
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr "Recurso no válido especificado"
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr "Fallo de la operación"
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr "Clave de sesión no válida"
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr "Clave API no válida"
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr "Servicio no disponible"
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr "Last.fm está actualmente ocupada, vuelva a intentarlo en unos minutos"
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr "Límite de tasa superado"
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr "%1 error: %2"
@@ -6184,33 +6076,29 @@ msgstr "%1: Pista actual marcada como favorito"
msgid "%1: Love Current Track"
msgstr "%1: Marcar pista actual como favorito"
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr "%1 (mediante MPD)"
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-"<i><b>NOTA:</b> Si se utiliza un \"scrobbler\" marcado como '(mediante MPD)' "
-"(como %1), deberá estar iniciado y en funcionamiento. Cantata solo puede "
-"marcar pistas como favorito de esta forma, y no puede activar/desactivar el "
-"registro de pistas escuchadas.</i>"
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr "Identificándose..."
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr "Identificado"
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6240,27 +6128,27 @@ msgstr "AAC 128k"
msgid "Logout"
msgstr "Finalizar sesión"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "URL:"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "Añadir a la cola de reproducción, no guardar"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Añadir a la cola de reproducción, y guardar en favoritos"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "Añadir flujo"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "Editar flujo"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>ERROR:</b>Protocolo no válido</i>"
@@ -6305,39 +6193,39 @@ msgid "Installing/updating %1"
msgstr "Instalando/actualizando %1"
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
-msgstr "Fallo al instalar <b>%1</b>"
+msgid "Failed to install '%1'"
+msgstr ""
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
-msgstr "Fallo al descargar <b>%1</b>"
+msgid "Failed to download '%1'"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
-msgstr "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
-msgstr "¿Desea instalar los siguientes?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
-msgstr "¿Desea actualizar los siguientes?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr "Instalar/Actualizar"
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr "¿Desea cancelar la instalación/actualización?"
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr "Descargando %1"
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr "Actualizar todos los proveedores actualizables"
@@ -6353,192 +6241,195 @@ msgstr "Exportar flujos favoritos"
msgid "Add New Stream To Favorites"
msgstr "Añadir flujo nuevo a favoritos"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Importado digitalmente"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|Flujos XML"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "Importar flujos"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "Flujos XML (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|Flujos XML"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "Exportar flujos"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr "Flujos XML (*.xml.gz)"
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "Fallo al crear <b>%1</b>."
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr ""
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "El flujo ya existe.<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "Ya existe un flujo llamado <b>%1</b>."
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "Favorito añadido"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "Ya está en favoritos"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Ya está en favoritos"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "¿Actualizar <b>%1</b> flujos?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr ""
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "¿Seguro que desea eliminar el favorito a <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr ""
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "¿Seguro que desea eliminar todos los favoritos <b>%1</b>?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr ""
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "¿Desea eliminar los %1 flujos seleccionados?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "¿Desea eliminar <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr ""
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "Buscar %1:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "Añadido '%1' a favoritos"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr "Del fichero..."
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr "Descargar..."
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.streams|Flujos de Cantata"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr "Instalar flujos"
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "Flujos de Cantata (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Se ha detectado una categoría llamada <b>%1</b><br/>. ¿Sobrescribir?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
-msgstr "Fallo al abrir el fichero de paquete"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
+msgstr ""
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr "Formato de fichero no válido."
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr "No se pudo crear el directorio de categoría de flujo."
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr "No se pudo crear la lista de flujo."
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr "No se pudo eliminar el directorio de flujos."
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "&Aceptar"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "&Cancelar"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "&Si"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "&No"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "&Descartar"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "&Guardar"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "A&plicar"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "C&errar"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "S&obrescribir"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "&Restablecer"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "Con&tinuar"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "&Eliminar"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "&Parar"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "&Eliminar"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "Anter&ior"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "Sig&uiente"
@@ -6550,14 +6441,32 @@ msgstr "Contraseña"
msgid "Please enter password:"
msgstr "Introduzca la contraseña:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr ""
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "Advertencia"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "Pregunta"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr ""
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr ""
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr ""
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "Seleccione el directorio"
@@ -6566,59 +6475,97 @@ msgstr "Seleccione el directorio"
msgid "Select File"
msgstr "Seleccione el fichero"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 Kb"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 Mb"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 Gb"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "1 día %2"
msgstr[1] "%1 días %2"
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr "Definir «Artista del álbum» como «Artista»"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr ""
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr ""
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "Todas las pistas"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
"¿Desea aplicar el arreglo para «Varios Artistas» a <b>todas</b> las pistas?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>Esto define «Artista del álbum» y «Artista» con el valor de «Varios "
+"Artistas», y «Título» con el de «Artista de pista - Título de pista»</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
"¿Desea deshacer el arreglo para «Varios Artistas» a <b>todas</b> las pistas?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "Deshacer arreglo para «Varios Artistas»"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>Si «Artista del álbum» es igual a «Artista» y «Título» tiene el formato "
+"«Artista de pista - Título de pista», el valor para «Artista» se tomará de "
+"«Título», y «Título» se definirá solo con el título de pista. Por ejemplo:"
+"<br/><br/>si «Título» es «Wibble - Wobble», entonces «Artista» se define "
+"como «Wibble», y «Título» se define como «Wobble»</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6626,83 +6573,162 @@ msgstr ""
"¿Quiere definir «Artista del álbum» como «Artista» (si «Artista del álbum» "
"está vacío) para <b>todas</b> las pistas?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr ""
"¿Quiere definir «Artista del álbum» como «Artista» (si «Artista del álbum» "
"está vacío)?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "«Artista del álbum» como «Artista»"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"¿Desea poner en mayúscula la primera letra de «Título», «Artista», «Artista "
-"del álbum», y «Álbum» para <b>todas</b> las pistas?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "Ajustar el valor de cada número de pista en:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr ""
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "Todas las pistas [modificado]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [modificado]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr ""
"¿Desea renombrar los ficheros de audio para que coincidan con las etiquetas?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "Renombrar ficheros"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "¿Cancelar la modificación de los ficheros?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "El fichero fuente no existe.<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr ""
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "El fichero de destino ya existe.<br/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr ""
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "Fallo al crear el directorio de destino. <br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr ""
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "Fallo al renombrar %1 a %2"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr ""
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(Flujo)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\"><b>Compositor:</b></td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr ""
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
"</b></td><td>%3</td></tr>"
msgstr ""
-"<tr><td align=\"right\"><b>Artista:</b></td><td>%1</td></tr><tr><td "
-"align=\"right\"><b>Álbum:</b></td><td>%2</td></tr><tr><td "
-"align=\"right\"><b>Año:</b></td><td>%3</td></tr>"
+"<tr><td align=\"right\"><b>Artista:</b></td><td>%1</td></tr><tr><td align="
+"\"right\"><b>Álbum:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Año:</"
+"b></td><td>%3</td></tr>"
#: widgets/genrecombo.cpp:41
msgid "Filter On Genre"
@@ -6712,7 +6738,7 @@ msgstr "Filtrar por género"
msgid "All Genres"
msgstr "Todos los géneros"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "Retroceder"
@@ -6720,15 +6746,19 @@ msgstr "Retroceder"
msgid "Menu"
msgstr "Menú"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr ""
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "Eliminar de la cola de reproducción"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "Buscar…"
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "Cerrar barra de búsqueda"
@@ -6742,22 +6772,20 @@ msgstr "<b>NO</b> identificado en %1"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
-"<p>No se puede acceder a los ficheros de canciones.<br/><br/>Comrpuebe el "
-"ajuste \"Directorio de música\" de Cantata, y el ajuste \"music_directory\" de "
-"MPD.</p>"
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-"<p>No se puede acceder a los ficheros de canciones.<br/><br/>Compruebe que "
-"el dispositivo sigue conectado.</p>"
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr "Estirar columnas para adaptarse a la ventana"
@@ -6893,6 +6921,802 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr "%1 actualizaciones disponibles"
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "No hay suficiente espacio en el dispositivo de destino.\n"
+#~ "Las canciones seleccionadas ocupan %1, pero sólo hay %2 libre.\n"
+#~ "Las canciones se tendrán que transcodificar a un tamaño de fichero menor "
+#~ "para la copia."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "No hay suficiente espacio en el destino.\n"
+#~ "Las canciones seleccionadas ocupan %1, pero sólo hay %2 libre."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>El dispositivo de destino no está configurado.<br/>¿Desea continuar "
+#~ "con las opciones predefinidas?</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>El dispositivo de origen no está configurado.<br/>¿Desea continuar con "
+#~ "las opciones predefinidas?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "Poner en mayúscula la primera letra de «Título», «Artista», «Artista del "
+#~ "álbum», y «Álbum»"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>¿Qué tipo de actualización desea realizar?<ul><li>Parcial - Solo se "
+#~ "analizan canciones nuevas <i>(rápido)</i></li><li>Completa - Se analizan "
+#~ "todas las canciones <i>(lento)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "¿Desea eliminar las canciones seleccionadas?\n"
+#~ "Esta acción no se puede deshacer."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "¿Desea olvidar <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "¿Desea expulsar el CD de audio <b>%1 - %2</b>?"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "¿Está seguro de que quiere desconectar <b>%1</b>?"
+
+#~ msgid ""
+#~ "<p>The following variables will be replaced with their corresponding "
+#~ "meaning for each track name.</p>"
+#~ msgstr ""
+#~ "<p>Las siguientes variables se sustituirán por su significado "
+#~ "correspondiente para cada nombre de pista.</p>"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "Ya hay un dispositivo llamado «%1»\n"
+#~ "Seleccione un nombre distinto"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "¿Desea eliminar las normas seleccionadas?\n"
+#~ "Esta acción no se puede deshacer."
+
+#~ msgid ""
+#~ "<p>Cantata will query your library using all of the rules listed. The "
+#~ "list of <i>Include</i> rules will be used to build a set of songs that "
+#~ "can be used. The list of <i>Exclude</i> rules will be used to build a set "
+#~ "of songs that cannot be used. If there are no <i>Include</i> rules, "
+#~ "Cantata will assume that all songs (bar those from <i>Exclude</i>) can be "
+#~ "used. <br/>e.g. to have Cantata look for 'Rock songs by Wibble OR songs "
+#~ "by Various Artists', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> To have Cantata look for 'Songs by Wibble but not from "
+#~ "album Abc', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After the set of "
+#~ "usable songs has been created, Cantata will randomly select songs to keep "
+#~ "the play queue filled with 10 entries.</p>"
+#~ msgstr ""
+#~ "<p>Cantata analizará la biblioteca utilizando todas las normas "
+#~ "enumeradas. La lista de normas <i>Incluir</i> sirve para generar un "
+#~ "conjunto de canciones que utilizar. La lista de normas <i>Excluir</i> "
+#~ "sirve para generar un conjunto de canciones que no se utilizarán. Si no "
+#~ "hay normas bajo <i>Incluir</i>, Cantata supone que todas las canciones (a "
+#~ "excepción de las normas <i>Excluir</i>) se pueden utilizar. <br/>Por "
+#~ "ejemplo, para que Cantata busque \"Canciones de rock por Wibble O "
+#~ "canciones de Varios Artistas\", necesita lo siguiente: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> Para que Cantata busque \"Canciones por Wibble pero no "
+#~ "del álbum Abc\", necesita lo siguiente: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>Después de generar "
+#~ "el conjunto de canciones que utilizar, Cantata seleccionará canciones de "
+#~ "forma aleatoria para mantener 10 canciones en la lista de reproducción.</"
+#~ "p>"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "Ya existe un conjunto de normas llamado «%1».\n"
+#~ "¿Desea sobrescribir?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr ""
+#~ "<p>¿Desea eliminar todos los elementos a continuación?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "Fallo al definir al carátula.\n"
+#~ "No se pudo descargar a un fichero temporal."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "Fallo al definir la carátula.\n"
+#~ "No se ha podido realizar una copia."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "Fallo al definir la carátula.\n"
+#~ "No ha podido realizar una copia de seguridad del original."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "Fallo al definir la carátula.\n"
+#~ "No se pudo copiar el fichero a «%1».!"
+
+#~ msgid "Medium"
+#~ msgstr "Mediana"
+
+#~ msgid "Extra Large"
+#~ msgstr "Extra grande"
+
+#~ msgid "Icon/List"
+#~ msgstr "Icono/Lista"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "Editar etiquetas de canciones"
+
+#~ msgid ""
+#~ "Podcasts are currently being downloaded\n"
+#~ "\n"
+#~ "Quiting now will abort all downloads."
+#~ msgstr ""
+#~ "Hay podcasts en descarga en este momento.\n"
+#~ "\n"
+#~ "Si se cierra ahora se cancelarán todas las descargas."
+
+#~ msgid "Abort downloads and quit"
+#~ msgstr "Cancelar descargas y cerrar"
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "<b>%1</b> se utiliza para descargar los flujos favoritos, seleccione otro "
+#~ "nombre."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr ""
+#~ "Se ha detectado una lista de reproducción llamada <b>%1</b>.<br/> ¿Añadir "
+#~ "a esa lista de reproducción?"
+
+#~ msgid "Can only edit tags of songs within MPD's music collection."
+#~ msgstr ""
+#~ "Solo se pueden editar etiquetas de canciones dentro de la colección de "
+#~ "música de MPD."
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>ReplayGain es una propuesta de estándar publicada en 2001 para "
+#~ "normalizar el alto volumen percibido en formatos de audio de PC como MP3 "
+#~ "y Ogg Vorbis. Funciona para pista/álbum, y ya es compatible con un número "
+#~ "creciente de reproductores.</p><p>Se pueden utilizar los siguientes "
+#~ "ajustes de ReplayGain:<ul><li><i>Ninguno</i> No se aplica ReplayGain.</"
+#~ "li><li>Pista<i> El volumen se ajusta con las etiquetas ReplayGain de la "
+#~ "pista</li><li><i>Álbum</i> El volumen se ajusta con las etiquetas "
+#~ "ReplayGain del álbum.</li><li><i>Automático</i> El volumen se ajusta con "
+#~ "las etiquetas ReplayGain si se selecciona reproducción aleatoria; de no "
+#~ "ser así, se utilizarán las etiquetas del álbum.</li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "¿Desea eliminar las listas de reproducción seleccionadas?\n"
+#~ "No se puede deshacer esta acción."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr ""
+#~ "Se ha detectado una lista de reproducción llamada <b>%1</b><br/>. "
+#~ "¿Sobrescribir?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "¿A qué tipo de colección quiere conectarse?<br/><ul><li> Estándar: la "
+#~ "colección de música puede ser compartida, en otro sistema, o ya está "
+#~ "configurada.</li><li>Básica: la colección de música no es compartida, y "
+#~ "Cantata configurará y controlará la instancia de MPD.</li></ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "¿Eliminar <b>%1</b>?"
+
+#~ msgid "Multi-Media Keys"
+#~ msgstr "Teclas multimedia"
+
+#~ msgid "Do not use media keys to control Cantata"
+#~ msgstr "No utilizar teclas multimedia para controlar Cantata"
+
+#~ msgid "Use media keys to control Cantata"
+#~ msgstr "Utilizar teclas multimedia para controlar Cantata"
+
+#~ msgid ""
+#~ "Use media keys, as configured in desktop settings, to control Cantata"
+#~ msgstr ""
+#~ "Utilizar teclas multimedia, como definen los ajustes de escritorio, para "
+#~ "controlar Cantata"
+
+#~ msgid ""
+#~ "Use media keys, as configured in GNOME/Unity settings, to control Cantata"
+#~ msgstr ""
+#~ "Utilizar teclas multimedia, como definen los ajustes de GNOME/Unity, para "
+#~ "controlar Cantata"
+
+#~ msgid "Add Albums In Random Order"
+#~ msgstr "Añadir álbumes en orden aleatorio"
+
+#~ msgid "Edit Tags"
+#~ msgstr "Editar etiquetas"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(Prioridad: %1)</b>"
+
+#~ msgid "Unsubscribe from <b>%1</b>?"
+#~ msgstr "¿Desea desuscribirse de <b>%1</b>?"
+
+#~ msgid "Refresh episode listing from <b>%1</b>?"
+#~ msgstr "¿Desea actualizar el listado de episodios de <b>%1</b>?"
+
+#~ msgid "All selected podcasts have already been downloaded!"
+#~ msgstr "Se han descargado todos los podcast seleccionados."
+
+#~ msgid "Do you wish to download the following podcast episode?"
+#~ msgstr "¿Desea descargar el siguiente episodio de podcast?"
+
+#~ msgid "Do you wish to download the following podcast episodes?"
+#~ msgstr "¿Desea descargar los siguientes episodios de podcast?"
+
+#~ msgid "All selected downloaded podcast episodes have already been deleted!"
+#~ msgstr ""
+#~ "Se han eliminado todos los episodios de podcast descargados seleccionados."
+
+#~ msgid ""
+#~ "Do you wish to delete the downloaded file of the following podcast "
+#~ "episode?"
+#~ msgstr ""
+#~ "¿Desea eliminar el fichero descargado del siguiente episodio de podcast?"
+
+#~ msgid ""
+#~ "Do you wish to the delete downloaded files of the following podcast "
+#~ "episodes?"
+#~ msgstr ""
+#~ "¿Desea eliminar los ficheros descargados de los siguientes episodios de "
+#~ "podcast?"
+
+#~ msgid "Automatically download new episodes"
+#~ msgstr "Descargar de forma automática episodios nuevos"
+
+#~ msgid ""
+#~ "Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
+#~ "all three."
+#~ msgstr ""
+#~ "Solo mostrar 'Artista', 'Álbum' o 'Letras' aunque hay espacio para los "
+#~ "tres."
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Cantata no muestra siempre páginas completas de Wikipedia "
+#~ "(con imágenes, enlaces, etc), sino que muestra una versión simplificada. "
+#~ "Esta simplificación no es siempre correcta al 100%, y por ello, de forma "
+#~ "predefinida, Cantata solo muestra la introducción básica de cada "
+#~ "artículo. Si selecciona mostrar la página completa, pueden haber errores "
+#~ "de análisis. También tendrá que eliminar cualquier artículo almacenado "
+#~ "(mediante la página «Almacén»).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Conectado a un servidor Mopidy (requiere actualización "
+#~ "manual).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Estos ajustes solo son válidos y editables cuando el "
+#~ "dispositivo está conectado.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "Ignorar 'The' en nombres de artista"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Estos ajustes solo son editables cuando el dispositivo "
+#~ "está conectado.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si introduce una contraseña aquí, se almacenará <b>sin "
+#~ "cifrar</b> en el fichero de configuración de Cantata. Para que Cantata "
+#~ "solicite la contraseña antes de acceder al recurso compartido, defina la "
+#~ "contraseña como «-».</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Debido al funcionamiento de sshfs, se requiere una "
+#~ "aplicación ssh-askpass adecuada (ksshaskpass, ssh-askpass-gnome, etc.) "
+#~ "para introducir la contraseña.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Este diálogo se utiliza solo para añadir dispositivos "
+#~ "remotos (por ejemplo, mediante Samba), o para acceder a directorios "
+#~ "montados localmente. Para reproductores normales con conexión USB, "
+#~ "Cantata mostrará automáticamente el dispositivo cuando se conecte.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr ""
+#~ "<i><b>NOTA</b> Introduzca valores sólo para las etiquetas en las que "
+#~ "desea buscar. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>NOTA</b> Para el género, finalice la etiqueta con un asterisco para "
+#~ "que coincida con otros géneros. Por ejemplo, 'rock*' coincide con 'Hard "
+#~ "Rock' y 'Rock and Roll'. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
+#~ "backdrops, within the music folder, and you do not have write access to "
+#~ "this folder, then Cantata will revert to saving the files in your "
+#~ "personal cache folder.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si se selecciona guardar carátulas, letras o fondos de "
+#~ "Cantata en el directorio de música, y no tiene permisos de escritura en "
+#~ "ese directorio, Cantata guardará los ficheros en su directorio de caché "
+#~ "personal.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
+#~ "Tracks')</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Cantata solo puede guardar fondos e imágenes de artista a "
+#~ "dos niveles de profundidad dentro del directorio de música. (esto es, "
+#~ "\"Artista/Álbum/Pistas\")</i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata es un cliente de Music Player Daemon (MPD) "
+#~ "potente y fácil de utilizar. MPD es una aplicación de segundo plano que "
+#~ "sirve para reproducir música.</p><p>Para más información sobre MPD, "
+#~ "consulte el sitio web de MPD <a href=\"http://www.musicpd.org\"><span "
+#~ "style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+#~ "org</span></a></p><p>Este asistente le guiará por los pasos necesarios "
+#~ "para el funcionamiento adecuado de Cantata.</p></body></html>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music. MPD may be started either system-wide, or on a per-"
+#~ "user basis. Please select how you would like to have Cantata initially "
+#~ "connect to (or startup) MPD:</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata es un cliente de Music Player Daemon (MPD) "
+#~ "potente y fácil de utilizar. MPD es una aplicación de segundo plano que "
+#~ "sirve para reproducir música. MPD se puede ejecutar para todo el sistema "
+#~ "o para un solo usuario. Seleccione como desea que Cantata se conecte "
+#~ "inicialmente (o arranque) a MPD:</p></body></html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
+#~ "lyrics, etc. If you're MPD instance is on a remote host, you may set this "
+#~ "to a HTTP URL.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> El ajuste de \"Directorio de música\" se utiliza para "
+#~ "obtener carátulas, letras, etc. Si la instancia de MPD está en un sistema "
+#~ "remoto, puede definir este valor para una URL de HTTP.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Al utilizar un «socket» local, se debe especificar la "
+#~ "ruta absoluta al mismo. (El número de puerto no es necesario.)</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, "
+#~ "within the music folder, and you do not have write access to this folder, "
+#~ "then Cantata will revert to saving the files in your personal cache "
+#~ "folder. However, for streams, if you do not have write access, then you "
+#~ "will only be able to view (and play) the streams stored in the music "
+#~ "folder, and not add (or edit) any streams. If you elect not to store "
+#~ "streams within the music folder, then these will be saved in your local "
+#~ "config folder - and will only be accessible to yourself.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si se selecciona que Cantata almacene portadas o letras "
+#~ "dentro de la carpeta de música, y el usuario no tiene permisos de "
+#~ "escritura para esta carpeta, Cantata almacenará los ficheros en su "
+#~ "carpeta de caché personal. Por otra parte, para flujos, si el usuario no "
+#~ "tiene permisos de escritura, sólo podrá ver (y reproducir) los flujos "
+#~ "almacenados en la carpeta de música, y no podrá añadir o editar ningún "
+#~ "flujo. Si se selecciona no almacenar los flujos en la carpeta de música, "
+#~ "entonces se almacenan en la carpeta de configuración personal del "
+#~ "personal, solo accesible por éste.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/"
+#~ "Tracks'.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Cantata solo puede guardar fondos e imágenes de artista a "
+#~ "dos niveles de profundidad dentro del directorio de música. (esto es, "
+#~ "\"Artista/Álbum/Pistas\")</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
+#~ "currently cannot upload files to external HTTP servers. Therefore, the "
+#~ "above settings should be left un-checked.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> El \"Directorio de música\" está definido con una "
+#~ "dirección de HTTP, y Cantata no puede enviar ficheros a servidores "
+#~ "externos HTTP. Por ello, no se deben seleccionar los ajustes que se "
+#~ "muestran arriba.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the play queue appears to the side of the "
+#~ "other views. If you enable the option above, then it will be merged into "
+#~ "the sidebar as per other views.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> De forma predefinida, la cola de reproducción se muestra "
+#~ "a un lado de las otras vistas. Si se activa la opción en la parte "
+#~ "superior, se incorporará a la barra lateral como las otras vistas.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
+#~ "accessible by pressing its icon in the main toolbar. If you enable the "
+#~ "option above, then it will be merged into the sidebar as per other views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> De forma predefinida, la vista 'Info' (información de "
+#~ "pista actual) es accesible pulsando su icono en la barra de herramientas "
+#~ "principal. Si se activa esta opción, se incorporará a la barra lateral "
+#~ "como las otras vistas.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "Carátulas:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b>Durante la búsqueda de imágenes de artista, Cantata "
+#~ "buscara artist.jpg, artist.png \"Artista\".jpg o \"Artista\".jpg\n"
+#~ "dentro del directorio de la pista actual, o dentro del directorio "
+#~ "superior. Si no se encuentra ninguna imagen, Cantata intentará descargar "
+#~ "una.</i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "Ordenar álbumes:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "Estilo de vista de directorios:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "Estilo de vista de flujos:"
+
+#~ msgid "Online view style:"
+#~ msgstr "Estilo de vista online:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "Estilo de vista de dispositivos:"
+
+#~ msgid "Search view style:"
+#~ msgstr "Estilo de vista de búsqueda:"
+
+#~ msgid "Cache scaled covers"
+#~ msgstr "Almacenar carátulas escaladas"
+
+#~ msgid ""
+#~ "<p>This will change Cantata's interface as detailed:\n"
+#~ "<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views "
+#~ "will be 'flickable'</li><li>To drag items, you will need to 'touch' the "
+#~ "top-left corner</li><li>Scrollbars will only be a few pixels wide</"
+#~ "li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not "
+#~ "just when item is under mouse)</li><li>Spin buttons with have + and - "
+#~ "buttons at the side of the text field</li></ul></p>"
+#~ msgstr ""
+#~ "<p>Esto modifica la interfaz de Cantata de la forma siguiente:\n"
+#~ "<ul><li>Los botones de reproducción y control son un 33% más grandes.</"
+#~ "li><li>Las vistas serán \"hojeables\".</li><li>Para arrastrar elementos, "
+#~ "se deberá \"tocar\" la esquina superior izquierda.</li><li>Las barras de "
+#~ "desplazamiento tendrán un ancho de solo unos píxeles.</li><li>Las "
+#~ "acciones (por ejemplo, \"Añadir a la lista de reproducción\") siempre "
+#~ "serán visibles (no solo cuando el elemento está debajo del ratón).</li></"
+#~ "li>Los botones giratorios tendrán botones + y - a los lados del campo de "
+#~ "texto.</li></ul></p>"
+
+#~ msgid "Show stop button in toolbar"
+#~ msgstr "Mostrar botón de detener en la barra de herramientas"
+
+#~ msgid "Show cover of current track in toolbar"
+#~ msgstr "Mostrar la carátula de la pista actual en la barra de herramientas"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Cantata requiere reiniciar si se modifica la opción "
+#~ "«Forzar la activación de elementos con un solo clic».</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Modificar el ajuste de idioma requiere reiniciar Cantata."
+#~ "</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
+#~ "start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Modificar el ajuste \"táctil\" requiere reiniciar Cantata."
+#~ "</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si mantiene pulsado el botón de detener, se muestra un "
+#~ "menú que permite seleccionar si detener la reproducción inmediatamente o "
+#~ "después de la pista actual.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Las opciones de «Directorio de música» se utilizan para "
+#~ "obtener las carátulas (con el valor definido anteriormente, o, si no se "
+#~ "define, <code>cover.jpg / cover.png</code>). Si también tiene permisos de "
+#~ "escritura en el directorio (y subdirectorios), Cantata guardará cualquier "
+#~ "portada descargada en la carpeta respectiva de cada álbum.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD "
+#~ "configured to output to a HTTP stream, and you wish Cantata to be able to "
+#~ "play that stream.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTE:</b> 'URL de flujo HTTP' solo es útil si MPD esta configurado "
+#~ "para una salida mediante flujo HTTP, y desea que Cantata puede reproducir "
+#~ "ese flujo.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si modifica la opción «Carpeta de música», tendrá que "
+#~ "actualizar manualmente la base de datos de música. Esto se puede hacer "
+#~ "pulsando el botón «Actualizar base de datos» en las vistas de «Artistas» "
+#~ "o «Álbumes».</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>NOTE:</b> Si no se define ninguna opción para «Nombre de fichero de "
+#~ "carátula», Cantata utilizará un valor predefinido <code>cover</code> </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Habitualmente, MPD solo reproduce canciones almacenadas "
+#~ "en sus carpetas. Cantata incorpora un servidor HTTP básico que sirve para "
+#~ "introducir otras canciones a MPD. No obstante, solo funciona mientras "
+#~ "Cantata está en ejecución.<br/><br/>\n"
+#~ "<b>NOTA:</b> Si selecciona «Loopback local» para «Interfaz de red», MPD "
+#~ "<b>debe</b> estar presente en este sistema</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio."
+#~ "com, RockRadio.com, and Sky.fm</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Estos ajustes se aplican a Importado digitalmente, "
+#~ "JazzRadio.com, RockRadio.com, y Sky.fm</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter account details, then a 'DI' status item "
+#~ "will appear under the list of streams. This will indicate if you are "
+#~ "logged in or not</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si se introducen detalles de cuenta, se muestra un "
+#~ "elemento de estado \"DI\" bajo la lista de flujos. Esto indica si ha "
+#~ "iniciado sesión o no.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot "
+#~ "be removed.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Las categorías integradas se muestran en itálica, y no se "
+#~ "pueden eliminar.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
+#~ "'Rock;Hard Rock')</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA</b> Varios géneros se deben separa mediante un punto y coma (p."
+#~ "ej. 'Rock;Hard Rock')</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "¿Desea analizar <b>todas</b>las pistas?<br><br><i>NOTA: Todas las pistas "
+#~ "ya tienen etiquetas ReplayGain.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via "
+#~ "MPD)' (such as %1), then you will need to have this already started and "
+#~ "running. Cantata can only 'Love' tracks via this, and cannot enable/"
+#~ "disable scrobbling.</i>"
+#~ msgstr ""
+#~ "<i><b>NOTA:</b> Si se utiliza un \"scrobbler\" marcado como '(mediante "
+#~ "MPD)' (como %1), deberá estar iniciado y en funcionamiento. Cantata solo "
+#~ "puede marcar pistas como favorito de esta forma, y no puede activar/"
+#~ "desactivar el registro de pistas escuchadas.</i>"
+
+#~ msgid "Failed to install <b>%1</b>"
+#~ msgstr "Fallo al instalar <b>%1</b>"
+
+#~ msgid "Failed to download <b>%1</b>"
+#~ msgstr "Fallo al descargar <b>%1</b>"
+
+#~ msgid "ListenLive"
+#~ msgstr "ListenLive"
+
+#~ msgid "Install the following?"
+#~ msgstr "¿Desea instalar los siguientes?"
+
+#~ msgid "Update the following?"
+#~ msgstr "¿Desea actualizar los siguientes?"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "Fallo al crear <b>%1</b>."
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "El flujo ya existe.<br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "Ya existe un flujo llamado <b>%1</b>."
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "¿Actualizar <b>%1</b> flujos?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "¿Seguro que desea eliminar el favorito a <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "¿Seguro que desea eliminar todos los favoritos <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "¿Desea eliminar <b>%1</b>?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr ""
+#~ "Se ha detectado una categoría llamada <b>%1</b><br/>. ¿Sobrescribir?"
+
+#~ msgid "Failed top open package file"
+#~ msgstr "Fallo al abrir el fichero de paquete"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "¿Desea poner en mayúscula la primera letra de «Título», «Artista», "
+#~ "«Artista del álbum», y «Álbum» para <b>todas</b> las pistas?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "El fichero fuente no existe.<br/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "El fichero de destino ya existe.<br/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "Fallo al crear el directorio de destino. <br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "Fallo al renombrar %1 a %2"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music "
+#~ "folder\" setting, and MPD's \"music_directory\" setting.</p>"
+#~ msgstr ""
+#~ "<p>No se puede acceder a los ficheros de canciones.<br/><br/>Comrpuebe el "
+#~ "ajuste \"Directorio de música\" de Cantata, y el ajuste \"music_directory"
+#~ "\" de MPD.</p>"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check that the device is "
+#~ "still attached.</p>"
+#~ msgstr ""
+#~ "<p>No se puede acceder a los ficheros de canciones.<br/><br/>Compruebe "
+#~ "que el dispositivo sigue conectado.</p>"
+
#~ msgid "TextLabel"
#~ msgstr "TextLabel"
@@ -7251,9 +8075,6 @@ msgstr "%1 actualizaciones disponibles"
#~ msgid " seconds"
#~ msgstr " segundos"
-#~ msgid "Devices:"
-#~ msgstr "Dispositivos:"
-
#~ msgid "Current URL:"
#~ msgstr "URL actual:"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..758e4f7
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,6877 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
+"PO-Revision-Date: 2014-10-14 23:30+0100\n"
+"Last-Translator: Jaussoin Timothée <edhelas at movim.eu>\n"
+"Language-Team: \n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#: context/albumview.cpp:63
+msgid "Refresh Album Information"
+msgstr "Rafraîchir les informations de l'album"
+
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
+#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
+msgid "Album"
+msgstr "Album"
+
+#. i18n: file: devices/albumdetails.ui:136
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
+#: context/albumview.cpp:175 models/playqueuemodel.cpp:251 po/rc.cpp:116
+#: rc.cpp:116
+msgid "Tracks"
+msgstr "Pistes"
+
+#: context/artistview.cpp:100
+msgid "Refresh Artist Information"
+msgstr "Rafraîchir les informations de l'artiste"
+
+#. i18n: file: devices/albumdetails.ui:163
+#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
+#: replaygain/rgdialog.cpp:107 rc.cpp:122
+msgid "Artist"
+msgstr "Artiste"
+
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
+msgid "Albums"
+msgstr "Albums"
+
+#: context/artistview.cpp:367
+msgid "Web Links"
+msgstr "Liens Web"
+
+#: context/artistview.cpp:454
+msgid "Similar Artists"
+msgstr "Artistes similaires"
+
+#: context/contextsettings.cpp:36
+msgid "Lyrics Providers"
+msgstr "Fournisseur de paroles"
+
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
+msgid "Wikipedia Languages"
+msgstr "Langues Wikipédia"
+
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
+msgid "Other"
+msgstr "Autre"
+
+#: context/contextwidget.cpp:211
+msgid "Reset Spacing"
+msgstr "Réinitialiser l'espacement"
+
+#: context/contextwidget.cpp:369
+msgid "&Artist"
+msgstr "&Artiste"
+
+#: context/contextwidget.cpp:370
+msgid "Al&bum"
+msgstr "Al&bum"
+
+#: context/contextwidget.cpp:371
+msgid "&Track"
+msgstr "&Piste"
+
+#: context/lastfmengine.cpp:63
+msgid "Read more on last.fm"
+msgstr "Continuer la lecture sur last.fm"
+
+#: context/lyricsdialog.cpp:39
+msgid ""
+"If Cantata has failed to find lyrics, or has found the wrong ones, use this "
+"dialog to enter new search details. For example, the current song may "
+"actually be a cover-version - if so, then searching for lyrics by the "
+"original artist might help.\n"
+"\n"
+"If this search does find new lyrics, these will still be associated with the "
+"original song title and artist as displayed in Cantata."
+msgstr ""
+"Si Cantata n'a pas trouvé de paroles, ou n'a pas trouvé les bonnes, utilisez "
+"cette fenêtre pour entrer de nouveaux paramètres de recherche. Par exemple, "
+"la chanson dont vous cherchez les paroles est peut-être une reprise - dans "
+"ce cas, chercher les paroles de la version originale peut donner de "
+"meilleurs résultats.\n"
+"\n"
+"Si cette recherche donne de nouveaux résultats, ils seront toujours associés "
+"avec le titre et l'artiste de la version originale dans l'affichage de "
+"Cantata."
+
+#. i18n: file: devices/albumdetails.ui:63
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: dynamic/dynamicrule.ui:115
+#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
+#. i18n: file: tags/tageditor.ui:54
+#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
+#. i18n: file: devices/albumdetails.ui:63
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: dynamic/dynamicrule.ui:115
+#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
+#. i18n: file: tags/tageditor.ui:54
+#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
+msgid "Title:"
+msgstr "Titre:"
+
+#. i18n: file: devices/albumdetails.ui:37
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: dynamic/dynamicrule.ui:50
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: tags/tageditor.ui:67
+#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
+#. i18n: file: devices/albumdetails.ui:37
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: dynamic/dynamicrule.ui:50
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: tags/tageditor.ui:67
+#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
+msgid "Artist:"
+msgstr "Artiste:"
+
+#: context/lyricsdialog.cpp:65
+msgid "Search For Lyrics"
+msgstr "Rechercher des paroles"
+
+#: context/lyricsettings.cpp:35
+msgid "Choose the websites you want to use when searching for lyrics."
+msgstr "Choisissez les sites sources pour la recherche de paroles."
+
+#: context/onlineview.cpp:31
+msgid "Song Information"
+msgstr "Informations sur la piste"
+
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
+msgid "Images (*.png *.jpg)"
+msgstr "Images (*.png *.jpg)"
+
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
+msgctxt "pixels"
+msgid "10px"
+msgstr "10px"
+
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
+msgctxt "value%"
+msgid "%1%"
+msgstr "%1%"
+
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
+#, c-format
+msgctxt "pixels"
+msgid "%1px"
+msgstr "%1px"
+
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
+msgid "Lyrics"
+msgstr "Paroles"
+
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
+msgid "Information"
+msgstr "Informations"
+
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr "Métadonnées"
+
+#: context/songview.cpp:136
+msgid "Scroll Lyrics"
+msgstr ""
+
+#: context/songview.cpp:137
+msgid "Refresh Lyrics"
+msgstr "Rafraîchir les paroles"
+
+#: context/songview.cpp:138
+msgid "Edit Lyrics"
+msgstr "Éditer les paroles"
+
+#: context/songview.cpp:139
+msgid "Delete Lyrics File"
+msgstr "Supprimer le fichier contenant les paroles"
+
+#: context/songview.cpp:150
+msgid "Refresh Track Information"
+msgstr "Rafraîchir les informations sur la piste"
+
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
+msgid "Cancel"
+msgstr "Annuler"
+
+#. i18n: file: devices/albumdetails.ui:158
+#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
+#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
+msgid "Track"
+msgstr "Piste"
+
+#: context/songview.cpp:185
+msgid ""
+"Reload lyrics?\n"
+"\n"
+"Reload from disk, or delete disk copy and download?"
+msgstr ""
+"Recharger les paroles ?\n"
+"\n"
+"Recharger depuis le disque, ou effacer la copie disque et télécharger ?"
+
+#: context/songview.cpp:185 context/wikipediasettings.cpp:94
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
+msgid "Reload"
+msgstr "Rafraîchir"
+
+#: context/songview.cpp:186
+msgid "Reload From Disk"
+msgstr "Rafraîchir à partir du disque"
+
+#: context/songview.cpp:186
+msgid "Download"
+msgstr "Télécharger"
+
+#: context/songview.cpp:218
+msgid "Current playing song has changed, still perform search?"
+msgstr "La piste courante a changé, continuer la recherche ?"
+
+#: context/songview.cpp:218
+msgid "Song Changed"
+msgstr "Piste modifiée"
+
+#: context/songview.cpp:219
+msgid "Perform Search"
+msgstr "Effectuer la recherche"
+
+#: context/songview.cpp:241
+msgid "Delete lyrics file?"
+msgstr "Supprimer les paroles ?"
+
+#: context/songview.cpp:241
+msgid "Delete File"
+msgstr "Supprimer le fichier"
+
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
+msgid "Album artist"
+msgstr "Artiste de l'album"
+
+#. i18n: file: devices/filenameschemedialog.ui:102
+#. i18n: ectx: property (text), widget (QPushButton, composer)
+#: context/songview.cpp:498 context/songview.cpp:578
+#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
+msgid "Composer"
+msgstr "Compositeur"
+
+#: context/songview.cpp:500
+msgid "Lyricist"
+msgstr "Parolier"
+
+#: context/songview.cpp:501
+msgid "Conductor"
+msgstr "Chef d'orchestre"
+
+#: context/songview.cpp:502
+msgid "Remixer"
+msgstr "Remixeur"
+
+#: context/songview.cpp:504
+msgid "Subtitle"
+msgstr "Sous-titre"
+
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
+msgid "Track number"
+msgstr "Piste numéro"
+
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
+msgid "Disc number"
+msgstr "Disque numéro"
+
+#. i18n: file: devices/filenameschemedialog.ui:184
+#. i18n: ectx: property (text), widget (QPushButton, genre)
+#. i18n: file: dynamic/dynamicrule.ui:128
+#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
+#. i18n: file: devices/filenameschemedialog.ui:184
+#. i18n: ectx: property (text), widget (QPushButton, genre)
+#. i18n: file: dynamic/dynamicrule.ui:128
+#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
+#: context/songview.cpp:507 context/songview.cpp:583
+#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
+msgid "Genre"
+msgstr "Genre"
+
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
+msgid "Date"
+msgstr "Date"
+
+#: context/songview.cpp:509
+msgid "Original date"
+msgstr "Date originale"
+
+#: context/songview.cpp:510 context/songview.cpp:585
+#: dynamic/dynamicrulesdialog.cpp:74
+msgid "Comment"
+msgstr "Commentaire"
+
+#: context/songview.cpp:511
+msgid "Copyright"
+msgstr "Copyright"
+
+#: context/songview.cpp:512
+msgid "Label"
+msgstr "Label"
+
+#: context/songview.cpp:513
+msgid "Catalogue number"
+msgstr "Numéro du catalogue"
+
+#: context/songview.cpp:514
+msgid "Title sort"
+msgstr "Trier par titre"
+
+#: context/songview.cpp:515
+msgid "Artist sort"
+msgstr "Trier par artiste"
+
+#: context/songview.cpp:516
+msgid "Album artist sort"
+msgstr "Trier par artiste de l'album"
+
+#: context/songview.cpp:517
+msgid "Album sort"
+msgstr "Trier par album"
+
+#: context/songview.cpp:518
+msgid "Encoded by"
+msgstr "Encodé par"
+
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
+msgid "Encoder"
+msgstr "Encodeur"
+
+#: context/songview.cpp:520
+msgid "Mood"
+msgstr "Humeur"
+
+#: context/songview.cpp:521
+msgid "Media"
+msgstr "Média"
+
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
+msgid "Bitrate"
+msgstr "Débit binaire"
+
+#: context/songview.cpp:523 context/songview.cpp:564
+msgid "Sample rate"
+msgstr "Échantillonnage"
+
+#: context/songview.cpp:524 context/songview.cpp:567
+msgid "Channels"
+msgstr "Canaux"
+
+#: context/songview.cpp:526
+msgid "Tagging time"
+msgstr "Date de l’étiquetage "
+
+#: context/songview.cpp:548
+msgid "Performer (%1)"
+msgstr "Interprète (%1)"
+
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr "%1 kb/s"
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr "%1 Hz"
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr "Bits"
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
+msgid "Performer"
+msgstr "Interprète"
+
+#. i18n: file: devices/filenameschemedialog.ui:174
+#. i18n: ectx: property (text), widget (QPushButton, year)
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
+msgid "Year"
+msgstr "Année"
+
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr "Nom du fichier"
+
+#: context/songview.cpp:845
+msgid "Fetching lyrics via %1"
+msgstr "Recherche des paroles via %1"
+
+#: context/ultimatelyricsprovider.cpp:200
+msgid "(Polish Translations)"
+msgstr "(Traduction polonaise)"
+
+#: context/ultimatelyricsprovider.cpp:201
+msgid "(Portuguese Translations)"
+msgstr "(Traduction portugaise)"
+
+#: context/wikipediaengine.cpp:249
+msgid "Track listing"
+msgstr "Liste des pistes"
+
+#: context/wikipediaengine.cpp:302
+msgid "Read more on wikipedia"
+msgstr "Lire plus sur Wikipédia"
+
+#: context/wikipediaengine.cpp:303
+msgid "Open in browser"
+msgstr "Ouvrir dans le navigateur"
+
+#: context/wikipediaengine.cpp:448
+msgctxt "Search pattern for an artist or band, separated by |"
+msgid "artist|band|singer|vocalist|musician"
+msgstr "artiste|groupe|chanteur|vocaliste|musicien"
+
+#: context/wikipediaengine.cpp:452
+msgctxt "Search pattern for an album, separated by |"
+msgid "album|score|soundtrack"
+msgstr "album|partition|bande"
+
+#: context/wikipediasettings.cpp:93
+msgid ""
+"Choose the wikipedia languages you want to use when searching for artist and "
+"album information."
+msgstr ""
+"Choisissez les langues Wikipédia à utiliser lors de la recherche "
+"d'informations sur les artistes et albums."
+
+#: dbus/powermanagement.cpp:83
+msgid "Cantata is playing a track"
+msgstr "Cantata est en train de lire une piste"
+
+#: devices/actiondialog.cpp:83
+msgid "Songs To Be Copied"
+msgstr "Piste à copier"
+
+#: devices/actiondialog.cpp:151
+msgid "<b>INVALID</b>"
+msgstr "<b>INVALIDE</b>"
+
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
+msgid "<i>(When different)</i>"
+msgstr "<i>(Si différent)</i>"
+
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
+msgid ""
+"Cantata has detected that you are connected to a Mopidy server.\n"
+"\n"
+"Currently it is not possible for Cantata to force Mopidy to refresh its "
+"local music listing. Therefore, you will need to stop Cantata, manually "
+"refresh Mopidy's database, and restart Cantata for any changes to be active."
+msgstr ""
+"Cantata a détecté que vous êtes connecté à un serveur Mopidy.\n"
+"\n"
+"Il est actuellement impossible de rafraîchir la liste des musiques locales "
+"de Mopidy depuis Cantata. Vous devez donc fermer Cantata, rafraîchir "
+"manuellement la base de données de Mopody et redémarrer Cantata pour prendre "
+"en compte les changements."
+
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
+msgid "Artists:%1, Albums:%2, Songs:%3"
+msgstr "Artistes:%1, Albums:%2, Pistes:%3"
+
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
+#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
+msgid "%1 free"
+msgstr "%1 libre"
+
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
+msgid "Local Music Library"
+msgstr "Bibliothèque musicale locale"
+
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
+msgid "Audio CD"
+msgstr "CD Audio"
+
+#: devices/actiondialog.cpp:323
+msgid ""
+"There is insufficient space left on the destination device.\n"
+"\n"
+"The selected songs consume %1, but there is only %2 left.\n"
+"The songs will need to be transcoded to a smaller filesize in order to be "
+"successfully copied."
+msgstr ""
+"Il n'y a pas assez d'espace libre sur le périphérique.\n"
+"\n"
+"Les pistes sélectionnées occupent %1, mais il ne reste que %2 de libre.\n"
+"Les pistes doivent être converties vers un format plus léger afin d'être "
+"copiées sur le périphérique."
+
+#: devices/actiondialog.cpp:330
+msgid ""
+"There is insufficient space left on the destination.\n"
+"\n"
+"The selected songs consume %1, but there is only %2 left."
+msgstr ""
+"Il n'y a pas assez d'espace libre sur le périphérique.\n"
+"\n"
+"Les pistes sélectionnées occupent %1, mais il ne reste que %2 de libre."
+
+#: devices/actiondialog.cpp:379
+msgid "Copy Songs"
+msgstr "Copier les pistes"
+
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
+msgid "Delete Songs"
+msgstr "Supprimer les pistes"
+
+#: devices/actiondialog.cpp:416
+msgid ""
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
+msgstr ""
+"Vous n'avez pas configuré le périphérique de destination.\n"
+"\n"
+"Continuer avec la configuration par défaut ?"
+
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
+msgid "Not Configured"
+msgstr "Non configuré"
+
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
+msgid "Use Defaults"
+msgstr "Utiliser la configuration par défaut"
+
+#: devices/actiondialog.cpp:420
+msgid ""
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
+msgstr ""
+"Vous n'avez pas configuré le périphérique source.\n"
+"\n"
+"Continuer avec les paramètres par défaut ?"
+
+#: devices/actiondialog.cpp:482
+msgid "Are you sure you wish to stop?"
+msgstr "Êtes vous sûr de vouloir arrêter ?"
+
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
+msgid "Stop"
+msgstr "Arrêter"
+
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
+msgid "Device has been removed!"
+msgstr "Le périphérique a été retiré !"
+
+#: devices/actiondialog.cpp:529
+msgid "Device is not connected!"
+msgstr "Le périphérique n'est pas connecté !"
+
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
+msgid "Device is busy?"
+msgstr "Le périphérique est occupé ?"
+
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
+msgid "Device has been changed?"
+msgstr "Le périphérique a été changé ?"
+
+#: devices/actiondialog.cpp:600
+msgid "Clearing unused folders"
+msgstr "Nettoyage des dossiers non utilisés"
+
+#: devices/actiondialog.cpp:615
+msgid "Calculate ReplayGain for ripped tracks?"
+msgstr "Calculer le ReplayGain des pistes extraites ?"
+
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
+msgstr "ReplayGain"
+
+#: devices/actiondialog.cpp:616
+msgid "Calculate"
+msgstr "Calculer"
+
+#: devices/actiondialog.cpp:675
+msgid "The destination filename already exists!"
+msgstr "Le fichier de destination existe déjà !"
+
+#: devices/actiondialog.cpp:678
+msgid "Song already exists!"
+msgstr "La piste existe déjà !"
+
+#: devices/actiondialog.cpp:681
+msgid "Song does not exist!"
+msgstr "La piste n'existe pas !"
+
+#: devices/actiondialog.cpp:684
+msgid ""
+"Failed to create destination folder!<br/>Please check you have sufficient "
+"permissions."
+msgstr ""
+"La création du dossier de destination a échoué !<br/>Veuillez vérifier que "
+"vous avez les permissions requises."
+
+#: devices/actiondialog.cpp:687
+msgid "Source file no longer exists?"
+msgstr "Le fichier source ne semble plus exister ?"
+
+#: devices/actiondialog.cpp:690
+msgid "Failed to copy."
+msgstr "Copie échouée."
+
+#: devices/actiondialog.cpp:690
+msgid "Failed to delete."
+msgstr "Suppression impossible."
+
+#: devices/actiondialog.cpp:693
+msgid "Not connected to device."
+msgstr "Non connecté au périphérique."
+
+#: devices/actiondialog.cpp:696
+msgid "Selected codec is not available."
+msgstr "Le codec sélectionné n'est pas disponible."
+
+#: devices/actiondialog.cpp:699
+msgid "Transcoding failed."
+msgstr "Le transcodage a échoué."
+
+#: devices/actiondialog.cpp:702
+msgid ""
+"Failed to create temporary file.<br/>(Required for transcoding to MTP "
+"devices.)"
+msgstr ""
+"La création du fichier temporaire a échoué.<br/>(Requis pour transcoder vers "
+"les périphériques MTP.)"
+
+#: devices/actiondialog.cpp:705
+msgid "Failed to read source file."
+msgstr "La création du fichier source a échoué."
+
+#: devices/actiondialog.cpp:708
+msgid "Failed to write to destination file."
+msgstr "L'écriture du fichier cible a échoué."
+
+#: devices/actiondialog.cpp:711
+msgid "No space left on device."
+msgstr "Plus d'espace restant sur le périphérique."
+
+#: devices/actiondialog.cpp:714
+msgid "Failed to update metadata."
+msgstr "La mise à jour des métadonnées a échoué"
+
+#: devices/actiondialog.cpp:717
+msgid "Failed to download track."
+msgstr "Le téléchargement de la piste a échoué."
+
+#: devices/actiondialog.cpp:720
+msgid "Failed to lock device."
+msgstr "Le verrouillage du périphérique a échoué."
+
+#: devices/actiondialog.cpp:749
+msgid "Local Music Library Properties"
+msgstr "Propriétés de la Bibliothèque Musicale Locale"
+
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
+msgid "Error"
+msgstr "Erreur"
+
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
+msgid "Skip"
+msgstr "Passer"
+
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
+msgid "Auto Skip"
+msgstr "Saut automatique"
+
+#: devices/actiondialog.cpp:800
+msgid "Retry"
+msgstr "Réessayer"
+
+#. i18n: file: dynamic/dynamicrule.ui:102
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: tags/tageditor.ui:106
+#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
+#. i18n: file: dynamic/dynamicrule.ui:102
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: tags/tageditor.ui:106
+#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
+msgid "Album:"
+msgstr "Album:"
+
+#. i18n: file: tags/tageditor.ui:34
+#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
+msgid "Track:"
+msgstr "Piste:"
+
+#: devices/actiondialog.cpp:821
+msgid "Source file:"
+msgstr "Fichier source:"
+
+#: devices/actiondialog.cpp:822
+msgid "Destination file:"
+msgstr "Fichier de destination:"
+
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
+msgid "File:"
+msgstr "Fichier:"
+
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
+msgid "Calculating..."
+msgstr "Calcul en cours…"
+
+#: devices/actiondialog.cpp:837
+msgctxt "time (Estimated)"
+msgid "%1 (Estimated)"
+msgstr "%1 (Estimé)"
+
+#: devices/actiondialog.cpp:839
+msgid "Time remaining:"
+msgstr "Temps restant:"
+
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
+msgid "Saving cache"
+msgstr "Sauvegarde du cache"
+
+#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
+msgid "Apply \"Various Artists\" Workaround"
+msgstr "Appliquer l'alternative \"Artistes divers\""
+
+#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
+msgid "Revert \"Various Artists\" Workaround"
+msgstr "Révoquer l'alternative \"Artistes divers\""
+
+#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
+msgid "Capitalize"
+msgstr "Mettre une majuscule"
+
+#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
+msgid "Adjust Track Numbers"
+msgstr "Ajuster les numéros des pistes"
+
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
+msgid "Tools"
+msgstr "Outils"
+
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
+msgid "Apply \"Various Artists\" workaround?"
+msgstr "Appliquer l'alternative \"Artistes divers\" ?"
+
+#: devices/albumdetailsdialog.cpp:234
+msgid ""
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
+msgstr ""
+"Cela remplacera 'Artiste album' et 'Artiste' par \"Artistes divers\", et "
+"'Titre' par \"Artiste piste - Titre de la piste\""
+
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr "Révoquer l'alternative \"Artistes divers\" ?"
+
+#: devices/albumdetailsdialog.cpp:255
+msgid ""
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
+msgstr ""
+"Lorsque la valeur de 'Artiste album' est la même que 'Artiste' et que celle "
+"de 'Titre' est au format \"Artiste piste - Titre de la piste\", 'Artiste' "
+"sera défini à partir de 'Titre' et 'Titre' sera réduit à la seule valeur du "
+"titre. e.g. \n"
+"Si 'Titre' est \"Toto - Tata\", alors 'Artiste' deviendra \"Toto\" et "
+"'Titre' sera \"Tata\""
+
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
+msgid "Revert"
+msgstr "Réinitialiser"
+
+#: devices/albumdetailsdialog.cpp:277
+msgid ""
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
+msgstr ""
+"Mettre une majuscule à 'Titre', 'Artiste', 'Artiste de l'album' et à "
+"'Album' ?"
+
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
+msgid "Adjust track number by:"
+msgstr "Ajuster les numéros des pistes par:"
+
+#: devices/audiocddevice.cpp:130
+msgid "Reading disc"
+msgstr "Lecture du disque"
+
+#: devices/audiocdsettings.cpp:38
+msgid "CDDB"
+msgstr "CDDB"
+
+#: devices/audiocdsettings.cpp:39
+msgid "MusicBrainz"
+msgstr "MusicBrainz"
+
+#: devices/cddbinterface.cpp:49
+msgid "Data Track"
+msgstr "Données de la piste"
+
+#: devices/cddbinterface.cpp:136 devices/musicbrainz.cpp:150
+msgid "Failed to open CD device"
+msgstr "L'ouverture du CD a échoué"
+
+#: devices/cddbinterface.cpp:161 devices/cddbinterface.cpp:187
+#: devices/musicbrainz.cpp:212
+msgid "Track %1"
+msgstr "Piste %1"
+
+#: devices/cddbinterface.cpp:277
+msgid "Failed to create CDDB connection"
+msgstr "La connexion à CDDB a échoué"
+
+#: devices/cddbinterface.cpp:283 devices/cddbinterface.cpp:310
+msgid "No matches found in CDDB"
+msgstr "Recherche CDDB infructueuse"
+
+#: devices/cddbinterface.cpp:291
+msgid "CDDB error: %1"
+msgstr "Erreur CDDB: %1"
+
+#: devices/cddbselectiondialog.cpp:38
+msgid "Multiple matches were found. Please choose the relevant one from below:"
+msgstr ""
+"Plusieurs résultats ont été trouvés. Veuillez sélectionner le résultat le "
+"plus pertinent dans la liste ci-dessous:"
+
+#. i18n: file: devices/albumdetails.ui:168
+#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
+#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
+msgid "Title"
+msgstr "Titre"
+
+#: devices/cddbselectiondialog.cpp:55
+msgid "Disc Selection"
+msgstr "Sélection du disque"
+
+#: devices/cddbselectiondialog.cpp:67
+msgctxt "artist - album Disc disc (year)"
+msgid "%1 -%2 Disc %3 (%4)"
+msgstr "%1 -%2 Disque %3 (%4)"
+
+#: devices/cddbselectiondialog.cpp:69
+msgctxt "artist - album (year)"
+msgid "%1 - %2 (%3)"
+msgstr "%1 - %2 (%3)"
+
+#: devices/device.cpp:355
+msgid "Updating (%1)..."
+msgstr "Mise à jour (%1)…"
+
+#: devices/device.cpp:360
+msgid "Updating (%1%)..."
+msgstr "Mise à jour (%1%)…"
+
+#: devices/devicepropertiesdialog.cpp:32
+#: devices/remotedevicepropertiesdialog.cpp:40
+msgid "Device Properties"
+msgstr "Propriétés du périphérique"
+
+#: devices/devicepropertieswidget.cpp:83
+msgid "Don't copy covers"
+msgstr "Ne pas copier les pochettes"
+
+#: devices/devicepropertieswidget.cpp:84
+msgid "Embed cover within each file"
+msgstr "Ajouter la pochette à chaque fichier"
+
+#: devices/devicepropertieswidget.cpp:90
+msgid "No maximum size"
+msgstr "Pas de taille maximum"
+
+#: devices/devicepropertieswidget.cpp:90
+msgid "400 pixels"
+msgstr "400 pixels"
+
+#: devices/devicepropertieswidget.cpp:90
+msgid "300 pixels"
+msgstr "300 pixels"
+
+#: devices/devicepropertieswidget.cpp:90
+msgid "200 pixels"
+msgstr "200 pixels"
+
+#: devices/devicepropertieswidget.cpp:90
+msgid "100 pixels"
+msgstr "100 pixels"
+
+#: devices/devicepropertieswidget.cpp:91
+msgid ""
+"<p>When copying tracks to a device, and the 'Album Artist' is set to "
+"'Various Artists', then Cantata will set the 'Artist' tag of all tracks to "
+"'Various Artists' and the track 'Title' tag to 'TrackArtist - TrackTitle'."
+"<hr/> When copying from a device, Cantata will check if 'Album Artist' and "
+"'Artist' are both set to 'Various Artists'. If so, it will attempt to "
+"extract the real artist from the 'Title' tag, and remove the artist name "
+"from the 'Title' tag.</p>"
+msgstr ""
+"<p>Lors de la copie de pistes vers un périphérique, au cours de laquelle la "
+"valeur de 'Artiste album' est remplacée par 'Artistes divers', Cantata "
+"remplacera l'étiquette 'Artiste' de toutes les pistes par 'Artistes divers' "
+"et l'étiquette 'Titre' de la piste par 'Artiste piste - Titre de la piste'."
+"<hr/> Lors de la copie depuis un périphérique, Cantata vérifiera si les "
+"valeurs de 'Artiste album' et 'Artiste' sont bien 'Artistes divers'. Auquel "
+"cas, il essaiera d'extraire le véritable artiste de l'étiquette 'Titre', "
+"puis de supprimer le nom de l'artiste de l'étiquette 'Titre'.</p>"
+
+#: devices/devicepropertieswidget.cpp:98
+msgid ""
+"<p>If you enable this, then Cantata will create a cache of the device's "
+"music library. This will help to speed up subsequent library scans (as the "
+"cache file will be used instead of having to read the tags of each file.)<hr/"
+"><b>NOTE:</b> If you use another application to update the device's library, "
+"then this cache will become out-of-date. To rectify this, simply click on "
+"the 'refresh' icon in the device list. This will cause the cache file to be "
+"removed, and the contents of the device re-scanned.</p>"
+msgstr ""
+"<p>Si vous activez cette option, Cantata créera un cache de la librairie "
+"musicale du périphérique. Cela permettra d'accélérer les analyses de la "
+"librairie (puisque le cache évitera la lecture des étiquettes de chaque "
+"fichier de la librairie.)<hr/><b>NOTE:</b> Si vous utilisez une autre "
+"application pour mettre à jour la librairie du périphérique, ce cache "
+"deviendra obsolète. Pour remédier à cela, cliquez simplement sur l'icône "
+"'rafraîchir' dans la liste des périphériques. Cela supprimera le fichier de "
+"cache et provoquera une nouvelle analyse du contenu du périphérique.</p>"
+
+#: devices/devicepropertieswidget.cpp:219
+msgid "Do not transcode"
+msgstr "Ne pas convertir"
+
+#: devices/devicepropertieswidget.cpp:241
+msgid "Transcode to %1"
+msgstr "Convertir vers %1"
+
+#: devices/devicepropertieswidget.cpp:272
+msgctxt "name (size free)"
+msgid "%1 (%2 free)"
+msgstr "%1 (%2 libre)"
+
+#: devices/devicespage.cpp:62 devices/syncdialog.cpp:103
+msgid "Copy To Library"
+msgstr "Copier vers la Librairie"
+
+#: devices/devicespage.cpp:64
+msgid "Sync"
+msgstr "Synchroniser"
+
+#: devices/devicespage.cpp:67
+msgid "Forget Device"
+msgstr "Oublier le périphérique"
+
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
+msgid "Add Device"
+msgstr "Ajouter le périphérique"
+
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
+msgid "Lookup album and track details?"
+msgstr "Voir les informations détaillées de l'album et des pistes ?"
+
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
+msgid "Refresh"
+msgstr "Rafraîchir"
+
+#: devices/devicespage.cpp:423
+msgid "Via CDDB"
+msgstr "Via CDDB"
+
+#: devices/devicespage.cpp:423
+msgid "Via MusicBrainz"
+msgstr "Via MusicBrainz"
+
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr "Quel type de rafraîchissement souhaitez-vous effectuer ?"
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr "Partiel - Seules les nouvelles pistes sont analysées (rapide)"
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr "Complet - Toutes les pistes sont analysées (lent)"
+
+#: devices/devicespage.cpp:447
+msgid "Partial"
+msgstr "Partiel"
+
+#: devices/devicespage.cpp:447
+msgid "Full"
+msgstr "Complet"
+
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
+msgid ""
+"Are you sure you wish to delete the selected songs?\n"
+"\n"
+"This cannot be undone."
+msgstr ""
+"Êtes-vous sûr de vouloir supprimer les pistes sélectionnées ?\n"
+"\n"
+"Cette action est définitive."
+
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "Êtes-vous sûr de vouloir oublier '%1' ?"
+
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr "Êtes-vous sûr de vouloir éjecter le CD Audio '%1 - %2' ?"
+
+#: devices/devicespage.cpp:541
+msgid "Eject"
+msgstr "Éjecter"
+
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr "Êtes-vous sûr de vouloir déconnecter '%1' ?"
+
+#: devices/devicespage.cpp:543
+msgid "Disconnect"
+msgstr "Déconnecter"
+
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
+msgid "Please close other dialogs first."
+msgstr "Veuillez fermer au préalable les autres boites de dialogue."
+
+#: devices/encoders.cpp:78
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/Advanced_Audio_Coding>Advanced Audio "
+"Coding</a> (AAC) is a patented lossy codec for digital audio.<br>AAC "
+"generally achieves better sound quality than MP3 at similar bit rates. It is "
+"a reasonable choice for the iPod and some other portable music players."
+msgstr ""
+"<a href=\"http://fr.wikipedia.org/wiki/Advanced_Audio_Coding\">Advanced "
+"Audio Coding</a> (AAC, « Encodage Audio Avancé » en français) est un "
+"algorithme de compression audio avec perte de données ayant pour but "
+"d’offrir un meilleur ratio Qualité/débit binaire que le format plus ancien "
+"MPEG-1/2 Audio Layer 3 (plus connu sous le nom de MP3). Pour cette raison, "
+"il a été choisi par différentes firmes comme Apple ou RealNetworks."
+
+#: devices/encoders.cpp:83
+msgid ""
+"The bitrate is a measure of the quantity of data used to represent a second "
+"of the audio track.<br>The <b>AAC</b> encoder used by Cantata supports a <a "
+"href=http://en.wikipedia.org/wiki/"
+"Variable_bitrate#Advantages_and_disadvantages_of_VBR>variable bitrate (VBR)</"
+"a> setting, which means that the bitrate value fluctuates along the track "
+"based on the complexity of the audio content. More complex intervals of data "
+"are encoded with a higher bitrate than less complex ones; this approach "
+"yields overall better quality and a smaller file than having a constant "
+"bitrate throughout the track.<br>For this reason, the bitrate measure in "
+"this slider is just an estimate of the <a href=http://www.ffmpeg.org/faq."
+"html#SEC21>average bitrate</a> of the encoded track.<br><b>150kb/s</b> is a "
+"good choice for music listening on a portable player.<br/>Anything below "
+"<b>120kb/s</b> might be unsatisfactory for music and anything above <b>200kb/"
+"s</b> is probably overkill."
+msgstr ""
+
+#: devices/encoders.cpp:101 devices/encoders.cpp:141
+msgid "Expected average bitrate for variable bitrate encoding"
+msgstr "Taux de compression moyen estimé pour un encodage à taux variable"
+
+#: devices/encoders.cpp:113 devices/encoders.cpp:152 devices/encoders.cpp:197
+#: devices/encoders.cpp:233 devices/encoders.cpp:293 devices/encoders.cpp:329
+msgid "Smaller file"
+msgstr "Fichier plus petit"
+
+#: devices/encoders.cpp:114 devices/encoders.cpp:153 devices/encoders.cpp:198
+#: devices/encoders.cpp:234 devices/encoders.cpp:330
+msgid "Better sound quality"
+msgstr "Meilleure qualité audio."
+
+#: devices/encoders.cpp:120
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/MP3>MPEG Audio Layer 3</a> (MP3) is a "
+"patented digital audio codec using a form of lossy data compression.<br>In "
+"spite of its shortcomings, it is a common format for consumer audio storage, "
+"and is widely supported on portable music players."
+msgstr ""
+
+#: devices/encoders.cpp:124
+msgid ""
+"The bitrate is a measure of the quantity of data used to represent a second "
+"of the audio track.<br>The <b>MP3</b> encoder used by Cantata supports a <a "
+"href=http://en.wikipedia.org/wiki/MP3#VBR>variable bitrate (VBR)</a> "
+"setting, which means that the bitrate value fluctuates along the track based "
+"on the complexity of the audio content. More complex intervals of data are "
+"encoded with a higher bitrate than less complex ones; this approach yields "
+"overall better quality and a smaller file than having a constant bitrate "
+"throughout the track.<br>For this reason, the bitrate measure in this slider "
+"is just an estimate of the average bitrate of the encoded track.<br><b>160kb/"
+"s</b> is a good choice for music listening on a portable player.<br/"
+">Anything below <b>120kb/s</b> might be unsatisfactory for music and "
+"anything above <b>205kb/s</b> is probably overkill."
+msgstr ""
+
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+#: devices/encoders.cpp:159
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/Vorbis>Ogg Vorbis</a> is an open and "
+"royalty-free audio codec for lossy audio compression.<br>It produces smaller "
+"files than MP3 at equivalent or higher quality. Ogg Vorbis is an all-around "
+"excellent choice, especially for portable music players that support it."
+msgstr ""
+
+#: devices/encoders.cpp:164
+msgid ""
+"The bitrate is a measure of the quantity of data used to represent a second "
+"of the audio track.<br>The <b>Vorbis</b> encoder used by Cantata supports a "
+"<a href=http://en.wikipedia.org/wiki/Vorbis#Technical_Encoder>variable "
+"bitrate (VBR)</a> setting, which means that the bitrate value fluctuates "
+"along the track based on the complexity of the audio content. More complex "
+"intervals of data are encoded with a higher bitrate than less complex ones; "
+"this approach yields overall better quality and a smaller file than having a "
+"constant bitrate throughout the track.<br>The Vorbis encoder uses a quality "
+"rating between -1 and 10 to define a certain expected audio quality level. "
+"The bitrate measure in this slider is just a rough estimate (provided by "
+"Vorbis) of the average bitrate of the encoded track given a quality value. "
+"In fact, with newer and more efficient Vorbis versions the actual bitrate is "
+"even lower.<br><b>5</b> is a good choice for music listening on a portable "
+"player.<br/>Anything below <b>3</b> might be unsatisfactory for music and "
+"anything above <b>8</b> is probably overkill."
+msgstr ""
+
+#: devices/encoders.cpp:184
+msgid "Quality rating"
+msgstr "Niveau de qualité"
+
+#: devices/encoders.cpp:201
+msgid "Opus"
+msgstr "Opus"
+
+#: devices/encoders.cpp:204
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/Opus_(audio_format)>Opus</a> is a "
+"patent-free digital audio codec using a form of lossy data compression."
+msgstr ""
+
+#: devices/encoders.cpp:206
+msgid ""
+"The bitrate is a measure of the quantity of data used to represent a second "
+"of the audio track.<br>The <b>Opus</b> encoder used by Cantata supports a <a "
+"href=http://en.wikipedia.org/wiki/Variable_bitrate>variable bitrate (VBR)</"
+"a> setting, which means that the bitrate value fluctuates along the track "
+"based on the complexity of the audio content. More complex intervals of data "
+"are encoded with a higher bitrate than less complex ones; this approach "
+"yields overall better quality and a smaller file than having a constant "
+"bitrate throughout the track.<br>For this reason, the bitrate measure in "
+"this slider is just an estimate of the average bitrate of the encoded track."
+"<br><b>128kb/s</b> is a good choice for music listening on a portable player."
+"<br/>Anything below <b>100kb/s</b> might be unsatisfactory for music and "
+"anything above <b>256kb/s</b> is probably overkill."
+msgstr ""
+
+#: devices/encoders.cpp:242
+msgid "Apple Lossless"
+msgstr "Apple Lossless"
+
+#: devices/encoders.cpp:245
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/Apple_Lossless>Apple Lossless</a> "
+"(ALAC) is an audio codec for lossless compression of digital music."
+"<br>Recommended only for Apple music players and players that do not support "
+"FLAC."
+msgstr ""
+
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
+msgid "FLAC"
+msgstr "FLAC"
+
+#: devices/encoders.cpp:263
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/Free_Lossless_Audio_Codec>Free Lossless "
+"Audio Codec</a> (FLAC) is an open and royalty-free codec for lossless "
+"compression of digital music.<br>If you wish to store your music without "
+"compromising on audio quality, FLAC is an excellent choice."
+msgstr ""
+
+#: devices/encoders.cpp:267
+msgid ""
+"The <a href=http://flac.sourceforge.net/documentation_tools_flac."
+"html>compression level</a> is an integer value between 0 and 8 that "
+"represents the tradeoff between file size and compression speed while "
+"encoding with <b>FLAC</b>.<br/> Setting the compression level to <b>0</b> "
+"yields the shortest compression time but generates a comparably big file.<br/"
+">On the other hand, a compression level of <b>8</b> makes compression quite "
+"slow but produces the smallest file.<br/>Note that since FLAC is by "
+"definition a lossless codec, the audio quality of the output is exactly the "
+"same regardless of the compression level.<br/>Also, levels above <b>5</b> "
+"dramatically increase compression time but create an only slightly smaller "
+"file, and are not recommended."
+msgstr ""
+
+#: devices/encoders.cpp:282
+msgid "Compression level"
+msgstr "Niveau de compression"
+
+#: devices/encoders.cpp:292
+msgid "Faster compression"
+msgstr "Compression rapide"
+
+#: devices/encoders.cpp:299
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+#: devices/encoders.cpp:302
+msgctxt ""
+"Feel free to redirect the english Wikipedia link to a local version, if it "
+"exists."
+msgid ""
+"<a href=http://en.wikipedia.org/wiki/Windows_Media_Audio>Windows Media "
+"Audio</a> (WMA) is a proprietary codec developed by Microsoft for lossy "
+"audio compression.<br>Recommended only for portable music players that do "
+"not support Ogg Vorbis."
+msgstr ""
+
+#: devices/encoders.cpp:306
+msgid ""
+"The bitrate is a measure of the quantity of data used to represent a second "
+"of the audio track.<br>Due to the limitations of the proprietary <b>WMA</b> "
+"format and the difficulty of reverse-engineering a proprietary encoder, the "
+"WMA encoder used by Cantata sets a <a href=http://en.wikipedia.org/wiki/"
+"Windows_Media_Audio#Windows_Media_Audio>constant bitrate (CBR)</a> setting."
+"<br>For this reason, the bitrate measure in this slider is a pretty accurate "
+"estimate of the bitrate of the encoded track.<br><b>136kb/s</b> is a good "
+"choice for music listening on a portable player.<br/>Anything below <b>112kb/"
+"s</b> might be unsatisfactory for music and anything above <b>182kb/s</b> is "
+"probably overkill."
+msgstr ""
+
+#: devices/filenameschemedialog.cpp:34
+msgid "Filename Scheme"
+msgstr "Schéma de nommage"
+
+#: devices/filenameschemedialog.cpp:62
+msgctxt "Example album artist"
+msgid "Various Artists"
+msgstr "Artistes Divers"
+
+#: devices/filenameschemedialog.cpp:63
+msgctxt "Example artist"
+msgid "Wibble"
+msgstr "Wibble"
+
+#: devices/filenameschemedialog.cpp:64
+msgctxt "Example composer"
+msgid "Vivaldi"
+msgstr "Vivaldi"
+
+#: devices/filenameschemedialog.cpp:65
+msgctxt "Example album"
+msgid "Now 5001"
+msgstr "Now 5001"
+
+#: devices/filenameschemedialog.cpp:66
+msgctxt "Example song name"
+msgid "Wobble"
+msgstr "Wobble"
+
+#: devices/filenameschemedialog.cpp:67
+msgctxt "Example genre"
+msgid "Dance"
+msgstr "Dance"
+
+#: devices/filenameschemedialog.cpp:121
+msgid ""
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
+msgstr ""
+"Les variables suivantes vont êtes remplacées par leurs valeurs respectives "
+"pour chaque nom de piste."
+
+#: devices/filenameschemedialog.cpp:127
+msgid ""
+"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
+"em></th></tr>"
+msgstr ""
+"<tr><th><em>Variable</em></th><th><em>Bouton</em></th><th><em>Description</"
+"em></th></tr>"
+
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
+msgid "Updating..."
+msgstr "Mise à jour…"
+
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
+msgid "Reading cache"
+msgstr "Lecture du cache"
+
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
+msgctxt "Message percent"
+msgid "%1 %2%"
+msgstr "%1 %2%"
+
+#: devices/mtpdevice.cpp:158
+msgid "Connecting to device..."
+msgstr "Connexion au périphérique"
+
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
+msgid "No devices found"
+msgstr "Pas de périphérique trouvé"
+
+#: devices/mtpdevice.cpp:222
+msgid "Connected to device"
+msgstr "Connecté au périphérique"
+
+#: devices/mtpdevice.cpp:235
+msgid "Disconnected from device"
+msgstr "Déconnecté du périphérique"
+
+#: devices/mtpdevice.cpp:308
+msgid "Updating folders..."
+msgstr "Mise à jour des dossiers…"
+
+#: devices/mtpdevice.cpp:327
+msgid "Updating files..."
+msgstr "Mise à jour des fichiers…"
+
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
+#: devices/remotefsdevice.cpp:446
+msgid "Updating tracks..."
+msgstr "Mise à jour des pistes…"
+
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
+#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
+#: models/devicesmodel.cpp:148
+msgid "Not Connected"
+msgstr "Non connecté"
+
+#: devices/musicbrainz.cpp:306
+msgid "%1 (Disc %2)"
+msgstr "%1 (Disque %2)"
+
+#: devices/musicbrainz.cpp:388
+msgid "No matches found in MusicBrainz"
+msgstr "Aucun résultat trouvé dans MusicBrainz"
+
+#: devices/remotedevicepropertiesdialog.cpp:51
+msgid "Connection"
+msgstr "Connexion"
+
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
+msgid "Music Library"
+msgstr "Bibliothèque musicale"
+
+#: devices/remotedevicepropertiesdialog.cpp:91
+msgid ""
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
+msgstr ""
+"Un périphérique distant possède déjà le même nom '%1'\n"
+"\n"
+"Veuillez choisir un nom différent."
+
+#: devices/remotedevicepropertieswidget.cpp:52
+msgid "Samba Share"
+msgstr "Partage Samba"
+
+#: devices/remotedevicepropertieswidget.cpp:53
+msgid "Samba Share (Auto-discover host and port)"
+msgstr "Partage Samba (découverte automatique de l'hôte et du port)"
+
+#: devices/remotedevicepropertieswidget.cpp:54
+msgid "Secure Shell (sshfs)"
+msgstr "Secure Shell (sshfs)"
+
+#: devices/remotedevicepropertieswidget.cpp:55
+msgid "Locally Mounted Folder"
+msgstr "Dossiers montés localement"
+
+#: devices/remotefsdevice.cpp:173 devices/remotefsdevice.cpp:573
+msgid "Available"
+msgstr "Disponible"
+
+#: devices/remotefsdevice.cpp:181 devices/remotefsdevice.cpp:571
+msgid "Not Available"
+msgstr "Non disponible"
+
+#: devices/remotefsdevice.cpp:278
+msgid "Failed to resolve connection details for %1"
+msgstr "La récupération des détails de connexion pour %1 a échoué"
+
+#: devices/remotefsdevice.cpp:293 devices/remotefsdevice.cpp:308
+#: devices/remotefsdevice.cpp:364
+msgid "Connecting..."
+msgstr "Connection…"
+
+#: devices/remotefsdevice.cpp:321
+msgid ""
+"Password prompting does not work when cantata is started from the "
+"commandline."
+msgstr ""
+"La boite de dialogue pour le mot de passe n'est pas disponible quand Cantata "
+"est démarré depuis une console."
+
+#: devices/remotefsdevice.cpp:340
+msgid ""
+"No suitable ssh-askpass application installed! This is required for entering "
+"passwords."
+msgstr ""
+"Aucune application ssh-sakpass est disponible ! Cette dépendance est requise "
+"pour la saisie du mot de passe."
+
+#: devices/remotefsdevice.cpp:347
+msgid "Mount point (\"%1\") is not empty!"
+msgstr "Le point de montage (\"%1\") nest pas vide !"
+
+#: devices/remotefsdevice.cpp:359
+msgid "\"sshfs\" is not installed!"
+msgstr "\"sshfs\" n'est pas installé !"
+
+#: devices/remotefsdevice.cpp:387 devices/remotefsdevice.cpp:407
+msgid "Disconnecting..."
+msgstr "Déconnexion…"
+
+#: devices/remotefsdevice.cpp:401
+msgid "\"fusermount\" is not installed!"
+msgstr "\"fusermount\" n'est pas installé !"
+
+#: devices/remotefsdevice.cpp:422 devices/remotefsdevice.cpp:443
+msgid "Failed to connect to \"%1\""
+msgstr "La connexion à \"%1\" a échoué"
+
+#: devices/remotefsdevice.cpp:423 devices/remotefsdevice.cpp:458
+msgid "Failed to disconnect from \"%1\""
+msgstr "La déconnexion à \"%1\" a échoué"
+
+#: devices/remotefsdevice.cpp:534
+msgid "Capacity Unknown"
+msgstr "Capacité inconnue"
+
+#. i18n: file: gui/coverdialog.ui:23
+#. i18n: ectx: property (text), widget (QPushButton, search)
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
+msgid "Search"
+msgstr "Recherche"
+
+#: devices/synccollectionwidget.cpp:62
+msgid "Check Items"
+msgstr "Cocher les items"
+
+#: devices/synccollectionwidget.cpp:64
+msgid "Uncheck Items"
+msgstr "Décocher les items"
+
+#: devices/synccollectionwidget.cpp:271
+msgid "Nothing selected"
+msgstr "Sélection vide"
+
+#: devices/syncdialog.cpp:102
+msgid "Songs Only In Library:"
+msgstr "Pistes uniquement dans la librairie:"
+
+#: devices/syncdialog.cpp:102
+msgid "Copy To Device"
+msgstr "Copier vers le périphérique"
+
+#: devices/syncdialog.cpp:103
+msgid "Songs Only On Device:"
+msgstr "Pistes seulement sur le périphérique:"
+
+#: devices/syncdialog.cpp:107
+msgid "Synchronize"
+msgstr "Synchroniser"
+
+#: devices/syncdialog.cpp:164
+msgid "Device and library are in sync."
+msgstr "Le périphérique et la bibliothèque sont synchronisés."
+
+#: devices/umsdevice.cpp:78 devices/umsdevice.cpp:210
+msgid "Not Scanned"
+msgstr "Non analysé"
+
+#: devices/valueslider.cpp:99
+msgid " (recommended)"
+msgstr " (recommandé)"
+
+#: dynamic/dynamic.cpp:78
+msgid "Empty filename."
+msgstr "Nom de fichier vide"
+
+#: dynamic/dynamic.cpp:79
+msgid "Invalid filename. (%1)"
+msgstr "Nom de fichier invalide. (%1)"
+
+#: dynamic/dynamic.cpp:80
+msgid "Failed to save %1."
+msgstr "La sauvegarde de %1 a échoué."
+
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
+msgid "Failed to delete rules file. (%1)"
+msgstr "La suppression des droits sur le fichier a échoué. (%1)"
+
+#: dynamic/dynamic.cpp:82
+msgid "Invalid command. (%1)"
+msgstr "Commande invalide. (%1)"
+
+#: dynamic/dynamic.cpp:83
+msgid "Could not remove active rules link."
+msgstr "La suppression des règles actives ne peut être effectuée."
+
+#: dynamic/dynamic.cpp:84
+msgid "Active rules is not a link."
+msgstr ""
+
+#: dynamic/dynamic.cpp:85
+msgid "Could not create active rules link."
+msgstr ""
+
+#: dynamic/dynamic.cpp:86
+msgid "Rules file, %1, does not exist."
+msgstr "Le fichier de droits, %1, n'existe pas."
+
+#: dynamic/dynamic.cpp:87
+msgid "Incorrect arguments supplied."
+msgstr "L'argument renseigné est incorrect."
+
+#: dynamic/dynamic.cpp:88
+msgid "Unknown method called."
+msgstr "La méthode appelée est inconnue."
+
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
+msgid "Unknown error"
+msgstr "Erreur inconnue"
+
+#: dynamic/dynamic.cpp:167
+msgid "Start Dynamic Playlist"
+msgstr "Lancer la liste dynamique"
+
+#: dynamic/dynamic.cpp:168
+msgid "Stop Dynamic Mode"
+msgstr "Arrêter la liste dynamique"
+
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr " - Note: %1..%2"
+
+#: dynamic/dynamic.cpp:344
+msgid ""
+"You need to install \"perl\" on your system in order for Cantata's dynamic "
+"mode to function."
+msgstr ""
+"Vous devez installer \"perl\" sur votre système pour activer le mode "
+"dynamique de Cantata."
+
+#: dynamic/dynamic.cpp:351
+msgid "Failed to locate rules file - %1"
+msgstr "La localisation du fichier contenant les règles a échoué - %1"
+
+#: dynamic/dynamic.cpp:359
+msgid "Failed to remove previous rules file - %1"
+msgstr ""
+
+#: dynamic/dynamic.cpp:364
+msgid "Failed to install rules file - %1 -> %2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:686
+msgid "Dynamizer has been terminated."
+msgstr ""
+
+#: dynamic/dynamic.cpp:732
+msgid "Saving rule"
+msgstr "Sauvegarde des règles"
+
+#: dynamic/dynamic.cpp:732
+msgid "Deleting rule"
+msgstr "Suppression des règles"
+
+#: dynamic/dynamic.cpp:732
+msgid "Awaiting response for previous command. (%1)"
+msgstr "En attente de la réponse pour la commande précédente. (%1)"
+
+#: dynamic/dynamic.cpp:839
+msgid "Failed to save %1. (%2)"
+msgstr "La sauvegarde de %1 a échoué. (%2)"
+
+#: dynamic/dynamic.cpp:863
+msgid "Failed to control dynamizer state. (%1)"
+msgstr ""
+
+#: dynamic/dynamic.cpp:870
+msgid "Failed to set the current dynamic rules. (%1)"
+msgstr ""
+
+#: dynamic/dynamic.cpp:905
+msgid ""
+"Communication with the remote dynamizer has been lost, reverting to local "
+"mode."
+msgstr ""
+
+#: dynamic/dynamicpage.cpp:40
+msgid "Add Dynamic Rules"
+msgstr "Ajout des règles dynamiques"
+
+#: dynamic/dynamicpage.cpp:41
+msgid "Edit Dynamic Rules"
+msgstr "Éditer les règles dynamiques"
+
+#: dynamic/dynamicpage.cpp:42 dynamic/dynamicpage.cpp:140
+msgid "Remove Dynamic Rules"
+msgstr "Supprimer les règles dynamiques"
+
+#: dynamic/dynamicpage.cpp:139
+msgid ""
+"Are you sure you wish to remove the selected rules?\n"
+"\n"
+"This cannot be undone."
+msgstr ""
+"Êtes-vous sûr de vouloir supprimer les règles sélectionnées ?\n"
+"\n"
+"Cette action est définitive."
+
+#: dynamic/dynamicruledialog.cpp:40
+msgid "Dynamic Rule"
+msgstr "Règle dynamique"
+
+#. i18n: file: dynamic/dynamicrules.ui:53
+#. i18n: ectx: property (text), widget (QPushButton, addBtn)
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
+msgid "Add"
+msgstr "Ajouter"
+
+#: dynamic/dynamicruledialog.cpp:217
+msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
+msgstr ""
+"<i><b>ERROR</b>: L'année du début doit être inférieure à l'année de fin</i>"
+
+#: dynamic/dynamicruledialog.cpp:220
+msgid ""
+"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
+"years)</i>"
+msgstr ""
+"<i><b>ERROR:</b> La fourchette de dates est trop large (limite de %1 au "
+"maximum)</i>"
+
+#: dynamic/dynamicrulesdialog.cpp:68
+msgid "SimilarArtists"
+msgstr "Artistes similaires"
+
+#: dynamic/dynamicrulesdialog.cpp:70
+msgid "AlbumArtist"
+msgstr "Artiste de l'album"
+
+#: dynamic/dynamicrulesdialog.cpp:94
+msgid "Include"
+msgstr "Inclure"
+
+#: dynamic/dynamicrulesdialog.cpp:101
+msgid "Exclude"
+msgstr "Exclure"
+
+#: dynamic/dynamicrulesdialog.cpp:124
+msgid " (Exact)"
+msgstr " (Exacte)"
+
+#: dynamic/dynamicrulesdialog.cpp:141
+msgid "Dynamic Rules"
+msgstr "Règles dynamiques"
+
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr "À propos des règles dynamiques"
+
+#: dynamic/dynamicrulesdialog.cpp:297
+msgid ""
+"<p>Cantata will query your library using all of the rules listed. The list "
+"of <i>Include</i> rules will be used to build a set of songs that can be "
+"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
+"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
+msgid "Failed to save %1"
+msgstr "La sauvegarde de %1 a échoué"
+
+#: dynamic/dynamicrulesdialog.cpp:335
+msgid ""
+"A set of rules named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Un ensemble de règles nommé '%1' existe déjà !\n"
+"\n"
+"Remplacer ?"
+
+#: dynamic/dynamicrulesdialog.cpp:336
+msgid "Overwrite Rules"
+msgstr "Remplacer les règles"
+
+#: dynamic/dynamicrulesdialog.cpp:365
+msgid "Saving %1"
+msgstr "Sauvegarde de %1"
+
+#: gui/cachesettings.cpp:175
+msgid "Deleting..."
+msgstr "Suppression…"
+
+#: gui/cachesettings.cpp:203
+msgid "Name"
+msgstr "Nom"
+
+#: gui/cachesettings.cpp:203
+msgid "Item Count"
+msgstr "Nombre d'éléments"
+
+#: gui/cachesettings.cpp:203
+msgid "Space Used"
+msgstr "Espace occupé"
+
+#: gui/cachesettings.cpp:246
+msgid "Total space used: %1"
+msgstr "Espace occupé total: %1"
+
+#: gui/cachesettings.cpp:257
+msgid ""
+"Cantata caches a local copy of the music listing to speed up loading of the "
+"library. Cantata might also have cached covers, lyrics, or artist images, if "
+"these have been downloaded and could not be saved into the music folder "
+"(because Cantata cannot access it, or you have configured Cantata to not "
+"save these items there). Below is a summary of Cantata's current cache usage."
+msgstr ""
+
+#: gui/cachesettings.cpp:270
+msgid "Covers"
+msgstr "Pochettes"
+
+#: gui/cachesettings.cpp:272
+msgid "Scaled Covers"
+msgstr "Pochettes redimensionnées"
+
+#: gui/cachesettings.cpp:274
+msgid "Backdrops"
+msgstr "Toile de fond"
+
+#: gui/cachesettings.cpp:276
+msgid "Artist Information"
+msgstr "Informations sur l'artiste"
+
+#: gui/cachesettings.cpp:278
+msgid "Album Information"
+msgstr "Informations sur l'album"
+
+#: gui/cachesettings.cpp:279
+msgid "Track Information"
+msgstr "Informations sur la piste"
+
+#: gui/cachesettings.cpp:281
+msgid "Stream Listings"
+msgstr "Liste de flux"
+
+#: gui/cachesettings.cpp:284
+msgid "Jamendo"
+msgstr "Jamendo"
+
+#: gui/cachesettings.cpp:285
+msgid "Magnatune"
+msgstr "Magnatune"
+
+#: gui/cachesettings.cpp:286
+msgid "Podcast Directories"
+msgstr "Répertoires des podcasts"
+
+#: gui/cachesettings.cpp:289
+msgid "Scrobble Tracks"
+msgstr "Scrobbler les pistes"
+
+#: gui/cachesettings.cpp:296
+msgid "Delete All"
+msgstr "Tout supprimer"
+
+#: gui/cachesettings.cpp:335
+msgid "Delete all '%1' items?"
+msgstr "Supprimer les '%1' éléments ?"
+
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
+msgid "Delete Cache Items"
+msgstr "Supprimer tous les éléments en cache"
+
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr "Supprimer les éléments des catégories sélectionnées ?"
+
+#: gui/coverdialog.cpp:127
+msgctxt ""
+"name\n"
+"width x height (file size)"
+msgid ""
+"%1\n"
+"%2 x %3 (%4)"
+msgstr ""
+"%1\n"
+"%2 x %3 (%4)"
+
+#: gui/coverdialog.cpp:129
+msgctxt ""
+"name\n"
+"width x height"
+msgid ""
+"%1\n"
+"%2 x %3"
+msgstr ""
+"%1\n"
+"%2 x %3"
+
+#: gui/coverdialog.cpp:165
+msgid "Current Cover"
+msgstr "Pochette courante"
+
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
+msgid "CoverArt Archive"
+msgstr "Archive de CoverArt"
+
+#: gui/coverdialog.cpp:245
+msgid "Image"
+msgstr "Image"
+
+#: gui/coverdialog.cpp:248
+msgid "Downloading..."
+msgstr "Téléchargement…"
+
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
+msgctxt "Image (width x height zoom%)"
+msgid "Image (%1 x %2 %3%)"
+msgstr "Image (%1 x %2 %3%)"
+
+#: gui/coverdialog.cpp:439
+msgid "An image already exists for this artist, and the file is not writeable."
+msgstr "Une image existe déjà pour cet artiste et ne peut être remplacée."
+
+#: gui/coverdialog.cpp:440
+msgid "A cover already exists for this album, and the file is not writeable."
+msgstr "Une pochette existe déjà pour cet album et ne peut être remplacée."
+
+#: gui/coverdialog.cpp:446
+msgid "'%1' Artist Image"
+msgstr "'%1' Image de l'artiste"
+
+#: gui/coverdialog.cpp:448
+msgctxt "'Artist - Album' Album Cover"
+msgid "'%1 - %2' Album Cover"
+msgstr "'%1 - %2' Pochette d'album"
+
+#: gui/coverdialog.cpp:576
+msgid ""
+"Failed to set cover!\n"
+"\n"
+"Could not download to temporary file!"
+msgstr ""
+"L'affectation de la pochette a échoué !\n"
+"\n"
+"La pochette n'a pas pu être téléchargée vers les fichiers temporaires !"
+
+#: gui/coverdialog.cpp:610
+msgid "Failed to download image!"
+msgstr "Le téléchargement de l'image a échoué !"
+
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
+msgid "Load Local Cover"
+msgstr "Chargement d'une pochette locale"
+
+#: gui/coverdialog.cpp:869
+msgid "File is already in list!"
+msgstr "Le fichier est déjà dans la liste !"
+
+#: gui/coverdialog.cpp:873
+msgid "Failed to read image!"
+msgstr "La lecture de l'image a échoué !"
+
+#: gui/coverdialog.cpp:886
+msgid "Display"
+msgstr "Afficher"
+
+#. i18n: file: dynamic/dynamicrules.ui:67
+#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
+#. i18n: file: streams/streamssettings.ui:73
+#. i18n: ectx: property (text), widget (QPushButton, removeButton)
+#. i18n: file: dynamic/dynamicrules.ui:67
+#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
+#. i18n: file: streams/streamssettings.ui:73
+#. i18n: ectx: property (text), widget (QPushButton, removeButton)
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
+msgid "Remove"
+msgstr "Supprimer"
+
+#: gui/coverdialog.cpp:1350
+msgid ""
+"Failed to set cover!\n"
+"\n"
+"Could not make copy!"
+msgstr ""
+"L'affectation de la pochette a échoué !\n"
+"\n"
+"La copie ne peut être créée !"
+
+#: gui/coverdialog.cpp:1359
+msgid ""
+"Failed to set cover!\n"
+"\n"
+"Could not backup original!"
+msgstr ""
+"L'affectation de la pochette a échoué !\n"
+"\n"
+"Le fichier original ne peut être sauvegardé !"
+
+#: gui/coverdialog.cpp:1406
+msgid ""
+"Failed to set cover!\n"
+"\n"
+"Could not copy file to '%1'!"
+msgstr ""
+"L'affectation de la pochette a échoué !\n"
+"\n"
+"Le fichier ne peut être copié vers '%1' !"
+
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
+msgid "Searching..."
+msgstr "Recherche en cours…"
+
+#: gui/folderpage.cpp:43
+msgid "Open In File Manager"
+msgstr "Ouvrir dans l'explorateur de fichiers"
+
+#: gui/initialsettingswizard.cpp:142
+msgid "Connection Established"
+msgstr "Connexion établie"
+
+#: gui/initialsettingswizard.cpp:142
+msgid "Connection Failed"
+msgstr "La connexion a échoué"
+
+#: gui/interfacesettings.cpp:58
+msgid "Album, Artist, Year"
+msgstr "Album, Artiste, Année"
+
+#: gui/interfacesettings.cpp:59
+msgid "Album, Year, Artist"
+msgstr "Album, Année, Artiste"
+
+#: gui/interfacesettings.cpp:60
+msgid "Artist, Album, Year"
+msgstr "Artiste, Album, Année"
+
+#: gui/interfacesettings.cpp:61
+msgid "Artist, Year, Album"
+msgstr "Artiste, Année, Album"
+
+#: gui/interfacesettings.cpp:62
+msgid "Year, Album, Artist"
+msgstr "Année, Album, Artiste"
+
+#: gui/interfacesettings.cpp:63
+msgid "Year, Artist, Album"
+msgstr "Année, Artiste, Album"
+
+#: gui/interfacesettings.cpp:70
+msgid "Basic Tree (No Icons)"
+msgstr "Arbre basique (sans icônes)"
+
+#: gui/interfacesettings.cpp:71
+msgid "Simple Tree"
+msgstr "Arbre simple"
+
+#: gui/interfacesettings.cpp:72
+msgid "Detailed Tree"
+msgstr "Arbre détaillé"
+
+#: gui/interfacesettings.cpp:73
+msgid "Grouped Albums"
+msgstr "Albums groupés"
+
+#: gui/interfacesettings.cpp:74
+msgid "List"
+msgstr "Liste"
+
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr "Grille"
+
+#: gui/interfacesettings.cpp:76
+msgid "Table"
+msgstr "Tableau"
+
+#. i18n: file: gui/interfacesettings.ui:350
+#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
+msgid "Play Queue"
+msgstr "Liste de lecture courante"
+
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
+msgid "Artists"
+msgstr "Artistes"
+
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
+msgid "Folders"
+msgstr "Dossiers"
+
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
+msgid "Playlists"
+msgstr "Listes de lecture"
+
+#: gui/interfacesettings.cpp:150
+msgid "Dynamic Playlists"
+msgstr "Listes de lecture dynamiques"
+
+#: gui/interfacesettings.cpp:154
+msgid "Streams (e.g. Radio Stations)"
+msgstr "Flux (ex: webradios)"
+
+#: gui/interfacesettings.cpp:161
+msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
+msgstr "Services en ligne - Jamendo, Maganatune, SoundCloud et Podcasts"
+
+#: gui/interfacesettings.cpp:168
+msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
+msgstr "Périphériques - UMS, MTP (ex: Android) et CD audio"
+
+#: gui/interfacesettings.cpp:174
+msgid "Search (via MPD)"
+msgstr "Rechercher (via MPD)"
+
+#: gui/interfacesettings.cpp:175
+msgid "Info - Current song information (artist, album, and lyrics)"
+msgstr "Info - Informations de la piste courante (artiste, album et paroles)"
+
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Grand"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Petit"
+
+#: gui/interfacesettings.cpp:192
+msgid "Tab-bar"
+msgstr "Barre d'onglets"
+
+#: gui/interfacesettings.cpp:193
+msgid "Left"
+msgstr "Gauche"
+
+#: gui/interfacesettings.cpp:193
+msgid "Right"
+msgstr "Droite"
+
+#: gui/interfacesettings.cpp:194
+msgid "Top"
+msgstr "Haut"
+
+#: gui/interfacesettings.cpp:195
+msgid "Bottom"
+msgstr "Bas"
+
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr "Notifications"
+
+#: gui/interfacesettings.cpp:492
+msgid "System default"
+msgstr "Valeurs par défaut"
+
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
+msgid "Cantata"
+msgstr "Cantata"
+
+#: gui/main.cpp:268
+msgid "A KDE client for MPD"
+msgstr "Un client MPD pour KDE"
+
+#: gui/main.cpp:270
+msgid "© 2011-2014 Craig Drummond"
+msgstr "© 2011-2014 Craig Drummond"
+
+#: gui/main.cpp:274
+msgid "Craig Drummond"
+msgstr "Craig Drummond"
+
+#: gui/main.cpp:274
+msgid "Maintainer"
+msgstr "Mainteneur"
+
+#: gui/main.cpp:275
+msgid "Piotr Wicijowski"
+msgstr "Piotr Wicijowski"
+
+#: gui/main.cpp:275
+msgid "UI Improvements"
+msgstr "Interface"
+
+#: gui/main.cpp:276
+msgid "Sander Knopper"
+msgstr "Sander Knopper"
+
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
+msgid "QtMPC author"
+msgstr "Auteur de QtMPC"
+
+#: gui/main.cpp:277
+msgid "Roeland Douma"
+msgstr "Roeland Douma"
+
+#: gui/main.cpp:278
+msgid "Daniel Selinger"
+msgstr "Daniel Selinger"
+
+#: gui/main.cpp:279
+msgid "Armin Walland"
+msgstr "Armin Walland"
+
+#: gui/main.cpp:280
+msgid "FanArt.tv"
+msgstr "FanArt.tv"
+
+#: gui/main.cpp:280
+msgid ""
+"Context view backdrops (please consider uploading your own music fan-art to "
+"fanart.tv)"
+msgstr ""
+"Image de fond (n'hésitez pas à envoyer vos fan-art musicaux sur fanart.tv)"
+
+#: gui/main.cpp:281
+msgid "Wikipedia"
+msgstr "Wikipedia"
+
+#: gui/main.cpp:281 gui/main.cpp:282
+msgid "Context view metadata"
+msgstr "Métadonnées contextuelles"
+
+#: gui/main.cpp:282
+msgid "Last.fm"
+msgstr "Last.fm"
+
+#: gui/main.cpp:286
+msgid "URL to open"
+msgstr "URL à ouvrir"
+
+#: gui/mainwindow.cpp:243
+msgid "Configure Cantata..."
+msgstr "Configurer Cantata…"
+
+#: gui/mainwindow.cpp:243
+msgid "Preferences"
+msgstr "Préférences"
+
+#: gui/mainwindow.cpp:246
+msgid "Quit"
+msgstr "Quitter"
+
+#: gui/mainwindow.cpp:249
+msgctxt "Qt-only"
+msgid "About Cantata..."
+msgstr "À propos de Cantata…"
+
+#: gui/mainwindow.cpp:257
+msgid "Show Window"
+msgstr "Afficher la fenêtre"
+
+#: gui/mainwindow.cpp:260
+msgid "Server information..."
+msgstr "Informations sur le serveur…"
+
+#: gui/mainwindow.cpp:263
+msgid "Refresh Database"
+msgstr "Rafraîchir la base de données"
+
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr "Rafraîchissement complet"
+
+#. i18n: file: gui/initialsettingswizard.ui:484
+#. i18n: ectx: property (text), widget (QPushButton, connectButton)
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
+msgid "Connect"
+msgstr "Connecter"
+
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
+msgid "Collection"
+msgstr "Collection"
+
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
+msgid "Outputs"
+msgstr "Sorties"
+
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
+msgid "Stop After Track"
+msgstr "Arrêter après la piste"
+
+#: gui/mainwindow.cpp:280
+msgid "Add To Stored Playlist"
+msgstr "Ajouter à la liste sauvegardée"
+
+#: gui/mainwindow.cpp:281
+msgid "Crop"
+msgstr "Couper"
+
+#: gui/mainwindow.cpp:282
+msgid "Add Stream URL"
+msgstr "Ajouter l'URL de flux"
+
+#: gui/mainwindow.cpp:283
+msgid "Clear"
+msgstr "Nettoyer"
+
+#: gui/mainwindow.cpp:284
+msgid "Center On Current Track"
+msgstr "Centrer sur la piste courante"
+
+#: gui/mainwindow.cpp:285
+msgid "Expanded Interface"
+msgstr "Interface étendue"
+
+#: gui/mainwindow.cpp:287
+msgid "Show Current Song Information"
+msgstr "Afficher les informations de la piste courante"
+
+#: gui/mainwindow.cpp:290
+msgid "Full Screen"
+msgstr "Plein écran"
+
+#: gui/mainwindow.cpp:294
+msgid "Random"
+msgstr "Aléatoire"
+
+#: gui/mainwindow.cpp:295
+msgid "Repeat"
+msgstr "Répéter"
+
+#: gui/mainwindow.cpp:296
+msgid "Single"
+msgstr "Single"
+
+#: gui/mainwindow.cpp:296
+msgid ""
+"When 'Single' is activated, playback is stopped after current song, or song "
+"is repeated if 'Repeat' is enabled."
+msgstr ""
+"Quand le mode 'Single' est activé, la lecture est stoppée après la piste "
+"courante ou la piste est répétée si le mode 'Répéter' est activé."
+
+#: gui/mainwindow.cpp:297
+msgid "Consume"
+msgstr "Consommer"
+
+#: gui/mainwindow.cpp:297
+msgid ""
+"When consume is activated, a song is removed from the play queue after it "
+"has been played."
+msgstr ""
+"Quand le mode 'Consommer' est activé, la piste courante est retirée de la "
+"liste de lecture après sa lecture."
+
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr "Trouver dans la liste de lecture"
+
+#: gui/mainwindow.cpp:301
+msgid "Set Priority"
+msgstr "Définir la priorité"
+
+#: gui/mainwindow.cpp:303
+msgid "Play Stream"
+msgstr "Lire le flux"
+
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
+msgid "Locate In Library"
+msgstr "Trouver dans la bibliothèque"
+
+#: gui/mainwindow.cpp:315
+msgid "Expand All"
+msgstr "Tout étendre"
+
+#: gui/mainwindow.cpp:317
+msgid "Collapse All"
+msgstr "Tout replier"
+
+#: gui/mainwindow.cpp:319
+msgid "Remove All Songs"
+msgstr "Supprimer toutes les pistes"
+
+#: gui/mainwindow.cpp:326
+msgid "Clear 'New' State Of Artists and Albums"
+msgstr "Supprimer l'état 'Nouveauté' des artistes et albums"
+
+#: gui/mainwindow.cpp:410
+msgid "Dynamic"
+msgstr "Dynamique"
+
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
+msgid "Streams"
+msgstr "Flux"
+
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
+msgid "Online"
+msgstr "En ligne"
+
+#: gui/mainwindow.cpp:442
+msgid "Devices"
+msgstr "Périphériques"
+
+#: gui/mainwindow.cpp:454
+msgid "Info"
+msgstr "Infos"
+
+#: gui/mainwindow.cpp:607
+msgid "Show Menubar"
+msgstr "Afficher la barre de menu"
+
+#: gui/mainwindow.cpp:659
+msgid "&Music"
+msgstr "&Musique"
+
+#: gui/mainwindow.cpp:670
+msgid "&Edit"
+msgstr "&Éditer"
+
+#: gui/mainwindow.cpp:687
+msgid "&View"
+msgstr "&Voir"
+
+#: gui/mainwindow.cpp:699
+msgid "&Queue"
+msgstr "&File"
+
+#: gui/mainwindow.cpp:711
+msgid "&Settings"
+msgstr "&Paramètres"
+
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
+msgid "&Help"
+msgstr "&Aide"
+
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr "Définir une note"
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr "Pas de note"
+
+#: gui/mainwindow.cpp:1032
+msgid "Failed to locate any songs matching the dynamic playlist rules."
+msgstr ""
+"Aucune piste respectant les choix définis pour la liste de lecture dynamique "
+"n'a été trouvée."
+
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
+msgid "Connecting to %1"
+msgstr "Connecté à %1"
+
+#: gui/mainwindow.cpp:1185
+msgid "Refresh MPD Database?"
+msgstr "Rafraîchir la base de données MPD ?"
+
+#: gui/mainwindow.cpp:1211
+msgctxt "Qt-only"
+msgid "About Cantata"
+msgstr "À propos de Cantata"
+
+#: gui/mainwindow.cpp:1212
+msgctxt "Qt-only"
+msgid ""
+"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
+"Drummond<br/>Released under the <a href=\"http://www.gnu.org/licenses/gpl."
+"html\">GPLv3</a>"
+msgstr ""
+"<b>Cantata %1</b><br/><br/>Client MPD.<br/><br/>© 2011-2014 Craig "
+"Drummond<br/>Sous licence <a href=\"http://www.gnu.org/licenses/gpl.html"
+"\">GPLv3</a>"
+
+#: gui/mainwindow.cpp:1214
+msgid ""
+"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
+"The QtMPC Authors<br/>"
+msgstr ""
+"Basé sur <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
+"The QtMPC Authors<br/>"
+
+#: gui/mainwindow.cpp:1215
+msgctxt "Qt-only"
+msgid ""
+"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
+"tv</a>"
+msgstr ""
+"Les images de fond sont issues de <a href=\"http://www.fanart.tv\">FanArt."
+"tv</a>"
+
+#: gui/mainwindow.cpp:1216
+msgctxt "Qt-only"
+msgid ""
+"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
+"\">Wikipedia</a> and <a href=\"http://www.last.fm\">Last.fm</a>"
+msgstr ""
+"Les informations de lecture sont issues de <a href=\"http://www.wikipedia.org"
+"\">Wikipedia</a> et <a href=\"http://www.last.fm\">Last.fm</a>"
+
+#: gui/mainwindow.cpp:1217
+msgid ""
+"Please consider uploading your own music fan-art to <a href=\"http://www."
+"fanart.tv\">FanArt.tv</a>"
+msgstr ""
+"N'hésitez pas à envoyer vos propres images fan-art sur <a href=\"http://www."
+"fanart.tv\">FanArt.tv</a>"
+
+#: gui/mainwindow.cpp:1226
+msgid ""
+"A Podcast is currently being downloaded\n"
+"\n"
+"Quiting now will abort the download."
+msgstr ""
+"Un podcast est actuellement en téléchargement\n"
+"\n"
+"Le téléchargement sera abandonné si vous quittez maintenant."
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr "Abandonner et quitter"
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr "Activé: %1"
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr "Désactivé: %1"
+
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Informations du serveur"
+
+#: gui/mainwindow.cpp:1608
+msgid ""
+"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
+"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
+" </td><td>%4</td></tr><tr><td align=\"right\">Playing: </td><td>"
+"%5</td></tr><tr><td align=\"right\">Handlers: </td><td>%6</td></"
+"tr><tr><td align=\"right\">Tags: </td><td>%7</td></tr>"
+msgstr ""
+"<tr><td colspan=\"2\"><b>Serveur</b></td></tr><tr><td align=\"right"
+"\">Protocole: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Durée "
+"de fonctionnement: </td><td>%4</td></tr><tr><td align=\"right\">Temps "
+"de lecture: </td><td>%5</td></tr><tr><td align=\"right\">Formats: "
+"</td><td>%6</td></tr><tr><td align=\"right\">Étiquettes: </td><td>%7</"
+"td></tr>"
+
+#: gui/mainwindow.cpp:1619
+msgid ""
+"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
+"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
+"td><td>%2</td></tr><tr><td align=\"right\">Songs: </td><td>%3</td></"
+"tr><tr><td align=\"right\">Duration: </td><td>%4</td></tr><tr><td align="
+"\"right\">Updated: </td><td>%5</td></tr>"
+msgstr ""
+"<tr><td colspan=\"2\"><b>Base de données</b></td></tr><tr><td align=\"right"
+"\">Artistes: </td><td>%1</td></tr><tr><td align=\"right\">Albums: "
+"</td><td>%2</td></tr><tr><td align=\"right\">Pistes: </td><td>%3</td></"
+"tr><tr><td align=\"right\">Durée totale: </td><td>%4</td></tr><tr><td "
+"align=\"right\">Mise à jour: </td><td>%5</td></tr>"
+
+#: gui/mainwindow.cpp:1767
+msgid "Cantata (%1)"
+msgstr "Cantata (%1)"
+
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
+msgid "MPD reported the following error: %1"
+msgstr "MPD a retourné l'erreur suivante: %1"
+
+#: gui/mainwindow.cpp:1914
+msgid "Playback stopped"
+msgstr "La lecture a été interrompue"
+
+#: gui/mainwindow.cpp:1963
+msgid "Remove all songs from play queue?"
+msgstr "Supprimer toutes les pistes de la liste de lecture ?"
+
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
+msgid "Priority"
+msgstr "Priorité"
+
+#: gui/mainwindow.cpp:2023
+msgid "Enter priority (0..255):"
+msgstr "Saisir une priorité (0…255):"
+
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
+msgid "Playlist Name"
+msgstr "Nom de la liste de lecture"
+
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
+msgid "Enter a name for the playlist:"
+msgstr "Entrez un nom pour la liste de lecture:"
+
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
+msgstr ""
+"Le nom '%1' est déjà utilisé pour enregistrer vos flux favoris, veuillez "
+"choisir un autre nom."
+
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
+msgstr ""
+"La liste de lecture '%1' existe déjà !\n"
+"\n"
+"Ajouter à cette liste de lecture ?"
+
+#: gui/mainwindow.cpp:2054
+msgid "Existing Playlist"
+msgstr "Liste de lecture existante"
+
+#: gui/mainwindow.cpp:2106
+msgid "Stream URL"
+msgstr "URL du flux"
+
+#: gui/mainwindow.cpp:2106
+msgid "Enter URL of stream:"
+msgstr "Entrez l'URL du flux:"
+
+#: gui/mainwindow.cpp:2109
+msgid "Invalid, or unsupported, URL!"
+msgstr "URL invalide ou non supportée !"
+
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Vide"
+
+#: gui/playbacksettings.cpp:50
+msgid "Auto"
+msgstr "Automatique"
+
+#: gui/playbacksettings.cpp:164
+msgid ""
+"<i>Connected to %1<br/>The entries below apply to the currently connected "
+"MPD collection.</i>"
+msgstr ""
+"<i>Connecté à %1<br/>Les éléments ci-dessous sont liés à la collection MPD "
+"courante.</i>"
+
+#. i18n: file: gui/playbacksettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, messageLabel)
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
+msgid ""
+"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
+"not connected to MPD.</i>"
+msgstr ""
+"<i>Non connecté !<br/>Les entrées ci-dessous ne peuvent être modifiées car "
+"Cantata n'est pas connecté à MPD.</i>"
+
+#: gui/playbacksettings.cpp:174
+msgid ""
+"Replay Gain is a proposed standard published in 2001 to normalize the "
+"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
+"works on a track/album basis, and is now supported in a growing number of "
+"players.<br/><br/>The following ReplayGain settings may be used:"
+"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
+"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
+"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
+"tags if random play is activated, otherwise the album's tags will be used.</"
+"li></ul>"
+msgstr ""
+
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
+msgid "Rename"
+msgstr "Renommer"
+
+#: gui/playlistspage.cpp:60 models/playqueuemodel.cpp:239
+msgid "Remove Duplicates"
+msgstr "Supprimer les doublons"
+
+#: gui/playlistspage.cpp:224
+msgid ""
+"Are you sure you wish to remove the selected playlists?\n"
+"\n"
+"This cannot be undone."
+msgstr ""
+"Êtes-vous sûr de vouloir supprimer les listes de lecture sélectionnées ?\n"
+"\n"
+"Ce choix est définitif."
+
+#: gui/playlistspage.cpp:225
+msgid "Remove Playlists"
+msgstr "Supprimer les listes de lecture"
+
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Une liste nommée '%1' existe déjà !\n"
+"\n"
+"Remplacer ?"
+
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
+msgid "Overwrite Playlist"
+msgstr "Remplacer la liste de lecture"
+
+#: gui/playlistspage.cpp:268
+msgid "Rename Playlist"
+msgstr "Renommer la liste de lecture"
+
+#: gui/playlistspage.cpp:268
+msgid "Enter new name for playlist:"
+msgstr "Entrez un nouveau nom pour la liste de lecture:"
+
+#: gui/playlistspage.cpp:360
+msgid "Cannot add songs from '%1' to '%2'"
+msgstr "Les pistes de '%1' à '%2' ne peuvent être ajoutées"
+
+#: gui/plurals_kde.cpp:29
+msgid "1 Track"
+msgid_plural "%1 Tracks"
+msgstr[0] "1 Piste"
+msgstr[1] "%1 Pistes"
+
+#: gui/plurals_kde.cpp:34
+msgid "1 Track (%2)"
+msgid_plural "%1 Tracks (%2)"
+msgstr[0] "1 Piste (%2)"
+msgstr[1] "%1 Pistes (%2)"
+
+#: gui/plurals_kde.cpp:39
+msgid "1 Album"
+msgid_plural "%1 Albums"
+msgstr[0] "1 Album"
+msgstr[1] "%1 Albums"
+
+#: gui/plurals_kde.cpp:44
+msgid "1 Artist"
+msgid_plural "%1 Artists"
+msgstr[0] "1 Artiste"
+msgstr[1] "%1 Artistes"
+
+#: gui/plurals_kde.cpp:49
+msgid "1 Stream"
+msgid_plural "%1 Streams"
+msgstr[0] "1 Flux"
+msgstr[1] "%1 Flux"
+
+#: gui/plurals_kde.cpp:54
+msgid "1 Entry"
+msgid_plural "%1 Entries"
+msgstr[0] "%1 Entrée"
+msgstr[1] "%1 Entrées"
+
+#: gui/plurals_kde.cpp:59
+msgid "1 Rule"
+msgid_plural "%1 Rules"
+msgstr[0] "%1 Règle"
+msgstr[1] "%1 Règles"
+
+#: gui/plurals_kde.cpp:64
+msgid "1 Podcast"
+msgid_plural "%1 Podcasts"
+msgstr[0] "1 Podcast"
+msgstr[1] "%1 Podcasts"
+
+#: gui/plurals_kde.cpp:69
+msgid "1 Episode"
+msgid_plural "%1 Episodes"
+msgstr[0] "1 Épisode"
+msgstr[1] "%1 Épisodes"
+
+#: gui/plurals_kde.cpp:74
+msgid "1 Update available"
+msgid_plural "%1 Updates available"
+msgstr[0] "1 Mise à jour disponible"
+msgstr[1] "%1 Mises à jour disponibles"
+
+#: gui/preferencesdialog.cpp:84
+msgid "Collection Settings"
+msgstr "Paramètres de la collection"
+
+#. i18n: file: gui/playbacksettings.ui:29
+#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
+msgid "Playback"
+msgstr "Lecture"
+
+#: gui/preferencesdialog.cpp:85
+msgid "Playback Settings"
+msgstr "Paramètres de lecture"
+
+#: gui/preferencesdialog.cpp:86
+msgid "Files"
+msgstr "Fichiers"
+
+#: gui/preferencesdialog.cpp:86
+msgid "File Settings"
+msgstr "Paramètres des fichiers"
+
+#: gui/preferencesdialog.cpp:87
+msgid "Interface"
+msgstr "Interface"
+
+#: gui/preferencesdialog.cpp:87
+msgid "Interface Settings"
+msgstr "Paramètres de l'interface"
+
+#: gui/preferencesdialog.cpp:90
+msgid "Streams Settings"
+msgstr "Paramètres des flux"
+
+#: gui/preferencesdialog.cpp:95
+msgid "Online Providers"
+msgstr "Fournisseurs de contenu en ligne"
+
+#: gui/preferencesdialog.cpp:98
+msgid "Context"
+msgstr "Contexte"
+
+#: gui/preferencesdialog.cpp:98
+msgid "Context View Settings"
+msgstr "Contexte de lecture"
+
+#: gui/preferencesdialog.cpp:99
+msgid "Scrobbling"
+msgstr "Scrobblage"
+
+#: gui/preferencesdialog.cpp:99
+msgid "Scrobbling Settings"
+msgstr "Paramètres de scrobblage"
+
+#: gui/preferencesdialog.cpp:108
+msgid "HTTP Server"
+msgstr "Serveur HTTP"
+
+#: gui/preferencesdialog.cpp:108
+msgid "HTTP Server Settings"
+msgstr "Paramètres du Serveur HTTP"
+
+#: gui/preferencesdialog.cpp:117
+msgid "Audio CD Settings"
+msgstr "Paramètres des CD Audio"
+
+#: gui/preferencesdialog.cpp:122
+msgid "Proxy"
+msgstr "Proxy"
+
+#: gui/preferencesdialog.cpp:122
+msgctxt "Qt-only"
+msgid "Proxy Settings"
+msgstr "Paramètres du proxy"
+
+#: gui/preferencesdialog.cpp:126
+msgctxt "Qt-only"
+msgid "Shortcuts"
+msgstr "Raccourcis"
+
+#: gui/preferencesdialog.cpp:126
+msgctxt "Qt-only"
+msgid "Keyboard Shortcut Settings"
+msgstr "Raccourcis clavier"
+
+#: gui/preferencesdialog.cpp:129
+msgid "Cache"
+msgstr "Cache"
+
+#: gui/preferencesdialog.cpp:129
+msgid "Cached Items"
+msgstr "Éléments dans le cache"
+
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr "Préférences de Cantata"
+
+#. i18n: file: devices/actiondialog.ui:67
+#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
+#. i18n: file: devices/actiondialog.ui:120
+#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
+#. i18n: file: gui/coverdialog.ui:37
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#. i18n: file: devices/actiondialog.ui:67
+#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
+#. i18n: file: devices/actiondialog.ui:120
+#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
+#. i18n: file: gui/coverdialog.ui:37
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
+msgid "Configure"
+msgstr "Configurer"
+
+#. i18n: file: devices/albumdetails.ui:50
+#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
+#. i18n: file: dynamic/dynamicrule.ui:89
+#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
+#. i18n: file: tags/tageditor.ui:93
+#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
+#. i18n: file: devices/albumdetails.ui:50
+#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
+#. i18n: file: dynamic/dynamicrule.ui:89
+#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
+#. i18n: file: tags/tageditor.ui:93
+#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
+msgid "Composer:"
+msgstr "Compositeur:"
+
+#: gui/searchpage.cpp:232
+msgid "Performer:"
+msgstr "Interprète:"
+
+#. i18n: file: devices/albumdetails.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: tags/tageditor.ui:145
+#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
+#. i18n: file: devices/albumdetails.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: tags/tageditor.ui:145
+#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
+msgid "Genre:"
+msgstr "Genre:"
+
+#. i18n: file: dynamic/dynamicrule.ui:187
+#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
+#. i18n: file: tags/tageditor.ui:195
+#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
+#. i18n: file: dynamic/dynamicrule.ui:187
+#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
+#. i18n: file: tags/tageditor.ui:195
+#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
+msgid "Comment:"
+msgstr "Commentaire:"
+
+#: gui/searchpage.cpp:240
+msgid "Date:"
+msgstr "Date:"
+
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr "Modifié:"
+
+#: gui/searchpage.cpp:245
+msgid "Any:"
+msgstr "Tous:"
+
+#: gui/searchpage.cpp:251
+msgid "No tracks found."
+msgstr "Pas de pistes trouvées:"
+
+#: gui/serversettings.cpp:86
+msgid ""
+"<i> This folder will also be used to locate music files for transferring to "
+"(and from) devices.</i>"
+msgstr ""
+"<i>Ce dossier va également être utilisé pour trouver les piste à envoyer aux "
+"(ou recevoir des) périphériques.</i>"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
+#. i18n: file: network/proxysettings.ui:63
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
+#. i18n: file: network/proxysettings.ui:63
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
+msgid "Host:"
+msgstr "Hôte:"
+
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr "À quel type de collection souhaitez-vous vous connecter ?"
+
+#: gui/serversettings.cpp:240
+msgid ""
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr ""
+"Standard - la collection est partagée, présente sur une autre machine ou "
+"déjà mise en place"
+
+#: gui/serversettings.cpp:241
+msgid ""
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
+msgstr ""
+"Basique - la collection n'est pas partagée avec d'autres personnes et "
+"Cantata va configurer et contrôler l'instance MPD"
+
+#: gui/serversettings.cpp:242
+msgid "Add Collection"
+msgstr "Ajouter une Collection"
+
+#: gui/serversettings.cpp:242
+msgid "Standard"
+msgstr "Standard"
+
+#: gui/serversettings.cpp:242
+msgid "Basic"
+msgstr "Basique"
+
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr "Supprimer '%1' ?"
+
+#: gui/serversettings.cpp:284
+msgid "Delete"
+msgstr "Supprimer"
+
+#: gui/serversettings.cpp:322
+msgid "New Collection %1"
+msgstr "Nouvelle collection %1"
+
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
+msgid "Default"
+msgstr "Par défaut"
+
+#: gui/stdactions.cpp:43
+msgid "Previous Track"
+msgstr "Piste précédente"
+
+#: gui/stdactions.cpp:44
+msgid "Next Track"
+msgstr "Piste suivante"
+
+#: gui/stdactions.cpp:45
+msgid "Play/Pause"
+msgstr "Lecture/Pause"
+
+#: gui/stdactions.cpp:47
+msgid "Stop After Current Track"
+msgstr "Arrêter après cette piste"
+
+#: gui/stdactions.cpp:49
+msgid "Increase Volume"
+msgstr "Augmenter le volume"
+
+#: gui/stdactions.cpp:50
+msgid "Decrease Volume"
+msgstr "Baisser le volume"
+
+#: gui/stdactions.cpp:51
+msgid "Save As"
+msgstr "Enregistrer en tant que"
+
+#: gui/stdactions.cpp:52
+msgid "Add To Play Queue"
+msgstr "Ajouter à la liste courante"
+
+#: gui/stdactions.cpp:53
+msgid "Replace Play Queue"
+msgstr "Remplacer la liste courante"
+
+#: gui/stdactions.cpp:54
+msgid "Add With Priority"
+msgstr "Ajouter en priorité"
+
+#: gui/stdactions.cpp:55
+msgid "Highest Priority (255)"
+msgstr "Priorité la plus forte (255)"
+
+#: gui/stdactions.cpp:56
+msgid "High Priority (200)"
+msgstr "Priorité forte (200)"
+
+#: gui/stdactions.cpp:57
+msgid "Medium Priority (125)"
+msgstr "Priorité moyenne (125)"
+
+#: gui/stdactions.cpp:58
+msgid "Low Priority (50)"
+msgstr "Priorité faible (50)"
+
+#: gui/stdactions.cpp:59
+msgid "Default Priority (0)"
+msgstr "Priorité par défaut (0)"
+
+#: gui/stdactions.cpp:60
+msgid "Custom Priority..."
+msgstr "Priorité personnalisée…"
+
+#: gui/stdactions.cpp:61
+msgid "Add To Playlist"
+msgstr "Ajouter à la liste de lecture"
+
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
+msgid "Organize Files"
+msgstr "Organiser les fichiers"
+
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr "Éditer les informations de la piste"
+
+#: gui/stdactions.cpp:70
+msgid "Copy Songs To Device"
+msgstr "Copier les pistes sur le périphérique"
+
+#: gui/stdactions.cpp:74
+msgid "Set Image"
+msgstr "Appliquer l'image"
+
+#: gui/stdactions.cpp:76
+msgid "Find"
+msgstr "Rechercher"
+
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
+msgid "Now playing"
+msgstr "En lecture"
+
+#: http/httpserversettings.cpp:71
+msgid "Local loopback (%1)"
+msgstr "Boucle locale (%1)"
+
+#: http/httpserversettings.cpp:74
+msgid "Wired (%1)"
+msgstr "Cablé (%1)"
+
+#: http/httpserversettings.cpp:77
+msgid "Wireless (%1)"
+msgstr "Sans fil (%1)"
+
+#: http/httpserversettings.cpp:84
+msgid "First active interface"
+msgstr "Première interface active"
+
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr "Lecture"
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr "Pause"
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
+msgctxt "Album by Artist"
+msgid "%1 by %2"
+msgstr "%1 par %2"
+
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
+msgid "Cue Sheet"
+msgstr "Liste Cue"
+
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
+msgid "Playlist"
+msgstr "Liste de lecture"
+
+#: models/devicesmodel.cpp:105
+msgid "Configure Device"
+msgstr "Configurer le périphérique"
+
+#: models/devicesmodel.cpp:106
+msgid "Refresh Device"
+msgstr "Rafraîchir le périphérique"
+
+#: models/devicesmodel.cpp:107
+msgid "Connect Device"
+msgstr "Connecter le périphérique"
+
+#: models/devicesmodel.cpp:108
+msgid "Disconnect Device"
+msgstr "Déconnecter le périphérique"
+
+#: models/devicesmodel.cpp:110
+msgid "Edit CD Details"
+msgstr "Éditer les propriétés du CD"
+
+#: models/devicesmodel.cpp:718
+msgid "No Devices Attached"
+msgstr "Pas de périphérique connecté"
+
+#: models/digitallyimported.cpp:101
+msgid "Not logged in"
+msgstr "Non connecté"
+
+#: models/digitallyimported.cpp:110
+msgid "Logged in"
+msgstr "Connecté"
+
+#: models/digitallyimported.cpp:171
+msgid "No subscriptions"
+msgstr "Pas de souscriptions"
+
+#: models/digitallyimported.cpp:178
+msgid "You do not have an active subscription"
+msgstr "Vous n'avez aucune souscription active"
+
+#: models/digitallyimported.cpp:197
+msgid "Logged in (expiry:%1)"
+msgstr "Connecté (expiration:%1)"
+
+#: models/digitallyimported.cpp:205
+msgid "Session expired"
+msgstr "Session expirée"
+
+#: models/dirviewmodel.cpp:219
+msgid "Audio File"
+msgstr "Fichier audio"
+
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
+msgid "Single Tracks"
+msgstr "Piste unique"
+
+#. i18n: file: online/onlinesettings.ui:47
+#. i18n: ectx: property (text), widget (QPushButton, configureButton)
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
+msgid "Configure Service"
+msgstr "Configurer le service"
+
+#: models/onlineservicesmodel.cpp:76
+msgid "Refresh Service"
+msgstr "Rafraîchir le service"
+
+#: models/onlineservicesmodel.cpp:77
+msgid "Add Subscription"
+msgstr "Ajouter une souscription"
+
+#: models/onlineservicesmodel.cpp:78
+msgid "Remove Subscription"
+msgstr "Supprimer la souscription"
+
+#: models/onlineservicesmodel.cpp:79
+msgid "Refresh Subscription"
+msgstr "Rafraîchir la souscription"
+
+#: models/onlineservicesmodel.cpp:146
+msgid "Last Search:%1"
+msgstr "Dernière recherche:%1"
+
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
+msgid "Not Loaded"
+msgstr "Non chargé"
+
+#: models/onlineservicesmodel.cpp:164
+msgid "Use search to locate tracks"
+msgstr "Utiliser la recherche pour trouver des pistes"
+
+#: models/onlineservicesmodel.cpp:178
+msgid "(Downloading: %1%)"
+msgstr "(Téléchargement: %1%)"
+
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr "(Téléchargement ajouté)"
+
+#: models/onlineservicesmodel.cpp:245
+msgctxt "podcast name (num unplayed episodes)"
+msgid "%1 (%2)"
+msgstr "%1 (%2)"
+
+#: models/playlistsmodel.cpp:101
+msgid "New Playlist..."
+msgstr "Nouvelle liste de lecture…"
+
+#: models/playlistsmodel.cpp:356
+msgid "Smart Playlist"
+msgstr "Liste de lecture intelligente"
+
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
+msgid "Length"
+msgstr "Durée"
+
+#: models/playqueuemodel.cpp:172
+msgid "Disc"
+msgstr "Disque"
+
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr "Note"
+
+#: models/playqueuemodel.cpp:241
+msgid "Undo"
+msgstr "Annuler"
+
+#: models/playqueuemodel.cpp:243
+msgid "Redo"
+msgstr "Refaire"
+
+#: models/playqueuemodel.cpp:249
+msgid "Shuffle"
+msgstr "Mélanger"
+
+#: models/playqueuemodel.cpp:258
+msgid "Sort By"
+msgstr "Trier par"
+
+#. i18n: file: devices/filenameschemedialog.ui:82
+#. i18n: ectx: property (text), widget (QPushButton, albumArtist)
+#: models/playqueuemodel.cpp:261 po/rc.cpp:212 rc.cpp:212
+msgid "Album Artist"
+msgstr "Artiste Album"
+
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
+msgid "Loading..."
+msgstr "Chargement…"
+
+#: models/streamsmodel.cpp:254
+msgid "Bookmarks"
+msgstr "Favoris"
+
+#: models/streamsmodel.cpp:538
+msgid "TuneIn"
+msgstr "TuneIn"
+
+#: models/streamsmodel.cpp:541
+msgid "IceCast"
+msgstr "IceCast"
+
+#: models/streamsmodel.cpp:542
+msgid "ShoutCast"
+msgstr "ShoutCast"
+
+#: models/streamsmodel.cpp:545
+msgid "Dirble"
+msgstr "Dirble"
+
+#: models/streamsmodel.cpp:548
+msgid "Favorites"
+msgstr "Favoris"
+
+#: models/streamsmodel.cpp:551
+msgid "Bookmark Category"
+msgstr "Catégorie des favoris"
+
+#: models/streamsmodel.cpp:552
+msgid "Add Stream To Favorites"
+msgstr "Ajouter le flux aux favoris"
+
+#: models/streamsmodel.cpp:553
+msgid "Configure Streams"
+msgstr "Configurer le flux"
+
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: mpd/mpdconnection.cpp:212
+msgctxt "name (host)"
+msgid "\"%1\""
+msgstr "\"%1\""
+
+#: mpd/mpdconnection.cpp:214
+msgctxt "name (host:port)"
+msgid "\"%1\" (%2:%3)"
+msgstr "\"%1\" (%2:%3)"
+
+#: mpd/mpdconnection.cpp:411
+msgid "Connection to %1 failed"
+msgstr "La connexion à %1 a échoué"
+
+#: mpd/mpdconnection.cpp:412
+msgid "Connection to %1 failed - please check your proxy settings"
+msgstr ""
+"La connexion à %1 a échoué - Veuillez vérifier votre configuration proxy"
+
+#: mpd/mpdconnection.cpp:413
+msgid "Connection to %1 failed - incorrect password"
+msgstr "La connexion à %1 a échoué - mot de passe incorrect"
+
+#: mpd/mpdconnection.cpp:591
+msgid "Failed to send command to %1 - not connected"
+msgstr "L'envoie de la commande à %1 a échoué - non connecté"
+
+#: mpd/mpdconnection.cpp:648
+msgid "Failed to load. Please check user \"mpd\" has read permission."
+msgstr ""
+"Le chargement a échoué. Veuillez vérifier si \"mpd\" a les permissions de "
+"lecture."
+
+#: mpd/mpdconnection.cpp:650
+msgid ""
+"Failed to load. MPD can only play local files if connected via a local "
+"socket."
+msgstr ""
+"Le chargement a échoué. MPD peut lire les pistes locales uniquement s'il est "
+"connecté à un socket local."
+
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
+msgid "Failed to send command. Disconnected from %1"
+msgstr "L'envoie de la commande a échoué. Déconnecté de %1"
+
+#: mpd/mpdconnection.cpp:1522
+msgid "Failed to rename <b>%1</b> to <b>%2</b>"
+msgstr "Le renommage de <b>%1</b> à <b>%2</b> a échoué"
+
+#: mpd/mpdconnection.cpp:1534
+msgid "Failed to save <b>%1</b>"
+msgstr "La sauvegarde de <b>%1</b> a échoué"
+
+#: mpd/mpdconnection.cpp:1547
+msgid "You cannot add parts of a cue sheet to a playlist!"
+msgstr ""
+"Vous ne pouvez pas ajouter des parties d'un fichier Cue à une liste de "
+"lecture !"
+
+#: mpd/mpdconnection.cpp:1550
+msgid "You cannot add a playlist to another playlist!"
+msgstr "Il est impossible d'ajouter une liste de lecture dans une autre !"
+
+#: mpd/mpdconnection.cpp:1727
+msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
+msgstr ""
+"L'envoie de '%1' à %2 a échoué. Veuillez vérifier si %2 est présent dans MPD."
+
+#: mpd/mpduser.cpp:50
+msgid "Personal"
+msgstr "Personnel"
+
+#: mpd/song.cpp:62
+msgid "Various Artists"
+msgstr "Artistes divers"
+
+#: mpd/song.cpp:445
+msgctxt ""
+"Song\n"
+"Artist\n"
+"Album"
+msgid ""
+"%1\n"
+"%2\n"
+"%3"
+msgstr ""
+"%1\n"
+"%2\n"
+"%3"
+
+#: mpd/song.cpp:683
+msgctxt "Song on Album"
+msgid "<b>%1</b> on <b>%2</b>"
+msgstr "<b>%1</b> sur <b>%2</b>"
+
+#: mpd/song.cpp:684
+msgctxt "Song by Artist on Album"
+msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
+msgstr "<b>%1</b> par <b>%2</b> sur <b>%3</b>"
+
+#: network/proxysettings.cpp:33
+msgid "No proxy"
+msgstr "Pas de proxy"
+
+#: network/proxysettings.cpp:34
+msgid "Use the system proxy settings"
+msgstr "Utiliser les paramètres proxy du système"
+
+#: network/proxysettings.cpp:35
+msgid "Manual proxy configuration"
+msgstr "Configuration manuelle du proxy"
+
+#: online/jamendosettingsdialog.cpp:33
+msgid "Jamendo Settings"
+msgstr "Paramètres Jamendo"
+
+#: online/jamendosettingsdialog.cpp:37
+msgid "MP3"
+msgstr "MP3"
+
+#: online/jamendosettingsdialog.cpp:38
+msgid "Ogg"
+msgstr "Ogg"
+
+#: online/jamendosettingsdialog.cpp:39
+msgid "Streaming format:"
+msgstr "Format du flux:"
+
+#: online/magnatuneservice.cpp:165
+msgid "Streaming"
+msgstr "Flux continu"
+
+#: online/magnatuneservice.cpp:184
+msgid "MP3 128k"
+msgstr "MP3 128K"
+
+#: online/magnatuneservice.cpp:185
+msgid "MP3 VBR"
+msgstr "MP3 VBR"
+
+#: online/magnatuneservice.cpp:188
+msgid "WAV"
+msgstr "WAV"
+
+#: online/magnatunesettingsdialog.cpp:34
+msgid "Magnatune Settings"
+msgstr "Paramètres Magnatune"
+
+#. i18n: file: network/proxysettings.ui:96
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:51
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: network/proxysettings.ui:96
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:51
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
+msgid "Username:"
+msgstr "Identifiant:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
+#. i18n: file: gui/initialsettingswizard.ui:423
+#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
+#. i18n: file: gui/serversettings.ui:112
+#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
+#. i18n: file: network/proxysettings.ui:109
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
+#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:64
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
+#. i18n: file: gui/initialsettingswizard.ui:423
+#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
+#. i18n: file: gui/serversettings.ui:112
+#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
+#. i18n: file: network/proxysettings.ui:109
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
+#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:64
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
+msgid "Password:"
+msgstr "Mot de passe:"
+
+#: online/magnatunesettingsdialog.cpp:52
+msgid "Membership:"
+msgstr "Adhésion:"
+
+#: online/magnatunesettingsdialog.cpp:58
+msgid "Downloads:"
+msgstr "Téléchargements:"
+
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
+msgid "Dowloading"
+msgstr "Téléchargement"
+
+#: online/onlineservice.cpp:101
+msgid "Updating display"
+msgstr "Rafraîchissement de l'affichage"
+
+#: online/onlineservice.cpp:112
+msgid "Grouping tracks"
+msgstr "Regroupement des pistes"
+
+#: online/onlineservice.cpp:132
+msgid "Parsing response"
+msgstr "Analyse du résultat"
+
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
+msgid "Failed to parse"
+msgstr "L'analyse a échoué"
+
+#: online/onlineservice.cpp:150
+msgid "Failed to download"
+msgstr "Le téléchargement a échoué"
+
+#: online/onlineservicespage.cpp:58
+msgid "Download To Library"
+msgstr "Télécharger vers la bibliothèque"
+
+#: online/onlineservicespage.cpp:59
+msgid "Download Podcast Episodes"
+msgstr "Télécharger les épisodes podcast"
+
+#: online/onlineservicespage.cpp:60
+msgid "Delete Downloaded Podcast Episodes"
+msgstr "Supprimer les épisodes podcast téléchargés"
+
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr "Annuler les épisodes podcast en téléchargement"
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr "Déclarer ces épisodes podcast comme nouveaux"
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr "Déclarer ces épisodes podcast comme écoutés"
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Configurer…"
+
+#: online/onlineservicespage.cpp:322
+msgctxt "Search ServiceName:"
+msgid "Search %1:"
+msgstr "Rechercher %1:"
+
+#: online/onlineservicespage.cpp:467
+msgid "Re-download music listing for %1?"
+msgstr "Télécharger la liste de pistes pour %1 à nouveau ?"
+
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
+msgid "Re-download"
+msgstr "Télécharger à nouveau"
+
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr "Se désabonner de '%1' ?"
+
+#: online/onlineservicespage.cpp:574
+msgid "Refresh all podcast listings?"
+msgstr "Rafraîchir la liste de tous les podcasts ?"
+
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr "Rafraîchir les épisodes de '%1' ?"
+
+#: online/onlineservicespage.cpp:634
+msgid "Do you wish to download the selected podcast episodes?"
+msgstr "Souhaitez-vous télécharger les épisodes podcast sélectionnés ?"
+
+#: online/onlineservicespage.cpp:648
+msgid ""
+"Cancel podcast episode downloads (both current and any that are queued)?"
+msgstr ""
+"Annuler le téléchargement des épisodes (y compris ceux en téléchargement et "
+"en attente) ?"
+
+#: online/onlineservicespage.cpp:685
+msgid ""
+"Do you wish to the delete downloaded files of the selected podcast episodes?"
+msgstr ""
+"Souhaitez vous supprimer les fichiers téléchargés des podcasts sélectionnés ?"
+
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr "Souhaitez vous définir les podcasts sélectionnés comme nouveaux ?"
+
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr "Souhaitez vous définir les podcasts sélectionnés comme écoutés ?"
+
+#: online/podcastsearchdialog.cpp:256
+msgid "RSS:"
+msgstr "RSS:"
+
+#: online/podcastsearchdialog.cpp:258
+msgid "Website:"
+msgstr "Site web:"
+
+#: online/podcastsearchdialog.cpp:265
+msgid "Podcast details"
+msgstr "Détails du podcast"
+
+#: online/podcastsearchdialog.cpp:265
+msgid "Select a podcast to display its details"
+msgstr "Choisissez un podcast pour afficher ses informations complémentaires"
+
+#: online/podcastsearchdialog.cpp:336
+msgid "Enter search term..."
+msgstr "Entrez les termes de la recherche…"
+
+#: online/podcastsearchdialog.cpp:386
+msgid "Failed to fetch podcasts from %1"
+msgstr "La récupération des podcasts depuis %1 a échoué"
+
+#: online/podcastsearchdialog.cpp:395
+msgid "There was a problem parsing the response from %1"
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:452
+msgid "Failed to download directory listing"
+msgstr "La récupération de la liste des dossiers a échoué"
+
+#: online/podcastsearchdialog.cpp:460
+msgid "Failed to parse directory listing"
+msgstr "L'analyse de la liste des dossiers a échoué"
+
+#: online/podcastsearchdialog.cpp:510
+msgid "URL"
+msgstr "URL"
+
+#: online/podcastsearchdialog.cpp:519
+msgid "Enter podcast URL..."
+msgstr "Entrer l'URL du podcast"
+
+#: online/podcastsearchdialog.cpp:520
+msgid "Load"
+msgstr "Charger"
+
+#: online/podcastsearchdialog.cpp:527
+msgid "Enter podcast URL below, and press 'Load'"
+msgstr "Veuillez entrer l'URL du podcast ci-dessous, et cliquez sur 'Charger'"
+
+#: online/podcastsearchdialog.cpp:554
+msgid "Invalid URL!"
+msgstr "URL Invalide !"
+
+#: online/podcastsearchdialog.cpp:564
+msgid "Failed to fetch podcast!"
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:569
+msgid "Failed to parse podcast."
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:573
+msgid ""
+"Cantata only supports audio podcasts! The URL entered contains only video "
+"podcasts."
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:591
+msgid "Subscribe"
+msgstr "Souscrire"
+
+#: online/podcastsearchdialog.cpp:609
+msgid "Enter URL"
+msgstr "Entrer l'URL"
+
+#: online/podcastsearchdialog.cpp:609
+msgid "Manual podcast URL"
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
+msgid "Search %1"
+msgstr "Rechercher %1"
+
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
+msgid "Search for podcasts on %1"
+msgstr "Recherche de podcasts sur %1"
+
+#: online/podcastsearchdialog.cpp:629
+msgid "Add Podcast Subscription"
+msgstr "Ajouter la souscription au podcast"
+
+#: online/podcastsearchdialog.cpp:704
+msgid "Browse %1"
+msgstr "Parcourir %1"
+
+#: online/podcastsearchdialog.cpp:704
+msgid "Browse %1 podcasts"
+msgstr "Parcourir les podcasts de %1"
+
+#: online/podcastsearchdialog.cpp:720
+msgid "Subscription added"
+msgstr "Souscription ajoutée"
+
+#: online/podcastsearchdialog.cpp:722
+msgid "You are already subscribed to this podcast!"
+msgstr "Vous êtes désormais enregistré sur ce podcast!"
+
+#: online/podcastservice.cpp:104
+msgid "Podcasts"
+msgstr "Podcasts"
+
+#: online/podcastservice.cpp:288
+msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
+msgstr ""
+
+#: online/podcastservice.cpp:290
+msgid "Failed to parse %1"
+msgstr "L'analyse de %1 a échoué"
+
+#: online/podcastservice.cpp:294
+msgid "Failed to download %1"
+msgstr "Le téléchargement de %1 a échoué"
+
+#: online/podcastsettingsdialog.cpp:59
+msgid "Check for new episodes:"
+msgstr "Vérifier l'existence de nouveaux épisodes:"
+
+#: online/podcastsettingsdialog.cpp:60
+msgid "Download episodes to:"
+msgstr "Télécharger les épisodes vers:"
+
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr "Télécharger automatiquement:"
+
+#: online/podcastsettingsdialog.cpp:85
+msgid "Podcast Settings"
+msgstr "Paramètres des podcasts:"
+
+#: online/podcastsettingsdialog.cpp:87
+msgid "Manually"
+msgstr "Manuellement"
+
+#: online/podcastsettingsdialog.cpp:88
+msgid "Every 15 minutes"
+msgstr "Toutes les 15 minutes"
+
+#: online/podcastsettingsdialog.cpp:89
+msgid "Every 30 minutes"
+msgstr "Toutes les 30 minutes"
+
+#: online/podcastsettingsdialog.cpp:90
+msgid "Every hour"
+msgstr "Toutes heures"
+
+#: online/podcastsettingsdialog.cpp:91
+msgid "Every 2 hours"
+msgstr "Toutes les 2 heures"
+
+#: online/podcastsettingsdialog.cpp:92
+msgid "Every 6 hours"
+msgstr "Toutes les 6 heures"
+
+#: online/podcastsettingsdialog.cpp:93
+msgid "Every 12 hours"
+msgstr "Toutes les 12 heures"
+
+#: online/podcastsettingsdialog.cpp:94
+msgid "Every day"
+msgstr "Chaque jour"
+
+#: online/podcastsettingsdialog.cpp:95
+msgid "Every week"
+msgstr "Chaque semaine"
+
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr "Ne pas télécharger automatiquement les épisodes"
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr "Dernier épisode"
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr "%1 derniers épisodes"
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr "Tous les épisodes"
+
+#. i18n: file: context/othersettings.ui:26
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#. i18n: file: gui/interfacesettings.ui:429
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#. i18n: file: context/othersettings.ui:26
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#. i18n: file: gui/interfacesettings.ui:429
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
+msgid "Background Image"
+msgstr "Image de fond"
+
+#. i18n: file: context/othersettings.ui:39
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_artist)
+#: po/rc.cpp:9 rc.cpp:9
+msgid "Artist image"
+msgstr "Image de l'artiste"
+
+#. i18n: file: context/othersettings.ui:46
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
+#. i18n: file: gui/interfacesettings.ui:449
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
+#. i18n: file: context/othersettings.ui:46
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
+#. i18n: file: gui/interfacesettings.ui:449
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
+msgid "Custom image:"
+msgstr "Image personnalisée"
+
+#. i18n: file: context/othersettings.ui:66
+#. i18n: ectx: property (text), widget (QLabel, label_4b)
+#. i18n: file: gui/interfacesettings.ui:469
+#. i18n: ectx: property (text), widget (QLabel, label_4b)
+#. i18n: file: context/othersettings.ui:66
+#. i18n: ectx: property (text), widget (QLabel, label_4b)
+#. i18n: file: gui/interfacesettings.ui:469
+#. i18n: ectx: property (text), widget (QLabel, label_4b)
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
+msgid "Blur:"
+msgstr "Flou:"
+
+#. i18n: file: context/othersettings.ui:103
+#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
+#. i18n: file: gui/interfacesettings.ui:515
+#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
+#. i18n: file: context/othersettings.ui:103
+#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
+#. i18n: file: gui/interfacesettings.ui:515
+#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
+msgid "10px"
+msgstr "10px"
+
+#. i18n: file: context/othersettings.ui:115
+#. i18n: ectx: property (text), widget (QLabel, label_4)
+#. i18n: file: gui/interfacesettings.ui:527
+#. i18n: ectx: property (text), widget (QLabel, label_4)
+#. i18n: file: context/othersettings.ui:115
+#. i18n: ectx: property (text), widget (QLabel, label_4)
+#. i18n: file: gui/interfacesettings.ui:527
+#. i18n: ectx: property (text), widget (QLabel, label_4)
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
+msgid "Opacity:"
+msgstr "Opacité:"
+
+#. i18n: file: context/othersettings.ui:152
+#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
+#. i18n: file: gui/interfacesettings.ui:573
+#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
+#. i18n: file: context/othersettings.ui:152
+#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
+#. i18n: file: gui/interfacesettings.ui:573
+#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
+#, no-c-format
+msgid "40%"
+msgstr "40%"
+
+#. i18n: file: context/othersettings.ui:167
+#. i18n: ectx: property (text), widget (BuddyLabel, contextSwitchTimeLabel)
+#: po/rc.cpp:28 rc.cpp:28
+msgid "Automatically switch to view after:"
+msgstr ""
+
+#. i18n: file: context/othersettings.ui:177
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, contextSwitchTime)
+#: po/rc.cpp:31 rc.cpp:31
+msgid "Do not auto-switch"
+msgstr "Désactiver le changement automatique"
+
+#. i18n: file: context/othersettings.ui:180
+#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
+#. i18n: file: gui/playbacksettings.ui:48
+#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: context/othersettings.ui:180
+#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
+#. i18n: file: gui/playbacksettings.ui:48
+#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
+msgid " ms"
+msgstr " ms"
+
+#. i18n: file: context/othersettings.ui:193
+#. i18n: ectx: property (text), widget (QCheckBox, contextDarkBackground)
+#: po/rc.cpp:37 rc.cpp:37
+msgid "Dark background"
+msgstr "Fond sombre"
+
+#. i18n: file: context/othersettings.ui:196
+#. i18n: ectx: property (toolTip), widget (QCheckBox, contextDarkBackground)
+#: po/rc.cpp:40 rc.cpp:40
+msgid ""
+"Darken background, and use white text, regardless of current color palette."
+msgstr ""
+
+#. i18n: file: context/othersettings.ui:203
+#. i18n: ectx: property (text), widget (QCheckBox, contextAlwaysCollapsed)
+#: po/rc.cpp:43 rc.cpp:43
+msgid "Always collapse into a single pane"
+msgstr "Toujours regrouper en un seul panneau"
+
+#. i18n: file: context/othersettings.ui:206
+#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
+#: po/rc.cpp:46 rc.cpp:46
+msgid ""
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
+msgstr ""
+
+#. i18n: file: context/othersettings.ui:213
+#. i18n: ectx: property (text), widget (QCheckBox, wikipediaIntroOnly)
+#: po/rc.cpp:49 rc.cpp:49
+msgid "Only show basic wikipedia text"
+msgstr "N'afficher que le texte Wikipédia de base"
+
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
+#: po/rc.cpp:53 rc.cpp:53
+#, no-c-format
+msgid ""
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
+
+#. i18n: file: context/togglelist.ui:17
+#. i18n: ectx: property (text), widget (QLabel, label_2)
+#: po/rc.cpp:56 rc.cpp:56
+msgid "Available:"
+msgstr "Disponible:"
+
+#. i18n: file: context/togglelist.ui:24
+#. i18n: ectx: property (text), widget (QLabel, label_3)
+#: po/rc.cpp:59 rc.cpp:59
+msgid "Selected:"
+msgstr "Sélectionner le fichier:"
+
+#. i18n: file: devices/actiondialog.ui:51
+#. i18n: ectx: property (text), widget (QLabel, label)
+#: po/rc.cpp:62 rc.cpp:62
+msgid "Copy songs from:"
+msgstr "Copier les pistes depuis:"
+
+#. i18n: file: devices/actiondialog.ui:82
+#. i18n: ectx: property (text), widget (QLabel, configureSourceLabel)
+#. i18n: file: devices/actiondialog.ui:135
+#. i18n: ectx: property (text), widget (QLabel, configureDestLabel)
+#. i18n: file: devices/actiondialog.ui:82
+#. i18n: ectx: property (text), widget (QLabel, configureSourceLabel)
+#. i18n: file: devices/actiondialog.ui:135
+#. i18n: ectx: property (text), widget (QLabel, configureDestLabel)
+#: po/rc.cpp:68 po/rc.cpp:77 rc.cpp:68 rc.cpp:77
+msgid "(Needs configuring)"
+msgstr "(Configuration nécessaire)"
+
+#. i18n: file: devices/actiondialog.ui:104
+#. i18n: ectx: property (text), widget (QLabel, label_3)
+#: po/rc.cpp:71 rc.cpp:71
+msgid "Copy songs to:"
+msgstr "Copier les pistes vers:"
+
+#. i18n: file: devices/actiondialog.ui:167
+#. i18n: ectx: property (text), widget (QLabel, codecLabel)
+#: po/rc.cpp:80 rc.cpp:80
+msgid "Destination format:"
+msgstr "Fichier de destination:"
+
+#. i18n: file: devices/actiondialog.ui:181
+#. i18n: ectx: property (text), widget (QCheckBox, overwrite)
+#: po/rc.cpp:83 rc.cpp:83
+msgid "Overwrite songs"
+msgstr "Remplacer les chansons"
+
+#. i18n: file: devices/actiondialog.ui:188
+#. i18n: ectx: property (text), widget (QLabel, songCountLabel)
+#: po/rc.cpp:86 rc.cpp:86
+msgid "To copy:"
+msgstr "À copier:"
+
+#. i18n: file: devices/actiondialog.ui:205
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
+#. i18n: file: tags/trackorganiser.ui:130
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: devices/actiondialog.ui:205
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
+#. i18n: file: tags/trackorganiser.ui:130
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
+msgstr "Connecté à un serveur Mopidy (mise à jour manuelle nécessaire)."
+
+#. i18n: file: devices/albumdetails.ui:26
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#: po/rc.cpp:92 rc.cpp:92
+msgid "Album Details"
+msgstr "Détails de l'album"
+
+#. i18n: file: devices/albumdetails.ui:89
+#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
+#. i18n: file: tags/tageditor.ui:158
+#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
+#. i18n: file: devices/albumdetails.ui:89
+#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
+#. i18n: file: tags/tageditor.ui:158
+#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
+msgid "Year:"
+msgstr "Année:"
+
+#. i18n: file: devices/albumdetails.ui:102
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
+#: po/rc.cpp:110 rc.cpp:110
+msgid "Disc:"
+msgstr "Disque:"
+
+#. i18n: file: devices/albumdetails.ui:115
+#. i18n: ectx: property (text), widget (QCheckBox, singleArtist)
+#: po/rc.cpp:113 rc.cpp:113
+msgid "Single artist"
+msgstr "Piste unique:"
+
+#. i18n: file: devices/audiocdsettings.ui:29
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#: po/rc.cpp:128 rc.cpp:128
+msgid "Album and Track Information Retrieval"
+msgstr "Récupérer les informations de l'album et des pistes"
+
+#. i18n: file: devices/audiocdsettings.ui:38
+#. i18n: ectx: property (text), widget (BuddyLabel, cdLookupLabel)
+#: po/rc.cpp:131 rc.cpp:131
+msgid "Initially look up via:"
+msgstr "Vérifier initialement via:"
+
+#. i18n: file: devices/audiocdsettings.ui:51
+#. i18n: ectx: property (text), widget (BuddyLabel, cddbHostLabel)
+#: po/rc.cpp:134 rc.cpp:134
+msgid "CDDB Host:"
+msgstr "Hôte CDDB:"
+
+#. i18n: file: devices/audiocdsettings.ui:64
+#. i18n: ectx: property (text), widget (BuddyLabel, cddbPortLabel)
+#: po/rc.cpp:137 rc.cpp:137
+msgid "CDDB Port:"
+msgstr "Port CDDB:"
+
+#. i18n: file: devices/audiocdsettings.ui:84
+#. i18n: ectx: property (text), widget (QCheckBox, cdAuto)
+#: po/rc.cpp:140 rc.cpp:140
+msgid "Lookup information as soon as CD is inserted"
+msgstr "Récupérer les informations dès l’insertion d'un CD"
+
+#. i18n: file: devices/audiocdsettings.ui:94
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
+#: po/rc.cpp:143 rc.cpp:143
+msgid "Audio Extraction"
+msgstr "Extraction audio"
+
+#. i18n: file: devices/audiocdsettings.ui:100
+#. i18n: ectx: property (text), widget (QCheckBox, paranoiaFull)
+#: po/rc.cpp:146 rc.cpp:146
+msgid "Full paranoia mode (best quality)"
+msgstr ""
+
+#. i18n: file: devices/audiocdsettings.ui:107
+#. i18n: ectx: property (text), widget (QCheckBox, paranoiaNeverSkip)
+#: po/rc.cpp:149 rc.cpp:149
+msgid "Never skip on read error"
+msgstr "Ne jamais sauter les erreurs de lecture"
+
+#. i18n: file: devices/devicepropertieswidget.ui:20
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
+#: po/rc.cpp:152 rc.cpp:152
+msgid ""
+"These settings are only valid, and editable, when the device is connected."
+msgstr ""
+"Ces paramètres ne sont valables et éditables que quand le périphérique est "
+"connecté."
+
+#. i18n: file: devices/devicepropertieswidget.ui:32
+#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
+#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
+#. i18n: file: gui/serversettings.ui:63
+#. i18n: ectx: property (text), widget (QLabel, label_2)
+#. i18n: file: devices/devicepropertieswidget.ui:32
+#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
+#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
+#. i18n: file: gui/serversettings.ui:63
+#. i18n: ectx: property (text), widget (QLabel, label_2)
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
+msgid "Name:"
+msgstr "Nom:"
+
+#. i18n: file: devices/devicepropertieswidget.ui:45
+#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
+#. i18n: file: gui/initialsettingswizard.ui:440
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
+#. i18n: file: gui/initialsettingswizard.ui:588
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
+#. i18n: file: gui/serversettings.ui:129
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
+#. i18n: file: gui/serversettings.ui:233
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
+#. i18n: file: devices/devicepropertieswidget.ui:45
+#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
+#. i18n: file: gui/initialsettingswizard.ui:440
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
+#. i18n: file: gui/initialsettingswizard.ui:588
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
+#. i18n: file: gui/serversettings.ui:129
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
+#. i18n: file: gui/serversettings.ui:233
+#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
+msgid "Music folder:"
+msgstr "Dossier musical:"
+
+#. i18n: file: devices/devicepropertieswidget.ui:58
+#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
+#: po/rc.cpp:161 rc.cpp:161
+msgid "Copy album covers as:"
+msgstr "Copier la pochette en tant que:"
+
+#. i18n: file: devices/devicepropertieswidget.ui:75
+#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
+#: po/rc.cpp:164 rc.cpp:164
+msgid "Maximum cover size:"
+msgstr "Taille maximum des pochettes:"
+
+#. i18n: file: devices/devicepropertieswidget.ui:95
+#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
+#: po/rc.cpp:167 rc.cpp:167
+msgid "Default volume:"
+msgstr "Volume par défaut"
+
+#. i18n: file: devices/devicepropertieswidget.ui:102
+#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
+#: po/rc.cpp:170 rc.cpp:170
+msgid "'Various Artists' workaround"
+msgstr "Solution de contournement pour 'Artistes divers'"
+
+#. i18n: file: devices/devicepropertieswidget.ui:109
+#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
+#: po/rc.cpp:173 rc.cpp:173
+msgid "Automatically scan music when attached"
+msgstr "Analyser automatiquement les pistes"
+
+#. i18n: file: devices/devicepropertieswidget.ui:116
+#. i18n: ectx: property (text), widget (QCheckBox, useCache)
+#: po/rc.cpp:176 rc.cpp:176
+msgid "Use cache"
+msgstr "Utiliser le cache"
+
+#. i18n: file: devices/devicepropertieswidget.ui:125
+#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
+#. i18n: file: tags/trackorganiser.ui:25
+#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
+#. i18n: file: devices/devicepropertieswidget.ui:125
+#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
+#. i18n: file: tags/trackorganiser.ui:25
+#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
+msgid "Filenames"
+msgstr "Nom des fichiers"
+
+#. i18n: file: devices/devicepropertieswidget.ui:134
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
+#. i18n: file: tags/trackorganiser.ui:61
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
+#. i18n: file: devices/devicepropertieswidget.ui:134
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
+#. i18n: file: tags/trackorganiser.ui:61
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
+msgid "Filename scheme:"
+msgstr "Schéma de nommage:"
+
+#. i18n: file: devices/devicepropertieswidget.ui:171
+#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
+#. i18n: file: tags/trackorganiser.ui:71
+#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
+#. i18n: file: devices/devicepropertieswidget.ui:171
+#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
+#. i18n: file: tags/trackorganiser.ui:71
+#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
+msgid "VFAT safe"
+msgstr ""
+
+#. i18n: file: devices/devicepropertieswidget.ui:178
+#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
+#. i18n: file: tags/trackorganiser.ui:78
+#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
+#. i18n: file: devices/devicepropertieswidget.ui:178
+#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
+#. i18n: file: tags/trackorganiser.ui:78
+#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
+msgid "Use only ASCII characters"
+msgstr "Utiliser seulement des caractères ASCII"
+
+#. i18n: file: devices/devicepropertieswidget.ui:185
+#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
+#. i18n: file: tags/trackorganiser.ui:85
+#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
+#. i18n: file: devices/devicepropertieswidget.ui:185
+#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
+#. i18n: file: tags/trackorganiser.ui:85
+#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
+msgid "Replace spaces with underscores"
+msgstr "Remplacer les espaces avec des tirets-bas"
+
+#. i18n: file: devices/devicepropertieswidget.ui:192
+#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
+#. i18n: file: tags/trackorganiser.ui:92
+#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
+#. i18n: file: devices/devicepropertieswidget.ui:192
+#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
+#. i18n: file: tags/trackorganiser.ui:92
+#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr "Ajouter 'The' aux nom des artistes"
+
+#. i18n: file: devices/devicepropertieswidget.ui:202
+#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
+#: po/rc.cpp:197 rc.cpp:197
+msgid "Transcoding"
+msgstr "Transcodage"
+
+#. i18n: file: devices/devicepropertieswidget.ui:211
+#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
+#: po/rc.cpp:200 rc.cpp:200
+msgid "Only transcode if source file is of a different format"
+msgstr "Convertir seulement si le fichier source est dans un format différent"
+
+#. i18n: file: devices/filenameschemedialog.ui:38
+#. i18n: ectx: property (text), widget (QLabel, label_album_example)
+#: po/rc.cpp:203 rc.cpp:203
+msgid "Example:"
+msgstr "Exemple:"
+
+#. i18n: file: devices/filenameschemedialog.ui:67
+#. i18n: ectx: property (text), widget (UrlLabel, help)
+#: po/rc.cpp:206 rc.cpp:206
+msgid "About filename schemes"
+msgstr "À propos du schéma de nommage"
+
+#. i18n: file: devices/filenameschemedialog.ui:79
+#. i18n: ectx: property (toolTip), widget (QPushButton, albumArtist)
+#: po/rc.cpp:209 rc.cpp:209
+msgid ""
+"The artist of the album. For most albums, this will be the same as the "
+"<i>Track Artist.</i> For compilations, this will often be <i>Various Artists."
+"</i>"
+msgstr ""
+"L'artiste de l'album. Pour la plupart des albums, il aura la même valeur que "
+"<i>l'artiste des pistes</i>. Pour les compilations, il sera souvent défini "
+"comme <i>Artistes Divers</i>."
+
+#. i18n: file: devices/filenameschemedialog.ui:89
+#. i18n: ectx: property (toolTip), widget (QPushButton, albumTitle)
+#: po/rc.cpp:215 rc.cpp:215
+msgid "The name of the album."
+msgstr "Le nom de l'album."
+
+#. i18n: file: devices/filenameschemedialog.ui:92
+#. i18n: ectx: property (text), widget (QPushButton, albumTitle)
+#: po/rc.cpp:218 rc.cpp:218
+msgid "Album Title"
+msgstr "Titre de l'album"
+
+#. i18n: file: devices/filenameschemedialog.ui:99
+#. i18n: ectx: property (toolTip), widget (QPushButton, composer)
+#: po/rc.cpp:221 rc.cpp:221
+msgid "The composer."
+msgstr "Le compositeur"
+
+#. i18n: file: devices/filenameschemedialog.ui:109
+#. i18n: ectx: property (toolTip), widget (QPushButton, trackArtist)
+#: po/rc.cpp:227 rc.cpp:227
+msgid "The artist of each track."
+msgstr "L'artiste de chaque piste."
+
+#. i18n: file: devices/filenameschemedialog.ui:112
+#. i18n: ectx: property (text), widget (QPushButton, trackArtist)
+#: po/rc.cpp:230 rc.cpp:230
+msgid "Track Artist"
+msgstr "Artiste de la piste"
+
+#. i18n: file: devices/filenameschemedialog.ui:119
+#. i18n: ectx: property (toolTip), widget (QPushButton, trackTitle)
+#: po/rc.cpp:233 rc.cpp:233
+msgid "The track title (without <i>Track Artist</i>)."
+msgstr "Le titre de la piste (sans <i>l'artiste de la piste</i>)."
+
+#. i18n: file: devices/filenameschemedialog.ui:122
+#. i18n: ectx: property (text), widget (QPushButton, trackTitle)
+#: po/rc.cpp:236 rc.cpp:236
+msgid "Track Title"
+msgstr "Titre de la piste"
+
+#. i18n: file: devices/filenameschemedialog.ui:141
+#. i18n: ectx: property (toolTip), widget (QPushButton, trackArtistAndTitle)
+#: po/rc.cpp:239 rc.cpp:239
+msgid ""
+"The track title (with <i>Track Artist</i>, if different to <i>Album Artist</"
+"i>)."
+msgstr ""
+"Le titre de la piste (avec <i>l'artiste de la piste</i> s'il est différent "
+"de <i>l'artiste de l'album</i>)."
+
+#. i18n: file: devices/filenameschemedialog.ui:144
+#. i18n: ectx: property (text), widget (QPushButton, trackArtistAndTitle)
+#: po/rc.cpp:242 rc.cpp:242
+msgid "Track Title (+Artist)"
+msgstr "Titre de la piste (+Artiste)"
+
+#. i18n: file: devices/filenameschemedialog.ui:151
+#. i18n: ectx: property (toolTip), widget (QPushButton, trackNo)
+#: po/rc.cpp:245 rc.cpp:245
+msgid "The track number."
+msgstr "Piste numéro"
+
+#. i18n: file: devices/filenameschemedialog.ui:154
+#. i18n: ectx: property (text), widget (QPushButton, trackNo)
+#: po/rc.cpp:248 rc.cpp:248
+msgid "Track #"
+msgstr "Piste #"
+
+#. i18n: file: devices/filenameschemedialog.ui:161
+#. i18n: ectx: property (toolTip), widget (QPushButton, cdNo)
+#: po/rc.cpp:251 rc.cpp:251
+msgid ""
+"The album number of a multi-album album. Often compilations consist of "
+"several albums."
+msgstr ""
+
+#. i18n: file: devices/filenameschemedialog.ui:164
+#. i18n: ectx: property (text), widget (QPushButton, cdNo)
+#: po/rc.cpp:254 rc.cpp:254
+msgid "CD #"
+msgstr "CD #"
+
+#. i18n: file: devices/filenameschemedialog.ui:171
+#. i18n: ectx: property (toolTip), widget (QPushButton, year)
+#: po/rc.cpp:257 rc.cpp:257
+msgid "The year of the album's release."
+msgstr "Année de sortie de l'album."
+
+#. i18n: file: devices/filenameschemedialog.ui:181
+#. i18n: ectx: property (toolTip), widget (QPushButton, genre)
+#: po/rc.cpp:263 rc.cpp:263
+msgid "The genre of the album."
+msgstr "Genre de l'album."
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:17
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
+#: po/rc.cpp:269 rc.cpp:269
+msgid "These settings are only editable when the device is not connected."
+msgstr ""
+"Ces paramètres ne sont modifiables que lorsque le périphérique est "
+"déconnecté."
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
+#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
+#. i18n: file: dynamic/dynamicrule.ui:26
+#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
+#. i18n: file: network/proxysettings.ui:39
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
+#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
+#. i18n: file: dynamic/dynamicrule.ui:26
+#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
+#. i18n: file: network/proxysettings.ui:39
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
+msgid "Type:"
+msgstr "Type:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#. i18n: file: gui/interfacesettings.ui:71
+#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#. i18n: file: gui/interfacesettings.ui:71
+#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
+msgid "Options"
+msgstr "Options"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
+#. i18n: file: gui/initialsettingswizard.ui:400
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
+#. i18n: file: gui/serversettings.ui:89
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
+#. i18n: file: network/proxysettings.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
+#. i18n: file: gui/initialsettingswizard.ui:400
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
+#. i18n: file: gui/serversettings.ui:89
+#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
+#. i18n: file: network/proxysettings.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
+msgid "Port:"
+msgstr "Port:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
+#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
+#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
+msgid "User:"
+msgstr "Identifiant:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
+#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
+msgid "Domain:"
+msgstr "Domaine:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
+#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
+#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
+#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
+#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
+#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
+msgid "Share:"
+msgstr "Partager:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
+msgid ""
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
+msgstr ""
+"Si un mot de passe est saisi ici, il sera stocké <b>en clair</b> dans le "
+"fichier de configuration de Cantata. Si vous souhaitez re-saisir votre mot "
+"de passe à chaque fois, entrez '-'."
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
+#: po/rc.cpp:302 rc.cpp:302
+msgid "Service name:"
+msgstr "Nom du service:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
+#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
+#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
+msgid "Folder:"
+msgstr "Dossier:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
+#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
+#: po/rc.cpp:332 rc.cpp:332
+msgid "Extra Options:"
+msgstr "Paramètres supplémentaires:"
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
+#: po/rc.cpp:335 rc.cpp:335
+msgid ""
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
+msgstr ""
+"Aucune application ssh-sakpass est disponible ! Cette dépendance est requise "
+"pour la saisie du mot de passe."
+
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
+#: po/rc.cpp:341 rc.cpp:341
+msgid ""
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
+msgstr ""
+
+#. i18n: file: dynamic/dynamicpage.ui:26
+#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
+#: po/rc.cpp:344 rc.cpp:344
+msgid "Remote dynamizer is not running."
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:30
+#. i18n: ectx: property (placeholderText), widget (LineEdit, nameText)
+#: po/rc.cpp:347 rc.cpp:347
+msgid "Name of Dynamic Rules"
+msgstr "Nom des règles dynamiques"
+
+#. i18n: file: dynamic/dynamicrules.ui:60
+#. i18n: ectx: property (text), widget (QPushButton, editBtn)
+#: po/rc.cpp:353 streams/streamspage.cpp:61 rc.cpp:353
+msgid "Edit"
+msgstr "Éditer"
+
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
+#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr "Pistes avec des notes entre:"
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr " et "
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
+msgid "About Rules"
+msgstr "À propos des règles dynamiques"
+
+#. i18n: file: dynamic/dynamicrule.ui:37
+#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
+#: po/rc.cpp:371 rc.cpp:371
+msgid "Include songs that match the following:"
+msgstr "Inclure les pistes qui correspondent à:"
+
+#. i18n: file: dynamic/dynamicrule.ui:42
+#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
+#: po/rc.cpp:374 rc.cpp:374
+msgid "Exclude songs that match the following:"
+msgstr "Exclure les pistes qui correspondent à:"
+
+#. i18n: file: dynamic/dynamicrule.ui:63
+#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
+#: po/rc.cpp:380 rc.cpp:380
+msgid "Artists similar to:"
+msgstr "Artistes similaires à:"
+
+#. i18n: file: dynamic/dynamicrule.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:383 rc.cpp:383
+msgid "Album Artist:"
+msgstr "Artiste Album:"
+
+#. i18n: file: dynamic/dynamicrule.ui:141
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
+#: po/rc.cpp:398 rc.cpp:398
+msgid "From Year:"
+msgstr "De l'année:"
+
+#. i18n: file: dynamic/dynamicrule.ui:157
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
+#. i18n: file: dynamic/dynamicrule.ui:180
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
+#. i18n: file: dynamic/dynamicrule.ui:157
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
+#. i18n: file: dynamic/dynamicrule.ui:180
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
+msgid "Any"
+msgstr "Tous"
+
+#. i18n: file: dynamic/dynamicrule.ui:164
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
+#: po/rc.cpp:404 rc.cpp:404
+msgid "To Year:"
+msgstr "À l'année:"
+
+#. i18n: file: dynamic/dynamicrule.ui:200
+#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
+#: po/rc.cpp:413 rc.cpp:413
+msgid "Exact match"
+msgstr "Correspondance exacte"
+
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
+msgstr ""
+"Veuillez ne saisir de valeurs que pour les étiquettes que vous souhaitez "
+"utiliser dans la recherche."
+
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
+msgid ""
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
+msgstr ""
+
+#. i18n: file: gui/coverdialog.ui:30
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
+msgid "Add a local file"
+msgstr "Ajouter un fichier local"
+
+#. i18n: file: gui/filesettings.ui:29
+#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
+#. i18n: file: gui/initialsettingswizard.ui:694
+#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
+#. i18n: file: gui/filesettings.ui:29
+#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
+#. i18n: file: gui/initialsettingswizard.ui:694
+#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+msgid "Save downloaded covers, and artist images, in music folder"
+msgstr ""
+"Enregistrer les pochettes téléchargées et les images des artistes dans le "
+"dossier musical"
+
+#. i18n: file: gui/filesettings.ui:36
+#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
+#. i18n: file: gui/initialsettingswizard.ui:701
+#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
+#. i18n: file: gui/filesettings.ui:36
+#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
+#. i18n: file: gui/initialsettingswizard.ui:701
+#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
+msgid "Save downloaded lyrics in music folder"
+msgstr "Enregistrer les paroles téléchargées dans le dossier musical"
+
+#. i18n: file: gui/filesettings.ui:43
+#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
+#. i18n: file: gui/initialsettingswizard.ui:708
+#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
+#. i18n: file: gui/filesettings.ui:43
+#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
+#. i18n: file: gui/initialsettingswizard.ui:708
+#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
+msgid "Save downloaded backdrops in music folder"
+msgstr "Enregistrer les images de fond dans le dossier musical"
+
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
+msgid ""
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
+msgstr ""
+
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
+msgstr ""
+"Cantata ne peut enregistrer les images des artistes et les images de fond "
+"que dans des dossiers situés au maximum à deux niveaux de profondeur dans "
+"l'arbre de fichiers (ex: 'Artiste/Album/Pistes')"
+
+#. i18n: file: gui/initialsettingswizard.ui:14
+#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
+#: po/rc.cpp:446 rc.cpp:446
+msgid "Cantata First Run"
+msgstr "Premier lancement de Cantanta"
+
+#. i18n: file: gui/initialsettingswizard.ui:46
+#. i18n: ectx: property (text), widget (QLabel, label)
+#: po/rc.cpp:449 rc.cpp:449
+msgid "Welcome to Cantata"
+msgstr "Bienvenue sur Cantata"
+
+#. i18n: file: gui/initialsettingswizard.ui:69
+#. i18n: ectx: property (text), widget (QLabel, label_2)
+#: po/rc.cpp:452 rc.cpp:452
+msgid ""
+"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:108
+#. i18n: ectx: property (text), widget (QLabel, label_7)
+#: po/rc.cpp:455 rc.cpp:455
+msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
+msgstr "<html><head/><body><p>Bienvenue sur Cantata</p></body></html>"
+
+#. i18n: file: gui/initialsettingswizard.ui:134
+#. i18n: ectx: property (text), widget (QLabel, label_8)
+#: po/rc.cpp:458 rc.cpp:458
+msgid ""
+"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:175
+#. i18n: ectx: property (text), widget (QRadioButton, advanced)
+#: po/rc.cpp:461 rc.cpp:461
+msgid "Standard multi-user/server setup"
+msgstr "Profil multi-utilisateurs/serveurs standard."
+
+#. i18n: file: gui/initialsettingswizard.ui:188
+#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
+#: po/rc.cpp:464 rc.cpp:464
+msgid ""
+"<i>Select this option if your music collection is shared between users, your "
+"MPD instance is running on another machine, or you already have a personal "
+"MPD setup. If you select this option then Cantata itself cannot control the "
+"starting and stopping of the MPD server. You will therfore need to ensure "
+"that MPD is already configured and running.</i>"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:220
+#. i18n: ectx: property (text), widget (QRadioButton, basic)
+#: po/rc.cpp:467 rc.cpp:467
+msgid "Basic single user setup"
+msgstr "Profil standard pour un simple utilisateur"
+
+#. i18n: file: gui/initialsettingswizard.ui:233
+#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
+#: po/rc.cpp:470 rc.cpp:470
+msgid ""
+"<i>Select this option if your music collection is not shared with others, "
+"and you wish Cantata to configure and control the MPD instance.</i>"
+msgstr ""
+"<i>Choisissez cette option si votre collection n'est pas partagée avec "
+"d'autres personnes et que vous souhaitez que Cantata configure et contrôle "
+"l'instance MPD</i>"
+
+#. i18n: file: gui/initialsettingswizard.ui:268
+#. i18n: ectx: property (text), widget (QLabel, label_11)
+#: po/rc.cpp:473 rc.cpp:473
+msgid ""
+"<html><head/><body><p>For more information on MPD itself, please refer to "
+"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
+"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
+"p><p>This 'wizard' will guide you through the basic settings required for "
+"Cantata to function correctly.</p></body></html>"
+msgstr ""
+"<html><head/><body><p>Pour plus d'informations sur MPD veuillez vous référer "
+"au site web de MPD <a href=\"http://www.musicpd.org\"><span style=\" text-"
+"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
+"p><p>Cet assistant vous aidera à configurer les paramètres de bases pour le "
+"bon fonctionnement de Cantata.</p></body></html>"
+
+#. i18n: file: gui/initialsettingswizard.ui:330
+#. i18n: ectx: property (text), widget (QLabel, label_3)
+#: po/rc.cpp:476 rc.cpp:476
+msgid "Connection details"
+msgstr "Détails de connexion"
+
+#. i18n: file: gui/initialsettingswizard.ui:353
+#. i18n: ectx: property (text), widget (QLabel, label_4)
+#: po/rc.cpp:479 rc.cpp:479
+msgid ""
+"The settings below are the basic settings required by Cantata. Please enter "
+"the relevant details, and use the 'Connect' button to test the connection."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:387
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
+#. i18n: file: gui/serversettings.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
+#. i18n: file: gui/initialsettingswizard.ui:387
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
+#. i18n: file: gui/serversettings.ui:76
+#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
+msgid "Host (or local socket):"
+msgstr "Hôte (ou socket local):"
+
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
+msgid ""
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
+msgid ""
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:530
+#. i18n: ectx: property (text), widget (QLabel, label_13)
+#: po/rc.cpp:503 rc.cpp:503
+msgid "Music folder"
+msgstr "Dossier musical"
+
+#. i18n: file: gui/initialsettingswizard.ui:553
+#. i18n: ectx: property (text), widget (QLabel, label_12)
+#: po/rc.cpp:506 rc.cpp:506
+msgid "Please choose the folder containing your music collection."
+msgstr "Veuillez spécifier le dossier contenant votre collection musicale."
+
+#. i18n: file: gui/initialsettingswizard.ui:639
+#. i18n: ectx: property (text), widget (QLabel, label_6f)
+#: po/rc.cpp:512 rc.cpp:512
+msgid "Covers, Lyrics, and Streams"
+msgstr "Pochettes, paroles et flux"
+
+#. i18n: file: gui/initialsettingswizard.ui:662
+#. i18n: ectx: property (text), widget (QLabel, label_5f)
+#: po/rc.cpp:515 rc.cpp:515
+msgid ""
+"<p>Cantata will download missing covers, and lyrics, from the internet.</"
+"p><p>For each of these, please confirm whether you wish Cantata to store the "
+"relevant files within the music folder, or within your personal cache/config "
+"folders.</p>"
+msgstr ""
+"<p>Cantata va télécharger les pochettes et paroles manquantes depuis "
+"Internet.</p><p>Pour chacune d'entre elles veuillez confirmer si vous "
+"souhaitez que Cantata les enregistre dans le dossier musique ou dans votre "
+"dossier de cache/de configuration.</p>"
+
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
+msgid ""
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:759
+#. i18n: ectx: property (text), widget (QLabel, label_6)
+#: po/rc.cpp:536 rc.cpp:536
+msgid "Finished!"
+msgstr "Terminé !"
+
+#. i18n: file: gui/initialsettingswizard.ui:782
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#: po/rc.cpp:539 rc.cpp:539
+msgid ""
+"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
+"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
+"etc."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
+#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
+#: po/rc.cpp:545 rc.cpp:545
+msgid ""
+"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
+"will function better (saving of album covers, lyrics, etc. with the correct "
+"permissions) if you (or your administrator) add yourself to this group. If "
+"you do add yourself you will need to logout and back in for this to take "
+"effect."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:36
+#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
+#: po/rc.cpp:548 rc.cpp:548
+msgid "Sidebar"
+msgstr "Barre latérale"
+
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
+msgid "Views"
+msgstr "Vues"
+
+#. i18n: file: gui/interfacesettings.ui:48
+#. i18n: ectx: property (text), widget (QLabel, label_2)
+#: po/rc.cpp:554 rc.cpp:554
+msgid "Use the checkboxes below to configure the list of active views."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
+msgid ""
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Style:"
+
+#. i18n: file: gui/interfacesettings.ui:95
+#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
+#: po/rc.cpp:566 rc.cpp:566
+msgid "Position:"
+msgstr "Position:"
+
+#. i18n: file: gui/interfacesettings.ui:108
+#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
+#: po/rc.cpp:569 rc.cpp:569
+msgid "Only show icons, no text"
+msgstr "N'afficher que les icônes, sans le texte"
+
+#. i18n: file: gui/interfacesettings.ui:115
+#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
+#: po/rc.cpp:572 rc.cpp:572
+msgid "Use monochrome icons"
+msgstr "Utiliser des icônes monochromes"
+
+#. i18n: file: gui/interfacesettings.ui:122
+#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
+#: po/rc.cpp:575 rc.cpp:575
+msgid "Auto-hide"
+msgstr "Cacher automatiquement"
+
+#. i18n: file: gui/interfacesettings.ui:166
+#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
+#: po/rc.cpp:587 rc.cpp:587
+msgid "Sort albums by year"
+msgstr "Trier les albums par années"
+
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:208
+#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr "Trier:"
+
+#. i18n: file: gui/interfacesettings.ui:249
+#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
+#. i18n: file: gui/interfacesettings.ui:372
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
+#. i18n: file: gui/interfacesettings.ui:249
+#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
+#. i18n: file: gui/interfacesettings.ui:372
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
+msgid "Initially collapse albums"
+msgstr "Regrouper les albums initialement"
+
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
+msgid "Other Views"
+msgstr "Autre vues:"
+
+#. i18n: file: gui/interfacesettings.ui:271
+#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr "Dossiers:"
+
+#. i18n: file: gui/interfacesettings.ui:284
+#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr "Flux:"
+
+#. i18n: file: gui/interfacesettings.ui:297
+#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr "En ligne:"
+
+#. i18n: file: gui/interfacesettings.ui:310
+#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Périphériques:"
+
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Recherche:"
+
+#. i18n: file: gui/interfacesettings.ui:379
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
+#: po/rc.cpp:638 rc.cpp:638
+msgid "Automatically expand current album"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:386
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
+#: po/rc.cpp:641 rc.cpp:641
+msgid "Scroll to current track"
+msgstr "Défiler jusqu'à la piste courante"
+
+#. i18n: file: gui/interfacesettings.ui:393
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
+#: po/rc.cpp:644 rc.cpp:644
+msgid "Prompt before clearing"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
+#: po/rc.cpp:656 rc.cpp:656
+msgid "Current album cover"
+msgstr "Pochette courante"
+
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr "Outils"
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr "Afficher le bouton stop"
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr "Afficher la pochette de la piste courante"
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr "Afficher la note de la piste"
+
+#. i18n: file: gui/interfacesettings.ui:620
+#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
+#: po/rc.cpp:687 rc.cpp:687
+msgid "External"
+msgstr "Externe"
+
+#. i18n: file: gui/interfacesettings.ui:626
+#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
+#: po/rc.cpp:690 rc.cpp:690
+msgid "Show popup messages when changing tracks"
+msgstr "Afficher une notification lors du changement de piste"
+
+#. i18n: file: gui/interfacesettings.ui:636
+#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
+#: po/rc.cpp:693 rc.cpp:693
+msgid "Show icon in notification area"
+msgstr "Afficher un icône dans la zone de notifications"
+
+#. i18n: file: gui/interfacesettings.ui:646
+#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
+#: po/rc.cpp:696 rc.cpp:696
+msgid "Minimize to notification area when closed"
+msgstr "Minimiser dans la zone de notification si la fenêtre est fermée"
+
+#. i18n: file: gui/interfacesettings.ui:653
+#. i18n: ectx: property (title), widget (QGroupBox, startupState)
+#: po/rc.cpp:699 rc.cpp:699
+msgid "On Start-up"
+msgstr "Au lancement"
+
+#. i18n: file: gui/interfacesettings.ui:659
+#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
+#: po/rc.cpp:702 rc.cpp:702
+msgid "Show main window"
+msgstr "Afficher la fenêtre"
+
+#. i18n: file: gui/interfacesettings.ui:666
+#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
+#: po/rc.cpp:705 rc.cpp:705
+msgid "Hide main window"
+msgstr "Cacher la fenêtre principale"
+
+#. i18n: file: gui/interfacesettings.ui:673
+#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
+#: po/rc.cpp:708 rc.cpp:708
+msgid "Restore previous state"
+msgstr "Récupérer l'état précédent"
+
+#. i18n: file: gui/interfacesettings.ui:697
+#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
+msgid "General"
+msgstr "Général"
+
+#. i18n: file: gui/interfacesettings.ui:708
+#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
+#: po/rc.cpp:714 rc.cpp:714
+msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
+msgstr ""
+"Déplacer les albums avec une piste unique dans 'Artistes divers/Pistes "
+"unique'"
+
+#. i18n: file: gui/interfacesettings.ui:711
+#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
+#: po/rc.cpp:717 rc.cpp:717
+msgid "Group single track albums"
+msgstr "Regroupement des pistes"
+
+#. i18n: file: gui/interfacesettings.ui:718
+#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
+#: po/rc.cpp:720 rc.cpp:720
+msgid ""
+"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:721
+#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
+#: po/rc.cpp:723 rc.cpp:723
+msgid "Group albums by composer"
+msgstr "Regrouper les albums par compositeur"
+
+#. i18n: file: gui/interfacesettings.ui:728
+#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
+#: po/rc.cpp:726 rc.cpp:726
+msgid ""
+"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
+"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
+"If you have an album with 10 songs, but only 5 have the genre set to "
+"'Metal', then only these 5 would be added if the view's Genre filter was set "
+"to 'Metal'."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:731
+#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
+#: po/rc.cpp:729 rc.cpp:729
+msgid "Only act on songs that pass filtering"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:738
+#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
+#: po/rc.cpp:732 rc.cpp:732
+msgid "Fetch missing covers from Last.fm"
+msgstr "Récupérer les pochettes manquantes sur Last.fm"
+
+#. i18n: file: gui/interfacesettings.ui:745
+#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
+#: po/rc.cpp:735 rc.cpp:735
+msgid "Show delete action in context menus"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:752
+#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
+#: po/rc.cpp:738 rc.cpp:738
+msgid "Enforce single-click activation of items"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:760
+#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
+#: po/rc.cpp:742 rc.cpp:742
+#, no-c-format
+msgid ""
+"<p>This will change Cantata's interface as detailed:\n"
+"<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views will "
+"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
+"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
+"g. 'Add To Play Queue') will always be visible (not just when item is under "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
+"text field</li></ul></p>"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:763
+#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
+#: po/rc.cpp:746 rc.cpp:746
+msgid "Make interface more touch friendly"
+msgstr "Adapter l'interface aux appareils tactiles"
+
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr "Informations sur la piste"
+
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr "Support des écrans haute résolution"
+
+#. i18n: file: gui/interfacesettings.ui:784
+#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
+#: po/rc.cpp:755 rc.cpp:755
+msgid "Language:"
+msgstr "Langue :"
+
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
+msgid ""
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
+msgid ""
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
+msgstr ""
+"L'activation de l'interface pour les appareils tactiles requiert un "
+"redémarrage de Cantata."
+
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
+msgid ""
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/mainwindow.ui:181
+#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
+#: po/rc.cpp:770 rc.cpp:770
+msgid "[Dynamic]"
+msgstr "[Dynamique]"
+
+#. i18n: file: gui/mainwindow.ui:204
+#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
+#: po/rc.cpp:773 rc.cpp:773
+msgid "Exit Full Screen"
+msgstr "Sortir du mode plein écran"
+
+#. i18n: file: gui/playbacksettings.ui:38
+#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
+#: po/rc.cpp:779 rc.cpp:779
+msgid "Fadeout on stop:"
+msgstr "Fondu à l'arrêt de la lecture:"
+
+#. i18n: file: gui/playbacksettings.ui:58
+#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
+#: po/rc.cpp:788 rc.cpp:788
+msgid "Stop playback on exit"
+msgstr "Arrêter la lecture à la fermeture"
+
+#. i18n: file: gui/playbacksettings.ui:65
+#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
+#: po/rc.cpp:791 rc.cpp:791
+msgid "Inhibit suspend whilst playing"
+msgstr ""
+
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
+msgid ""
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
+msgstr ""
+
+#. i18n: file: gui/playbacksettings.ui:82
+#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
+#: po/rc.cpp:797 rc.cpp:797
+msgid "Output"
+msgstr "Sortie"
+
+#. i18n: file: gui/playbacksettings.ui:106
+#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
+#: po/rc.cpp:803 rc.cpp:803
+msgid "Crossfade between tracks:"
+msgstr ""
+
+#. i18n: file: gui/playbacksettings.ui:116
+#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
+#: po/rc.cpp:806 rc.cpp:806
+msgid " s"
+msgstr ""
+
+#. i18n: file: gui/playbacksettings.ui:129
+#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
+#: po/rc.cpp:812 rc.cpp:812
+msgid "Replay gain:"
+msgstr "ReplayGain:"
+
+#. i18n: file: gui/playbacksettings.ui:172
+#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
+#: po/rc.cpp:815 rc.cpp:815
+msgid "About replay gain"
+msgstr "À propos du ReplayGain"
+
+#. i18n: file: gui/playbacksettings.ui:181
+#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
+#: po/rc.cpp:818 rc.cpp:818
+msgid "Use the checkboxes below to control the active outputs."
+msgstr "Utilisez les cases ci-dessous pour contrôler les sorties actives."
+
+#. i18n: file: gui/serversettings.ui:35
+#. i18n: ectx: property (text), widget (QLabel, label)
+#: po/rc.cpp:821 rc.cpp:821
+msgid "Collection:"
+msgstr "Collection:"
+
+#. i18n: file: gui/serversettings.ui:142
+#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
+#. i18n: file: gui/serversettings.ui:246
+#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
+#. i18n: file: gui/serversettings.ui:142
+#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
+#. i18n: file: gui/serversettings.ui:246
+#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
+msgid "Cover filename:"
+msgstr "Nom de la pochette:"
+
+#. i18n: file: gui/serversettings.ui:152
+#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
+#: po/rc.cpp:843 rc.cpp:843
+#, no-c-format
+msgid ""
+"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
+"blank 'cover' will be used.<br/><br/><i>%artist% will be replaced with album "
+"artist of the current song, and %album% will be replaced with the album name."
+"</i></p>"
+msgstr ""
+
+#. i18n: file: gui/serversettings.ui:159
+#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
+#: po/rc.cpp:846 rc.cpp:846
+msgid "HTTP stream URL:"
+msgstr "URL du flux HTTP:"
+
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
+msgid ""
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
+msgstr ""
+
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
+msgid ""
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
+msgstr ""
+
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
+msgid ""
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
+msgstr ""
+
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
+msgid ""
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:25
+#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
+#: po/rc.cpp:870 rc.cpp:870
+msgid "Network interface:"
+msgstr "Interface réseau;"
+
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+"MPD lit normalement les pistes stockées dans ses propres dossiers. Cantata "
+"contient un petit serveur HTTP qui peut être utilisé pour envoyer d'autres "
+"fichiers à MPD. En revanche cela ne fonctionne que si Cantata est ouvert."
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
+
+#. i18n: file: network/proxysettings.ui:26
+#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
+#: po/rc.cpp:879 rc.cpp:879
+msgid "Mode:"
+msgstr "Mode:"
+
+#. i18n: file: network/proxysettings.ui:50
+#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
+#: po/rc.cpp:885 rc.cpp:885
+msgid "HTTP Proxy"
+msgstr "Proxy HTTP:"
+
+#. i18n: file: network/proxysettings.ui:55
+#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
+#: po/rc.cpp:888 rc.cpp:888
+msgid "SOCKS Proxy"
+msgstr "Proxy SOCKS:"
+
+#. i18n: file: online/onlinesettings.ui:12
+#. i18n: ectx: property (text), widget (QLabel, label)
+#: po/rc.cpp:903 rc.cpp:903
+msgid "Use the checkboxes below to configure the list of active services."
+msgstr ""
+"Utilisez les cases ci-dessous pour configurer la liste des services actifs."
+
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
+#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
+#: po/rc.cpp:909 rc.cpp:909
+msgid "Scrobble using:"
+msgstr "Scrobbler avec:"
+
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
+#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
+#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
+msgid "Status:"
+msgstr "Status:"
+
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
+#. i18n: ectx: property (text), widget (QPushButton, loginButton)
+#. i18n: file: streams/digitallyimportedsettings.ui:120
+#. i18n: ectx: property (text), widget (QPushButton, loginButton)
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
+#. i18n: ectx: property (text), widget (QPushButton, loginButton)
+#. i18n: file: streams/digitallyimportedsettings.ui:120
+#. i18n: ectx: property (text), widget (QPushButton, loginButton)
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
+msgid "Login"
+msgstr "Authentification"
+
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
+#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
+#: po/rc.cpp:924 rc.cpp:924
+msgid "Scrobble tracks"
+msgstr "Scrobbler les pistes:"
+
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
+#. i18n: ectx: property (text), widget (QCheckBox, showLove)
+#: po/rc.cpp:927 rc.cpp:927
+msgid "Show 'Love' button"
+msgstr "Afficher le bouton 'Aimer'\t"
+
+#. i18n: file: streams/digitallyimportedsettings.ui:29
+#. i18n: ectx: property (text), widget (QLabel, label)
+#: po/rc.cpp:930 rc.cpp:930
+msgid ""
+"You can listen for free without an account, but Premium members can listen "
+"to higher quality streams without advertisements. Visit <a href=\"http://www."
+"di.fm/premium/\">http://www.di.fm/premium/</a> to upgrade to a premium "
+"account."
+msgstr ""
+
+#. i18n: file: streams/digitallyimportedsettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+#: po/rc.cpp:933 rc.cpp:933
+msgid "Premium Account"
+msgstr "Compte Premium"
+
+#. i18n: file: streams/digitallyimportedsettings.ui:81
+#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
+#: po/rc.cpp:942 rc.cpp:942
+msgid "Stream type:"
+msgstr "Type de flux:"
+
+#. i18n: file: streams/digitallyimportedsettings.ui:127
+#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
+#: po/rc.cpp:951 rc.cpp:951
+msgid "Session expiry:"
+msgstr "Session expirée:"
+
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
+msgid ""
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
+msgstr ""
+
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
+msgid ""
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
+msgstr ""
+
+#. i18n: file: streams/streamssettings.ui:12
+#. i18n: ectx: property (text), widget (QLabel, label)
+#: po/rc.cpp:960 rc.cpp:960
+msgid "Use the checkboxes below to configure the list of active providers."
+msgstr ""
+
+#. i18n: file: streams/streamssettings.ui:47
+#. i18n: ectx: property (text), widget (QPushButton, configureButton)
+#: po/rc.cpp:963 rc.cpp:963
+msgid "Configure Provider"
+msgstr "Configurer le service:"
+
+#. i18n: file: streams/streamssettings.ui:60
+#. i18n: ectx: property (text), widget (QPushButton, installButton)
+#: po/rc.cpp:966 rc.cpp:966
+msgid "Install"
+msgstr "Installer"
+
+#. i18n: file: streams/streamssettings.ui:80
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
+msgstr ""
+
+#. i18n: file: support/shortcutssettingswidget.ui:65
+#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
+#: po/rc.cpp:978 rc.cpp:978
+msgid "Shortcut for Selected Action"
+msgstr "Raccourcis pour l'action choisie"
+
+#. i18n: file: support/shortcutssettingswidget.ui:71
+#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
+#: po/rc.cpp:981 rc.cpp:981
+msgid "Default:"
+msgstr "Par défaut:"
+
+#. i18n: file: support/shortcutssettingswidget.ui:85
+#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
+#: po/rc.cpp:987 rc.cpp:987
+msgid "Custom:"
+msgstr "Personnalisé:"
+
+#. i18n: file: tags/tageditor.ui:80
+#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
+#: po/rc.cpp:999 rc.cpp:999
+msgid "Album artist:"
+msgstr "Artiste de l'album:"
+
+#. i18n: file: tags/tageditor.ui:119
+#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
+#: po/rc.cpp:1008 rc.cpp:1008
+msgid "Track number:"
+msgstr "Piste numéro:"
+
+#. i18n: file: tags/tageditor.ui:132
+#. i18n: ectx: property (text), widget (StateLabel, discLabel)
+#: po/rc.cpp:1011 rc.cpp:1011
+msgid "Disc number:"
+msgstr "Disque numéro:"
+
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr "Note:"
+
+#. i18n: file: tags/tageditor.ui:186
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr "<i>Divers</i>"
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
+msgid ""
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
+msgid ""
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
+msgstr ""
+
+#. i18n: file: tags/trackorganiser.ui:115
+#. i18n: ectx: property (text), widget (QTreeWidget, files)
+#: po/rc.cpp:1056 rc.cpp:1056
+msgid "Original Name"
+msgstr "Nom original"
+
+#. i18n: file: tags/trackorganiser.ui:120
+#. i18n: ectx: property (text), widget (QTreeWidget, files)
+#: po/rc.cpp:1059 rc.cpp:1059
+msgid "New Name"
+msgstr "Nouveau nom"
+
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr "Les notes seront perdues si les fichiers sont renommés."
+
+#: po/rc.cpp:1066 rc.cpp:1066
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Jaussoin Timothée"
+
+#: po/rc.cpp:1067 rc.cpp:1067
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "edhelas at movim.eu"
+
+#: replaygain/rgdialog.cpp:95
+msgid "Show All Tracks"
+msgstr "Afficher toutes les pistes"
+
+#: replaygain/rgdialog.cpp:96
+msgid "Show Untagged Tracks"
+msgstr "Afficher les pistes non renseignées"
+
+#: replaygain/rgdialog.cpp:103 tags/trackorganiser.cpp:82
+msgid "Remove From List"
+msgstr "Supprimer de la liste"
+
+#: replaygain/rgdialog.cpp:110
+msgid "Album Gain"
+msgstr "Gain de l'album"
+
+#: replaygain/rgdialog.cpp:111
+msgid "Track Gain"
+msgstr "Gain de la piste"
+
+#: replaygain/rgdialog.cpp:112
+msgid "Album Peak"
+msgstr "Pic de l'album"
+
+#: replaygain/rgdialog.cpp:113
+msgid "Track Peak"
+msgstr "Pic de la piste"
+
+#: replaygain/rgdialog.cpp:133 replaygain/rgdialog.cpp:262
+msgid "Scan"
+msgstr "Analyser"
+
+#: replaygain/rgdialog.cpp:212
+msgid "Update ReplayGain tags in tracks?"
+msgstr "Mettre à jour les étiquettes ReplayGain dans les pistes ?"
+
+#: replaygain/rgdialog.cpp:212 replaygain/rgdialog.cpp:213
+msgid "Update Tags"
+msgstr "Mettre à jour les étiquettes"
+
+#: replaygain/rgdialog.cpp:226
+msgid "Abort scanning of tracks?"
+msgstr "Arrêter l'analyse des pistes ?"
+
+#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
+#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
+msgid "Abort"
+msgstr "Annuler"
+
+#: replaygain/rgdialog.cpp:235
+msgid "Abort reading of existing tags?"
+msgstr "Annuler la lecture des étiquettes existantes ?"
+
+#: replaygain/rgdialog.cpp:261
+msgid ""
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
+msgstr ""
+"Analyser <b>toutes</b> les pistes ?<br/><br/><i>Toutes les pistes ont déjà "
+"une étiquette ReplayGain.</i>"
+
+#: replaygain/rgdialog.cpp:263
+msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
+msgstr ""
+
+#: replaygain/rgdialog.cpp:264
+msgid "Untagged Tracks"
+msgstr "Pistes non étiquetées"
+
+#: replaygain/rgdialog.cpp:264
+msgid "All Tracks"
+msgstr "Toutes les pistes"
+
+#: replaygain/rgdialog.cpp:274
+msgid "Scanning tracks..."
+msgstr "Analyse des pistes…"
+
+#: replaygain/rgdialog.cpp:341
+msgid "Reading existing tags..."
+msgstr "Lecture des étiquettes existantes…"
+
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
+msgctxt "filename (Corrupt tags?)"
+msgid "%1 (Corrupt tags?)"
+msgstr "%1 (Étiquettes corrompues ?)"
+
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
+msgid "Failed to update the tags of the following tracks:"
+msgstr "La mise à jour des étiquettes des pistes suivantes a échoué:"
+
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
+msgid "Device is not connected."
+msgstr "Le périphérique n'est pas connecté."
+
+#: replaygain/rgdialog.cpp:486 replaygain/rgdialog.cpp:493
+#: replaygain/rgdialog.cpp:576 replaygain/rgdialog.cpp:578
+msgid "%1 dB"
+msgstr "%1 dB"
+
+#: replaygain/rgdialog.cpp:489 replaygain/rgdialog.cpp:490
+#: replaygain/rgdialog.cpp:496 replaygain/rgdialog.cpp:497
+#: replaygain/rgdialog.cpp:552 replaygain/rgdialog.cpp:553
+#: replaygain/rgdialog.cpp:554 replaygain/rgdialog.cpp:555
+msgid "Failed"
+msgstr "Échoué"
+
+#: replaygain/rgdialog.cpp:506 replaygain/rgdialog.cpp:516
+msgid "Original: %1 dB"
+msgstr "Originale: %1 dB"
+
+#: replaygain/rgdialog.cpp:511 replaygain/rgdialog.cpp:521
+msgid "Original: %1"
+msgstr "Original: %1"
+
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
+msgid "Remove the selected tracks from the list?"
+msgstr "Supprimer la piste sélectionnée de la liste ?"
+
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
+msgid "Remove Tracks"
+msgstr "Supprimer les pistes"
+
+#: scrobbling/scrobbler.cpp:92
+msgid "Invalid service"
+msgstr "Service incorrect"
+
+#: scrobbling/scrobbler.cpp:93
+msgid "Invalid method"
+msgstr "Méthode incorrecte"
+
+#: scrobbling/scrobbler.cpp:94
+msgid "Authentication failed"
+msgstr "L'authentification a échouée"
+
+#: scrobbling/scrobbler.cpp:95
+msgid "Invalid format"
+msgstr "Format incorrect"
+
+#: scrobbling/scrobbler.cpp:96
+msgid "Invalid parameters"
+msgstr "Paramètres incorrects"
+
+#: scrobbling/scrobbler.cpp:97
+msgid "Invalid resource specified"
+msgstr "La ressource spécifiée est incorrecte"
+
+#: scrobbling/scrobbler.cpp:98
+msgid "Operation failed"
+msgstr "L'opération a échoué"
+
+#: scrobbling/scrobbler.cpp:99
+msgid "Invalid session key"
+msgstr "La clef de session est incorrecte"
+
+#: scrobbling/scrobbler.cpp:100
+msgid "Invalid API key"
+msgstr "La clef de l'API est incorrecte"
+
+#: scrobbling/scrobbler.cpp:101
+msgid "Service offline"
+msgstr "Services hors ligne"
+
+#: scrobbling/scrobbler.cpp:102
+msgid "Last.fm is currently busy, please try again in a few minutes"
+msgstr ""
+"Last.fm est actuellement indisponible, veuillez réessayer dans quelques "
+"minutes"
+
+#: scrobbling/scrobbler.cpp:103
+msgid "Rate-limit exceeded"
+msgstr ""
+
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
+msgid "%1 error: %2"
+msgstr "%1 erreur: %2"
+
+#: scrobbling/scrobblinglove.cpp:59
+msgid "%1: Loved Current Track"
+msgstr "%1: Piste courante aimée"
+
+#: scrobbling/scrobblinglove.cpp:60
+msgid "%1: Love Current Track"
+msgstr "%1: Aimer la piste courante"
+
+#: scrobbling/scrobblingsettings.cpp:59
+msgctxt "scrobbler name (via MPD)"
+msgid "%1 (via MPD)"
+msgstr "%1 (via MPD)"
+
+#: scrobbling/scrobblingsettings.cpp:78
+msgid ""
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
+msgstr ""
+
+#: scrobbling/scrobblingsettings.cpp:115
+#: streams/digitallyimportedsettings.cpp:113
+msgid "Authenticating..."
+msgstr "Authentification…"
+
+#: scrobbling/scrobblingsettings.cpp:132
+#: streams/digitallyimportedsettings.cpp:123
+msgid "Authenticated"
+msgstr "Authentifié…"
+
+#: scrobbling/scrobblingsettings.cpp:132
+#: streams/digitallyimportedsettings.cpp:110
+#: streams/digitallyimportedsettings.cpp:123
+msgid "Not Authenticated"
+msgstr "Non authentifié"
+
+#: scrobbling/scrobblingstatus.cpp:44
+msgid "%1: Scrobble Tracks"
+msgstr "%1: Scrobbler les pistes"
+
+#: streams/digitallyimportedsettings.cpp:36
+msgid "Digitally Imported Settings"
+msgstr ""
+
+#: streams/digitallyimportedsettings.cpp:41
+msgid "MP3 256k"
+msgstr "MP3 256k"
+
+#: streams/digitallyimportedsettings.cpp:42
+msgid "AAC 64k"
+msgstr "AAC 64k"
+
+#: streams/digitallyimportedsettings.cpp:43
+msgid "AAC 128k"
+msgstr "AAC 128k"
+
+#: streams/digitallyimportedsettings.cpp:144
+msgid "Logout"
+msgstr "Déconnexion"
+
+#: streams/streamdialog.cpp:56
+msgid "URL:"
+msgstr "URL:"
+
+#: streams/streamdialog.cpp:62
+msgid "Just add to play queue, do not save"
+msgstr "Ajouter à la liste de lecture sans sauvegarder"
+
+#: streams/streamdialog.cpp:63
+msgid "Add to play queue, and save to favorites"
+msgstr "Ajouter à la liste de lecteur et ajouter aux favoris"
+
+#: streams/streamdialog.cpp:74
+msgid "Add Stream"
+msgstr "Ajouter un flux"
+
+#: streams/streamdialog.cpp:86
+msgid "Edit Stream"
+msgstr "Éditer le flux"
+
+#: streams/streamdialog.cpp:121
+msgid "<i><b>ERROR:</b> Invalid protocol</i>"
+msgstr ""
+
+#: streams/streamfetcher.cpp:209
+msgid "Fetching %1"
+msgstr "Récupération de %1"
+
+#: streams/streamproviderlistdialog.cpp:128
+msgid "Installed"
+msgstr "Installé"
+
+#: streams/streamproviderlistdialog.cpp:130
+msgid "Update available"
+msgstr "Mise à jour disponible"
+
+#: streams/streamproviderlistdialog.cpp:132
+msgid "Check the providers you wish to install/update."
+msgstr ""
+"Veuillez vérifier les fournisseurs que vous souhaitez installer/mettre à "
+"jour."
+
+#: streams/streamproviderlistdialog.cpp:145
+msgid "Install/Update Stream Providers"
+msgstr "Installer/Mettre à jour les fournisseurs de flux"
+
+#: streams/streamproviderlistdialog.cpp:194
+msgid "Downloading list..."
+msgstr "Téléchargement de la liste…"
+
+#: streams/streamproviderlistdialog.cpp:217
+msgid "Digitally Imported"
+msgstr ""
+
+#: streams/streamproviderlistdialog.cpp:218
+msgid "Local and National Radio (ListenLive)"
+msgstr ""
+
+#: streams/streamproviderlistdialog.cpp:238
+msgid "Failed to download list of stream providers!"
+msgstr "La téléchargement de la liste des fournisseurs de flux a échoué."
+
+#: streams/streamproviderlistdialog.cpp:250
+msgid "Installing/updating %1"
+msgstr "Installation/Mise à jour de %1"
+
+#: streams/streamproviderlistdialog.cpp:257
+msgid "Failed to install '%1'"
+msgstr "L'installation de '%1' a échoué"
+
+#: streams/streamproviderlistdialog.cpp:266
+msgid "Failed to download '%1'"
+msgstr "Le téléchargement de '%1' a échoué"
+
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr "Installer/Mettre à jour les fournisseurs de flux sélectionnés ?"
+
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr "Installer les fournisseurs de flux sélectionnés ?"
+
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr "Mettre à jour le fournisseur de flux sélectionné ?"
+
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
+msgid "Install/Update"
+msgstr "Installation/Mise à jour"
+
+#: streams/streamproviderlistdialog.cpp:370
+msgid "Abort installation/update?"
+msgstr "Abandonner l'installation/la mise à jour ?"
+
+#: streams/streamproviderlistdialog.cpp:428
+msgid "Downloading %1"
+msgstr "Téléchargement de %1"
+
+#: streams/streamproviderlistdialog.cpp:447
+msgid "Update all updateable providers"
+msgstr "Mettre à jour tous les fournisseurs disponibles"
+
+#: streams/streamspage.cpp:58
+msgid "Import Streams Into Favorites"
+msgstr "Importer les flux dans les favoris"
+
+#: streams/streamspage.cpp:59
+msgid "Export Favorite Streams"
+msgstr "Exporter les flux favoris"
+
+#: streams/streamspage.cpp:60
+msgid "Add New Stream To Favorites"
+msgstr "Ajouter un nouveau flux aux favoris"
+
+#: streams/streamspage.cpp:124
+msgctxt "Service name"
+msgid "Digitally Imported"
+msgstr ""
+
+#: streams/streamspage.cpp:215
+msgid "*.xml *.xml.gz *.cantata|XML Streams"
+msgstr "*.xml *.xml.gz *.cantata|Flux XML"
+
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
+msgid "Import Streams"
+msgstr "Importer les flux"
+
+#: streams/streamspage.cpp:218
+msgid "XML Streams (*.xml *.xml.gz *.cantata)"
+msgstr "Flux XML (*.xml *.xml.gz *.cantata)"
+
+#: streams/streamspage.cpp:235
+msgid "*.xml|XML Streams"
+msgstr "*.xml|Flux XML"
+
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
+msgid "Export Streams"
+msgstr "Exporter les flux"
+
+#: streams/streamspage.cpp:237
+msgid "XML Streams (*.xml.gz)"
+msgstr "Flux XML (*.xml.gz)"
+
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr "La création de '%1' a échoué !"
+
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr "Le flux '%1' existe déjà !"
+
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr "Il existe déjà un flux nommé '%1' !"
+
+#: streams/streamspage.cpp:287
+msgid "Bookmark added"
+msgstr "Marque-page ajouté"
+
+#: streams/streamspage.cpp:289
+msgid "Already bookmarked"
+msgstr "Déjà dans les marque-pages"
+
+#: streams/streamspage.cpp:331
+msgid "Already in favorites"
+msgstr "Déjà dans les favoris."
+
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr "Rafraîchir le flux '%1' ?"
+
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr "Êtes-vous sûr de vouloir supprimer '%1' des marque-pages ?"
+
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr "Êtes-vous sûr de vouloir supprimer tous les marque-pages '%1' ?"
+
+#: streams/streamspage.cpp:404
+msgid "Are you sure you wish to remove the %1 selected streams?"
+msgstr "Êtes-vous sûr de vouloir supprimer les %1 flux sélectionnés ?"
+
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "Êtes-vous sûr de supprimer '%1' ?"
+
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
+msgid "Search %1:"
+msgstr "Rechercher %1:"
+
+#: streams/streamspage.cpp:642
+msgid "Added '%1'' to favorites"
+msgstr "Ajout de '%1' aux favoris"
+
+#: streams/streamssettings.cpp:74
+msgid "From File..."
+msgstr "Depuis le fichier…"
+
+#: streams/streamssettings.cpp:75
+msgid "Download..."
+msgstr "Télécharger…"
+
+#: streams/streamssettings.cpp:134
+msgid "*.streams|Cantata Streams"
+msgstr "*.streams|Flux Cantata"
+
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
+msgid "Install Streams"
+msgstr "Installer des flux"
+
+#: streams/streamssettings.cpp:136
+msgid "Cantata Streams (*.streams)"
+msgstr "Flux Cantata (*.streams)"
+
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Une catégorie nommée '%1' est déjà présente !\n"
+"\n"
+"Remplacer ?"
+
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
+msgstr "L'ouverture de l'archive a échoué."
+
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
+msgid "Invalid file format!"
+msgstr "Type de fichier non pris en charge !"
+
+#: streams/streamssettings.cpp:211
+msgid "Failed to create stream category folder!"
+msgstr "La création du dossier de catégorie du flux a échoué !"
+
+#: streams/streamssettings.cpp:219
+msgid "Failed to save stream list!"
+msgstr "L'enregistrement de la liste des flux a échoué."
+
+#: streams/streamssettings.cpp:284
+msgid "Failed to remove streams folder!"
+msgstr "La suppression du dossier de flux a échoué !"
+
+#: support/dialog.cpp:150
+msgid "&OK"
+msgstr "&OK"
+
+#: support/dialog.cpp:151
+msgid "&Cancel"
+msgstr "&Annuler"
+
+#: support/dialog.cpp:152
+msgid "&Yes"
+msgstr "&Oui"
+
+#: support/dialog.cpp:153
+msgid "&No"
+msgstr "&Non"
+
+#: support/dialog.cpp:154
+msgid "&Discard"
+msgstr "&Annuler"
+
+#: support/dialog.cpp:155
+msgid "&Save"
+msgstr "&Sauvegarder"
+
+#: support/dialog.cpp:156
+msgid "&Apply"
+msgstr "&Appliquer"
+
+#: support/dialog.cpp:157
+msgid "&Close"
+msgstr "&Fermer"
+
+#: support/dialog.cpp:159
+msgid "&Overwrite"
+msgstr "&Réécrire"
+
+#: support/dialog.cpp:160
+msgid "&Reset"
+msgstr "&Réinitialiser"
+
+#: support/dialog.cpp:161
+msgid "&Continue"
+msgstr "&Continuer"
+
+#: support/dialog.cpp:162
+msgid "&Delete"
+msgstr "&Effacer"
+
+#: support/dialog.cpp:163
+msgid "&Stop"
+msgstr "&Arrêter"
+
+#: support/dialog.cpp:164
+msgid "&Remove"
+msgstr "&Supprimer"
+
+#: support/dialog.cpp:165
+msgid "&Previous"
+msgstr "&Précédent"
+
+#: support/dialog.cpp:166
+msgid "&Next"
+msgstr "&Suivant"
+
+#: support/inputdialog.h:51
+msgid "Password"
+msgstr "Mot de passe"
+
+#: support/inputdialog.h:51
+msgid "Please enter password:"
+msgstr "Veuillez saisir le mot de passe à nouveau:"
+
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr "Fermer"
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
+msgid "Warning"
+msgstr "Attention"
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
+msgid "Question"
+msgstr "Question"
+
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr "&Fenêtre"
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr "Minimiser"
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr "Zoomer"
+
+#: support/pathrequester.cpp:50
+msgid "Select Folder"
+msgstr "Sélectionner le dossier"
+
+#: support/pathrequester.cpp:51
+msgid "Select File"
+msgstr "Sélectionner le fichier"
+
+#: support/utils.cpp:424 support/utils.cpp:432
+msgid "%1 B"
+msgstr "%1 B"
+
+#: support/utils.cpp:425
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#: support/utils.cpp:426
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#: support/utils.cpp:428
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#: support/utils.cpp:433
+msgid "%1 KiB"
+msgstr "%1 Ko"
+
+#: support/utils.cpp:434
+msgid "%1 MiB"
+msgstr "%1 Mo"
+
+#: support/utils.cpp:436
+msgid "%1 GiB"
+msgstr "%1 Go"
+
+#: support/utils.cpp:636
+msgid "1 day %2"
+msgid_plural "%1 days %2"
+msgstr[0] "1 jour %2"
+msgstr[1] "%1 jours %2"
+
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Étiquettes"
+
+#: tags/tageditor.cpp:202
+msgid "Set 'Album Artist' from 'Artist'"
+msgstr "Récupérer la valeur de 'Artiste de l'album' depuis 'Artiste'"
+
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr "Lire la note à partir du fichier"
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr "Écrire les notes sur les fichiers"
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
+msgid "All tracks"
+msgstr "Toutes les pistes"
+
+#: tags/tageditor.cpp:525
+msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
+msgstr ""
+
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:567
+msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
+msgstr ""
+
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr ""
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:617
+msgid ""
+"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
+"tracks?"
+msgstr ""
+
+#: tags/tageditor.cpp:618
+msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
+msgstr ""
+
+#: tags/tageditor.cpp:619
+msgid "Album Artist from Artist"
+msgstr ""
+
+#: tags/tageditor.cpp:652
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
+msgstr ""
+
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+
+#: tags/tageditor.cpp:684
+msgid "Adjust the value of each track number by:"
+msgstr ""
+
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr "Lire la note de la piste ?"
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr "Notes"
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr "Lire les notes"
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr "Lire la note"
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr "Lire"
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr "Enregistrer les notes dans l'ensemble des pistes ?"
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr "Écrire la note dans le fichier musical ?"
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr "Écrire les notes"
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr "Écrire la note"
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr "L'écriture des notes sur les fichiers suivants a échoué:"
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr "L'écriture de la note sur la piste a échoué !"
+
+#: tags/tageditor.cpp:851
+msgid "All tracks [modified]"
+msgstr "Toutes les pistes [modifier]"
+
+#: tags/tageditor.cpp:853
+msgid "%1 [modified]"
+msgstr "%1 [modifier]"
+
+#: tags/tageditor.cpp:1184
+msgid ""
+"Would you also like to rename your song files, so as to match your tags?"
+msgstr ""
+"Souhaitez vous renommer vos fichiers musicaux afin de les faire correspondre "
+"avec leurs étiquettes ?"
+
+#: tags/tageditor.cpp:1185
+msgid "Rename Files"
+msgstr "Renommer les fichiers"
+
+#: tags/trackorganiser.cpp:175
+msgid "Abort renaming of files?"
+msgstr "Abandonner le renommage des fichiers ?"
+
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr "Le fichier source n'existe pas !"
+
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr "Le fichier de destination existe déjà !"
+
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr "La création du dossier cible a échoué !"
+
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr "Le renommage de '%1' à '%2' a échoué"
+
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+"Les notes des chansons ne sont pas enregistrées dans leur fichier audio mais "
+"dans la base de données d'étiquettes de MPD.\n"
+"\n"
+"Si vous renommez un fichier (ou le dossier le contenant) la note associée à "
+"la piste sera perdue."
+
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
+msgid "(Stream)"
+msgstr "(Flux)"
+
+#: widgets/coverwidget.cpp:75
+msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
+msgstr "<tr><td align=\"right\"><b>Compositeur:</b></td><td>%1</td></tr>"
+
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr "<tr><td align=\"right\"><b>Interprète:</b></td><td>%1</td></tr>"
+
+#: widgets/coverwidget.cpp:80
+msgid ""
+"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
+"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
+"</b></td><td>%3</td></tr>"
+msgstr ""
+"<tr><td align=\"right\"><b>Artiste:</b></td><td>%1</td></tr><tr><td align="
+"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Année:"
+"</b></td><td>%3</td></tr>"
+
+#: widgets/genrecombo.cpp:41
+msgid "Filter On Genre"
+msgstr "Filtrer sur le genre"
+
+#: widgets/genrecombo.cpp:63
+msgid "All Genres"
+msgstr "Tous les genres"
+
+#: widgets/itemview.cpp:681
+msgid "Go Back"
+msgstr "Retour"
+
+#: widgets/menubutton.cpp:39
+msgid "Menu"
+msgstr "Menu"
+
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr "<i><b>NOTE:</b> %1</i>"
+
+#: widgets/playqueueview.cpp:141
+msgid "Remove From Play Queue"
+msgstr "Supprimer de la liste de lecture courante"
+
+#: widgets/searchwidget.cpp:70
+msgid "Search..."
+msgstr "Rechercher…"
+
+#: widgets/searchwidget.cpp:72
+msgid "Close Search Bar"
+msgstr "Fermer la barre de recherche"
+
+#: widgets/servicestatuslabel.cpp:43
+msgid "Logged into %1"
+msgstr "Connecté sur %1"
+
+#: widgets/servicestatuslabel.cpp:44
+msgid "<b>NOT</b> logged into %1"
+msgstr "<b>NON</b> connecté sur %1"
+
+#: widgets/songdialog.cpp:49
+msgid ""
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
+msgstr ""
+"Cantata ne peut accéder aux musiques !\n"
+"\n"
+"Veuillez vérifier le paramètre \"Dossier musical\" ainsi que la valeur du "
+"paramètre \"music_directory\" dans la configuration de MPD."
+
+#: widgets/songdialog.cpp:52
+msgid ""
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
+msgstr ""
+"Cantata ne peut accéder aux musiques !\n"
+"\n"
+"Veuillez vérifier si le périphérique est toujours attaché."
+
+#: widgets/tableview.cpp:92
+msgid "Stretch Columns To Fit Window"
+msgstr "Adapter les colonnes à la fenêtre"
+
+#: widgets/tagspinbox.cpp:38
+msgid "(Various)"
+msgstr "(Divers)"
+
+#: widgets/volumeslider.cpp:116 widgets/volumeslider.cpp:231
+#: widgets/volumeslider.cpp:238
+msgid "Mute"
+msgstr "Muet"
+
+#: widgets/volumeslider.cpp:238
+msgid "Unmute"
+msgstr "Rétablir le son"
+
+#: widgets/volumeslider.cpp:285
+msgid "Volume %1% (Muted)"
+msgstr "Volume %1% (Silencieux)"
+
+#: widgets/volumeslider.cpp:285
+msgid "Volume %1%"
+msgstr "Volume %1%"
+
+#: ../gui/plurals_qt.cpp:29
+msgctxt "Singular"
+msgid "1 Track"
+msgstr "1 piste"
+
+#: ../gui/plurals_qt.cpp:29
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Tracks"
+msgstr "%1 pistes"
+
+#: ../gui/plurals_qt.cpp:34
+#, qt-format
+msgctxt "Singular"
+msgid "1 Track (%1)"
+msgstr "1 piste (%1)"
+
+#: ../gui/plurals_qt.cpp:35
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Tracks (%2)"
+msgstr "%1 pistes (%2)"
+
+#: ../gui/plurals_qt.cpp:40
+msgctxt "Singular"
+msgid "1 Album"
+msgstr "1 album"
+
+#: ../gui/plurals_qt.cpp:40
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Albums"
+msgstr "%1 albums"
+
+#: ../gui/plurals_qt.cpp:45
+msgctxt "Singular"
+msgid "1 Artist"
+msgstr "1 artiste"
+
+#: ../gui/plurals_qt.cpp:45
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Artists"
+msgstr "%1 artistes"
+
+#: ../gui/plurals_qt.cpp:50
+msgctxt "Singular"
+msgid "1 Stream"
+msgstr "1 flux"
+
+#: ../gui/plurals_qt.cpp:50
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Streams"
+msgstr "%1 flux"
+
+#: ../gui/plurals_qt.cpp:55
+msgctxt "Singular"
+msgid "1 Entry"
+msgstr "1 entrée"
+
+#: ../gui/plurals_qt.cpp:55
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Entries"
+msgstr "%1 entrées"
+
+#: ../gui/plurals_qt.cpp:60
+msgctxt "Singular"
+msgid "1 Rule"
+msgstr "1 règle"
+
+#: ../gui/plurals_qt.cpp:60
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Rules"
+msgstr "%1 règles"
+
+#: ../gui/plurals_qt.cpp:65
+msgctxt "Singular"
+msgid "1 Podcast"
+msgstr "1 podcast"
+
+#: ../gui/plurals_qt.cpp:65
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Podcasts"
+msgstr "%1 podcasts"
+
+#: ../gui/plurals_qt.cpp:70
+msgctxt "Singular"
+msgid "1 Episode"
+msgstr "1 Épisode"
+
+#: ../gui/plurals_qt.cpp:70
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Episodes"
+msgstr "%1 Épisodes"
+
+#: ../gui/plurals_qt.cpp:75
+msgctxt "Singular"
+msgid "1 Update available"
+msgstr "1 mise à jour disponible"
+
+#: ../gui/plurals_qt.cpp:75
+#, qt-format
+msgctxt "Plural (N!=1)"
+msgid "%1 Updates available"
+msgstr "%1 mises à jour disponibles"
+
+#~ msgid "ReplyGain"
+#~ msgstr "ReplayGain"
+
+#~ msgid "Uknown"
+#~ msgstr "Inconnu"
diff --git a/po/hu.po b/po/hu.po
index 547deec..aa62414 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
-"PO-Revision-Date: 2014-07-18 05:35+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
+"PO-Revision-Date: 2014-10-23 07:40+0100\n"
"Last-Translator: Török Árpád <torar at freemail.hu>\n"
"Language-Team: Hungarian <kde-l10n-hu at kde.org>\n"
"Language: hu\n"
@@ -21,10 +21,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "Albuminformációk frissítése"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "Lemez"
@@ -35,32 +35,33 @@ msgstr "Lemez"
msgid "Tracks"
msgstr "Számok"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "Előadói információk frissítése"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "Előadó"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "Albumok"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Web-hivatkozások"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "Hasonló művészek"
@@ -68,28 +69,28 @@ msgstr "Hasonló művészek"
msgid "Lyrics Providers"
msgstr "Szövegtárak"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "Wikipédia nyelvek"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "Továbbiak"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "Szüneteket alaphelyzetbe"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "Előadó"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "Al&bum"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr "Szám"
@@ -119,16 +120,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "Cím:"
@@ -136,17 +137,17 @@ msgstr "Cím:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "Előadó:"
@@ -162,38 +163,39 @@ msgstr "Válaszd ki a weboldalt, amit a dalszöveg keresésekor használni akars
msgid "Song Information"
msgstr "Dalinformációk"
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "Képek (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr "10px"
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr "%1px"
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "Dalszövegek"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "Információ"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "Címkék"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr "Metaadat"
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -215,14 +217,14 @@ msgstr "Dalszöveg-fájl törlése"
msgid "Refresh Track Information"
msgstr "Száminformációk frissítése"
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "Kilépés"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "Szám"
@@ -238,7 +240,7 @@ msgstr ""
"Lemezről töltsem újra, vagy töröljem a lemezről és töltsem le?"
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "Újratöltés"
@@ -270,39 +272,39 @@ msgstr "Törölöd a dalszöveg fájlt."
msgid "Delete File"
msgstr "Fájl törlése"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr "Album előadói"
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr "Zeneszerző"
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr "Dalszövegírók"
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr "Rendező"
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr "Újrakeverő"
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr "Alcím"
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr "Szám sorszáma"
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr "Lemez sorszáma"
@@ -314,102 +316,119 @@ msgstr "Lemez sorszáma"
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "Műfaj"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "Dátum"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr "Eredeti dátum"
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr "Megjegyzés"
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr "Copyright"
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr "Címke"
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr "Katalógusszám"
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr "Cím szerint rendez"
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr "Előadó szerint rendez"
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr "Album előadó szerint rendez"
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr "Album szerint rendez"
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr "Kódolta"
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "Kódoló"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr "Mood"
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr "Média"
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "Bitráta"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr "Mintavételi arány"
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr "Csatornák"
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr "Időjelzés"
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr "Előadó (%1)"
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr "%1 kb/s"
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr "%1 Hz"
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr "Bit"
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr "Szereplő"
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "Év"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr "Fájlnév"
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "Dalszöveg leszedése innen %1"
@@ -459,16 +478,16 @@ msgstr "A Cantata éppen számot játszik le"
msgid "Songs To Be Copied"
msgstr "Másolandó dal"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>ÉRVÉNYTELEN</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(Ha eltérő)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -482,134 +501,143 @@ msgstr ""
"Ehhez le kell állítanod a Cantata-t, kézzel frissíteni a Mopidy adatbázisát "
"és újraindítani a Cantata-t a változtatások aktiválása érdekében."
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "Előadó:%1, Lemez:%2, Dal:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 szabad"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "Helyi zenekönyvtár"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "Hang CD"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-"A céleszközön nem maradt elegendő hely\n"
-"A kiválasztott számnak %1 hely kell, de csak %2 maradt\n"
-"A számot át kell kódolni kisebb fájlméretűre, hogy sikeresen másolni "
-"lehessen."
+"Nincs elegendő hely a célmeghajtón.\n"
+"\n"
+"A kiválasztott dal %1 helyet foglal, de csak %2 hely van.\n"
+"A dalt kisebb méretre kell csomagolni, hogy sikeresen másolható legyen."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"Nem maradt elegendő hely a célon.\n"
-"A kiválasztott szám %1 helyet foglal, de csak %2 hely maradt."
+"Nincs elegendő hely a célmeghajtón.\n"
+"\n"
+"A kiválasztott dal %1 helyet foglal, de csak %2 hely van."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "Dalok másolása"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "Dalok törlése"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>A céleszközt nem állítottad be.<br/>Folytatod az alapbeállításokkal?</p>"
+"Nem állítottad be a célmeghajtót-\n"
+"\n"
+"Folytassuk az alapbeállításokkal?"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "Nincs beállítva"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "Alapbeállítások alkalmazása"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Nem állítottad be a forráseszközt.</br> Használjuk az alapbeállításokat?</"
-"p>"
+"Nem állítottad be a célmeghajtót-\n"
+"\n"
+"Folytassuk az alapbeállításokkal?"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "Biztosan le szeretnéd állítani?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "Állj"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "Az eszköz el lett távolítva!"
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "Az eszköz nincs csatlakoztatva!"
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "Az eszköz foglalt?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "Az eszköz megváltozott?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "A használaton kívüli könyvtárak tisztítása"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "Kiszámítsam a lejátszási szintet leszedett számokra?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr "Lejátszási szint"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "Számítás"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "A cél fájlnéve már létezik!<hr/>%1"
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "A dal már létezik!"
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "A dal nem létezik!"
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
@@ -617,31 +645,31 @@ msgstr ""
"Nem sikerült létrehozni a célkönyvtárat!<br/>Ellenőrizd a jogosultságod "
"szintjét.<hr/>%1"
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "A forrásfájl már nem létezik?<br/><br/<hr/>%1"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "Nem sikerült másolni."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "Nem sikerült törölni."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "Nincs csatlakoztatva az eszközhöz."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "A kiválasztott codec nem elérhető."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "Átkódolás sikertelen."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
@@ -649,171 +677,172 @@ msgstr ""
"Nem sikerült létrehozni az átmeneti fájlt.<br/>(MTP eszközre átkódoláshoz "
"kell.)"
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "Nem sikerül olvasni a forrásfájlt. <br/><br/<hr/>%1"
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "Nem sikerül írni a célfájlba.<br/><br/<hr/>%1"
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "Nem maradt hely az eszközön."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "Nem sikerült frissíteni a metaadatokat."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "A szám letöltése sikertelen."
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "Nem sikerült zárolni az eszközt."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "Helyi zenekönyvtár tulajdonságok"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "Hiba"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "Kihagy"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "Automatikusan kihagy"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "Újrapróbál"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "Album"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "Szám:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "Forrás fájl:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "Célfájl:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "Fájl:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "Számol..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (Becsült)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "Hátralévő idő:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "A cache mentése"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "Alkalmazza a \"Vegyes előadók\" munkakörnyezetet"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "Visszaállítja a \"Vegyes előadók\" munkakörnyezetet"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Váltás nagybetűre"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "Számok sorszámának beállítása"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "Eszközök"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "Alkalmazza a \"Vegyes előadók\" munkakörnyezetet?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>Ez a \"Album előadót\" és \"Előadót\" \"Vegyes előadók\"-ra állítja, és a "
-"\"Címet\" \"Előadó Szám - Szám címe\"</i>"
+"Ez a \"Album előadót\" és \"Előadót\" \"Vegyes előadók\"-ra állítja, és a "
+"\"Címet\" \"Előadó Szám - Szám címe\"-re"
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "Visszaállítja a \"Vegyes előadók\" munkakörnyezetet"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr "Visszaállítsa a \"Vegyes előadók\" munkamenetet?"
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>Ahol az \"Album előadó\" megegyezik az \"Előadó és a Címmel, illetve "
-"\"Cím\" \"SzámElőadó -SzámCím\" formátumú, az Előadót a \"Cím\"-ből veszi és "
-"a \"Cím\" maga egyszerűen a cím lesz, pl. <br/><br/>ha a \"Cím\" \"Wibble - "
-"Wobble\", akkor az \"Előadó\" egyszerűen \"Wibble\", a \"Cím\" pedig \"Wobble"
-"\" lesz.</i>"
+"Ahol az \"Album előadó\" megegyezik az \"Előadó és a Címmel, illetve \"Cím"
+"\" \"SzámElőadó -SzámCím\" formájú, az Előadót a \"Cím\"-ből veszi és a \"Cím"
+"\" maga egyszerűen a cím lesz, pl.\n"
+"ha a \"Cím\" \"Wibble - Wobble\", akkor az \"Előadó\" egyszerűen \"Wibble\", "
+"a \"Cím\" pedig \"Wobble\" lesz."
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "Visszaállít"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-"A 'Cím', 'Előadó', 'Előadó lemez' és 'Lemez' kezdőbetűjét nagybetűsre váltja"
+"Nagybetűsítse a 'Cím', 'Előadó, 'Album előadó' és 'Album' első betűjét?"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "A szám sorszámának módosítás ennyivel:"
@@ -861,8 +890,8 @@ msgstr "Több egyezést találtam. Kérem válaszd ki a megfelelőt az alábbiak
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "Cím"
@@ -982,75 +1011,79 @@ msgstr "Sync"
msgid "Forget Device"
msgstr "Eszköz elfelejtése"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "Eszköz hozzáadása"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "Keressem az album és szám részleteit?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "Frissítés"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "CDDB útján"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "MusicBrainz útján"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
-msgstr ""
-"<p>Milyen fajta frissítést szeretne végrehajtani?<ul><li>Részleges - Csak új "
-"számokat keres <i>(gyors)</i></li><li>Teljes - Minden számot újrakeres "
-"<i>(lassú)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr "Milyen típusú frissítést szeretnél?"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr "Részleges - csak az új számokat nézi át (gyors)"
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr "Teljes - minden számot újra átnéz (lassú)"
+
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "Részleges"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "Teljes"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Biztosan törölni akarod a kiválasztott dalokat?\n"
-"Ezt nem lehet visszaállítani."
+"Biztosan törölni szeretnéd a kiválasztott dalokat?\n"
+"\n"
+"Ezt nem lehet visszavonni!"
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "Biztosan el akarod felejteni <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "Biztosan el akarod vetni? %1'?"
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "Biztosan ki szeretnéd adni a hang CD-t <b>%1 - %2</b>"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr "Biztosan ki akarod adatni a hang CD-t '%1 - %2'?"
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "Kiadás"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "Biztosan le szeretnéd csatlakoztatni <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr "Biztosan le akarod választani '%1'?"
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "Leválasztás"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "Légy szíves zárd be előbb a másik párbeszédet!"
@@ -1154,7 +1187,7 @@ msgstr ""
"hordozható lejátszókon történő hallgatására. <br/>Bármi <b>120kb/s</b> alatt "
"bárki számára alkalmatlan lehet és bármi <b>205kb/s</b> fölött túlzó lehet."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1199,16 +1232,16 @@ msgstr ""
"adatszakaszok magasabb bitrátával lesznek kódolva, mint a kevésbé komplexek;"
"ez a megközelítés egyszerre produkál jobb minőséget és kisebb fájlt, mint "
"az állandó bitráta a szám egésze során. <br>A Vorbis kódoló -1 és 10 közötti "
-"értéket használ egy adott elvárt hangminőség meghatározására A bitráta érték "
-"a csúszkán csak durva becslése (Vorbis adja meg) a kódolt szám minőségének. "
-"A valóságban az újabb Vorbis verziók bitrátája ennél kisebb. <b><b>5</b> jó "
-"választás zenék hordozható lejátszókon történő hallgatására. <br/>Bármi "
-"<b>3</b> alatt bárki számára alkalmatlan lehet és bármi <b>8</b> fölött "
-"túlzó lehet."
+"minőségi besorolást használ egy adott elvárt hangminőség meghatározására A "
+"bitráta érték a csúszkán csak durva becslése (Vorbis adja meg) a kódolt szám "
+"minőségének. A valóságban az újabb Vorbis verziók bitrátája ennél kisebb. "
+"<b><b>5</b> jó választás zenék hordozható lejátszókon történő hallgatására. "
+"<br/>Bármi <b>3</b> alatt bárki számára alkalmatlan lehet és bármi <b>8</b> "
+"fölött túlzó lehet."
#: devices/encoders.cpp:184
msgid "Quality rating"
-msgstr "Minőségi osztályzat"
+msgstr "Minőségi besorolás"
#: devices/encoders.cpp:201
msgid "Opus"
@@ -1271,7 +1304,7 @@ msgstr ""
"(ALAC) veszteségmentes digitális zenetömörítő audio codec. <br>Csak a FLAC-"
"ot nem támogató Apple zenelejátszók és lejátszók számára javasolt "
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1402,13 +1435,13 @@ msgstr "Dance"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-"<p>A számok címeiben a következő változók, értelmüknek megfelelően "
-"lecserélésre kerülnek."
+"A következő változók lesznek lecserélve a megfelelő értelemben minden egyes "
+"szám nevében."
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
@@ -1416,53 +1449,52 @@ msgstr ""
"<tr><th><em>Változó</em></th><th><em>Gomb</em></th><th><em>Leírás</em></th></"
"tr>"
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "Frissítés..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "Cache olvasása"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "Csatlakozás az eszközhöz..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "Nem találtam eszközt"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "Csatlakozva az eszközhöz"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "Leválasztva az eszközről"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "Könyvtárak frissítése"
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "Fájlok frissítése..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "számok frissítése..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "Nincs csatlakozva"
@@ -1470,7 +1502,7 @@ msgstr "Nincs csatlakozva"
msgid "%1 (Disc %2)"
msgstr "%1 (Lemez %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "Nincs találat a MusicBrainz-ben"
@@ -1478,17 +1510,19 @@ msgstr "Nincs találat a MusicBrainz-ben"
msgid "Connection"
msgstr "Csatlakozás"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "Zenekönyvtár"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"A \"%1\" nevű távoli eszköz már létezik!\n"
-"Kérem válassz más nevet"
+"A '%1' nevű távoli eszköz már létezik!\n"
+"\n"
+"Kérlek válassz másik nevet."
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1568,20 +1602,20 @@ msgstr "Kapacitás ismeretlen"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "Keresés"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "Tételek kiválasztása"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "Tételek kiválasztásának törlése"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "Semmi sincs kiválasztva"
@@ -1625,7 +1659,7 @@ msgstr "Érvénytelen fájlnév. (%1)"
msgid "Failed to save %1."
msgstr "Nem sikerült menteni %1."
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "Nem sikerült törölni a dinamika szabálylistát. (%1) "
@@ -1657,20 +1691,24 @@ msgstr "Érvénytelen értékmegadás."
msgid "Unknown method called."
msgstr "Ismeretlen eljárás hívása."
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "Ismeretlen hiba"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "Dinamikus lejátszási lista indítása"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "Dinamikus mód leállítása"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr " - Besorolás: %1..%2"
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
@@ -1678,47 +1716,47 @@ msgstr ""
"Telepítened kell a \"perl\"-t a rendszeredre, a Cantata dinamikus módjának "
"működéséhez."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "Nem találom a szabályok fájlt - %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "Nem sikerült eltávolítani a korábbi szabályok fájlt - %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "Nem sikerült telepíteni a szabályok fájlt - %1 -> %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "A dinamizáló befejeződött."
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "Szabályok mentése"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "Szabályok törlése"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "Választ vár a korábbi parancshoz. (%1) "
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr "Nem sikerült menteni %1. (%2)"
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Nem sikerült ellenőrizni a dinamizáló állapotát. (%1) "
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "Nem sikerült helyreállítani jelenlegi dinamika-szabályokat. (%1) "
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1740,26 +1778,28 @@ msgstr "Dinamikaszabályok eltávolítása"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Biztosan szeretnéd eltávolítani a kiválasztott szabályokat?\n"
+"Biztosan eltávolítod a kiválasztott szabályokat?\n"
+"\n"
"Ezt nem lehet visszavonni."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "Dinamikaszabály"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "Hozzáad"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr "<i><b>HIBA</b>: Az 'Évtől...' kisebb legyen mint az 'Évig...'</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1789,76 +1829,86 @@ msgstr "(Pontosan)"
msgid "Dynamic Rules"
msgstr "Dinamikaszabályok"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr "A dinamikus szabályokról"
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-"<p>A Cantata a felsorolt szabályok szerint végignézi a könyvtáradat. A "
-"<i>Hozzávesz</i> szabályokat a szóba jöhető dalokból összeállítás "
-"készítésére használja. A <i>Kizár</i> szabályokat fel nem használható dalok "
-"összegyűjtésére használja. <i>Hozzávesz</i> szabályok hiányát, a Cantata úgy "
-"értelmezi, hogy az összes dal (a <i>Kizár</i> kivételével) felhasználható. "
-"<br/>pl. hogy a Cantata 'Wibble VAGY Válogatott előadók rock dalokat "
-"gyűjtse', a következők kellenek: <ul><li>Hozzávesz AlbumElőadó=Wibble "
-"Műfaj=Rock</li><li>Hozzávesz AlbumElőadó=Vegyes előadók</li></ul>. Hogy a "
-"Cantata keresse a 'Wibble dalokat, de nem az ABC albumból', a következők "
-"kellenek: <ul><li>Hozzávesz AlbumElőadó=Wibble</li><li>Kizár Album=Abc</li></"
-"ul>. Ezután a használható dalokból készül összeállítás. A Cantata "
-"véletlenszerűen választ ki dalokat lejátszásra, hogy a lejátszó listában "
-"meglegyen a 10 tétel.</p>"
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+"<p>A Cantata az összes felsorolt szabály alapján lekérdezi a könyvtáradat. A "
+"<i>Befoglal</i> szabályok listája alapján készít egy összeállítást a "
+"használható dalokból. A <i>Kizár</i> szabályok alapján készít egy "
+"összeállítást a nem használható dalokból. Ha nincsenek <i>befoglal</i> "
+"szabályok, akkor a Cantata feltételezi, hogy (a <i>Kizár</i>taktól "
+"eltekintve) mind használható.</p><p>Pl.ahhoz, hogy a Cantata 'Rock dalokat "
+"by Zengetés, VAGY Vegyes előadók' alapján keressen, akkor a következőket "
+"kellenek: <ul><li>Befoglal AlbumElőadó=Zengetés műfaj=Rock</li><li>Befoglal "
+"AlbumElőadó=Vegyes Előadók</li></ul> Ahhoz, hogy 'zenegetés szerinti dalokat "
+"keressen de ne az albumból', akkor a következők kellenek: <ul><li>Befoglal "
+"AlbumElőadó=Zengetés</li><li>Kizár AlbumElőadó=Zengetés Album=Abc</li></"
+"ul>Miután a használható dalok összeállítását elkészítette, a Cantata "
+"véletlenszerűen kiválasztva feltöltve tartja a lejátszási listát 10 számmal. "
+"Amennyiben a besorolást is meghatározott, akkor csak azok a dalok kerülnek "
+"bele, amik az adott besorolási határon belül vannak.</p>"
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "Nem sikerült menteni %1"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-"Ezen a néven '%1' már van szabályrendszer!\n"
-"Felülírja?"
+"A '%1' nevű szabálycsoport mér létezik!\n"
+"\n"
+"Felülírjam?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "Szabályok felülírása"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "Mentés %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "Törlés..."
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "Név"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "Elemek számolása"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "Felhasznált hely"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr "Teljes felhasznált terület: %1"
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1873,67 +1923,67 @@ msgstr ""
"Cantata-t, hogy ezeket nem mentse ide). A következőkben látható a Cantata "
"aktuális cache felhasználása."
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "Borítók"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "Méretarányos borítók"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "Hátterek"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "Előadói információk"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "Albuminformációk"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr "Száminformációk"
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr "Hangfolyamok (stream-ek) listája"
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "Jamedo"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "Magnatune"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr "Podcast-könyvtárak"
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
-msgstr "Számok karcolása"
+msgstr "Számok feljegyzése"
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "Minden törlése"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "Törli mind a '%1' tételt?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "Cache tételek törlése"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>Innentől kezdve mindent töröl?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr "Az összes kiválasztott kategóriából törölsz elemeket?"
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1944,7 +1994,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1955,69 +2005,71 @@ msgstr ""
"%1\n"
"%2 x %3"
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "Aktuális borító"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr "CoverArt archívum"
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "Kép"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "Letöltés..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "Kép (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr "Az előadóról már van kép és a fájl írásvédett."
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr "Az album borítója már létezik és a fájl írásvédett."
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr "%1 Előadó képe"
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr "'%1 - %2' Album borító"
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-"Nem sikerült a borítót beállítani\n"
-"Nem tudtam átmeneti fájlba tölteni!"
+"Nem sikerült beállítani a borítót!\n"
+"\n"
+"Nem tudom letölteni az átmeneti fájlt!"
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "A képet nem tudtam letölteni!"
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "Helyi borító letöltése"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "A fájl már szerepel a listában!"
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "Nem tudtam olvasni a képet!"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "Mutatás"
@@ -2029,36 +2081,42 @@ msgstr "Mutatás"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "Eltávolítás"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-"A borító beállítása sikertelen!\n"
-"Nem tudtam másolatot készíteni!"
+"Nem sikerül beállítani a borítót!\n"
+"\n"
+"Nem sikerült másolni!"
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-"A borító beállítása sikertelen!\n"
-"Nem tudtam menteni az eredetit!"
+"Nem sikerül beállítani a borítót!\n"
+"\n"
+"Nem sikerült menteni az eredetit!"
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-"A borító beállítása sikertelen!\n"
-"Nem tudtam másolni a fájlt ide '%1'!"
+"Nem sikerül beállítani a borítót!\n"
+"\n"
+"Nem sikerült ebbe: '%1' másolni a fájlt!"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "Keresés..."
@@ -2074,258 +2132,200 @@ msgstr "Kapcsolat felállt"
msgid "Connection Failed"
msgstr "Csatlakozás sikertelen"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr "Album, Előadó, Év"
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr "Album, Év, Előadó"
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr "Előadó, Album, Év"
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr "Előadó, Év, Album"
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr "Év, Album, Előadó"
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr "Év, Előadó, Album"
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "Nincs"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "Kicsi"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "Közepes"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "Nagy"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "Nagyon nagy"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr "Alap fastruktúra (nincs ikon)"
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "Egyszerű fa"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "Részletes fa"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "Csoportosított lemezek"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "Lista"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "Ikon, vagy lista"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr "Rács (osztás)"
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "Táblázat"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "Sor lejátszása"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "Előadók"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "Könyvtárak"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "Lejátszási listák"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "Dinamikus lejátszási lista"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "Hangfolyam (stream-ek, pl. rádióállomások)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr ""
"Online szolgáltatások - Jamendo, Maganatune, SoundCloud és podcast-ok."
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr "Eszközök - UMS, MPT (pl. Android) és hang CD-k."
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr "Keresés (MPD-n keresztül)"
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr "Infó. - a jelenlegi szám adatai (előadó, album és dalszöveg)"
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "Stílus:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Nagy"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Kicsi"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr "Lapsáv (fülek)"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "Bal"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "Jobb"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "Felső"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "Alsó"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr "Értesítések"
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "Rendszer alapbeállítása"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "Cantata"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "KDE kliens az MPD-nek"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "© 2011-2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "Karban tartó"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "UI fejlesztések"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "QtMPC készítője"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
@@ -2333,114 +2333,119 @@ msgstr ""
"Hátterek tartalmi nézete (kérlek, gondolkodj el a saját zene inspirálta "
"műved feltöltésén a fanart.tv-re)"
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "Wikipédia"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "A metaadatok tartalmi nézete"
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "URL megnyitásra"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "Cantata beállítása..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr "Testreszabás"
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "Megszakít"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "Cantata névjegye..."
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "Ablak mutatása"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "Kiszolgáló-információk"
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "Adatbázis-frissítés"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr "Teljes frissítés"
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "Csatlakozás"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "Gyűjtemény"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "Kimenetek"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "A szám után leáll"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "A tárolt lejátszási listához hozzáad"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "Vágás"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "Stream URL hozzáadása"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "Töröl"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr "Központosítás az aktuális számra"
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "Lejátszó kinyitása"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "A lejátszó kibontása"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "Teljes képernyő"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "Véletlenszerűen"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "Ismétlés"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "Egyszeri"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2448,11 +2453,11 @@ msgstr ""
"'Egyszeri' beállítása esetén a lejátszás az aktuális dal után leáll, vagy a "
"dal ismétlődik, ha az 'Ismétlés' engedélyezett."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "Elhasznál"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
@@ -2460,106 +2465,114 @@ msgstr ""
"Amikor az 'Elhasznál' aktív, a dal a lejátszása után kikerül a lejátszási "
"sorból."
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr "Keresés a lejátszási sorban"
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "Prioritás beállítása"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "Hangfolyam (stream) lejátszása"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "Könyvtárban megkeres"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "Dal címkéjének szerkesztése"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "Mind kibontása"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "Mind elrejtése"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr "Összes dal eltávolítása"
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr "Az albumok és az előadók 'Új' megjelölésének törlése"
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "Dinamikus"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "Stream-ek"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "Online"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "Eszközök"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "Info"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr "Menüsáv megjelenítése"
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr "Zene"
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "Szerkesztés"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr "Nézet"
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr "Sor"
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "Beállítások"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "Segítség"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr "Besorolás beállítása"
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr "Nincs besorolás"
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
"A dinamikus lejátszási lista feltételeinek megfelelő fájl nem található."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "Csatlakozás ehhez %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "Adatbázist frissítsem?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "Cantata névjegye"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2570,7 +2583,7 @@ msgstr ""
"Drummond<br/>Kiadva <a href=\"http://www.gnu.org/licenses/gpl.html\">GPLv3 "
"szerint.</a>"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
@@ -2578,7 +2591,7 @@ msgstr ""
"Ezen alapul <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
@@ -2587,7 +2600,7 @@ msgstr ""
"A tartalmi nézet háttere innen származik <a href=\"http://www.fanart.tv"
"\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2596,7 +2609,7 @@ msgstr ""
"A tartalmi nézet metaadatai innen származnak <a href=\"http://www.wikipedia."
"org\">Wikipédia</a> és <a href=\"http://www.last.fm\">Last.fm</a>"
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2604,21 +2617,33 @@ msgstr ""
"Fontold meg a kedvenc zenéd feltöltését ide <a href=\"http://www.fanart.tv"
"\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
msgstr ""
-"Podcast-ok letöltése folyik\n"
+"Egy podcast letöltése folyamatban van.\n"
"\n"
-"A kilépés az összes letöltést megszakítja."
+"A kilépés megszakítja az adatfolyam letöltését."
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
msgstr "Letöltés megszakítása és kilépés"
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr "Engedélyezve: %1"
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr "Nincs engedélyezve: %1"
+
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Szerver-információk"
+
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2632,7 +2657,7 @@ msgstr ""
"%5</td></tr><tr><td align=\"right\">Kezelők: </td><td>%6</td></"
"tr><tr><td align=\"right\">Címkék: </td><td>%7</td></tr>"
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2646,80 +2671,101 @@ msgstr ""
"tr><tr><td align=\"right\">Időtartam: </td><td>%4</td></tr><tr><td "
"align=\"right\">Frissítve: </td><td>%5</td></tr>"
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "Szerver-információk"
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "Cantata (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr "Az MPD a következő hibát jelezte: %1"
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr "Lejátszás leállt"
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr "A lejátszási sorból minden számot töröl?"
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "Prioritás"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "Add meg a prioritást (0-255):"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "Lejátszási lista neve"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "Írj be egy nevet a lejátszási listának:"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-"A(z) <b>%1</b> használatban van a kedvenc adatfolyamok tárolására, kérem "
-"válasszon másik nevet."
+"'%1' lefoglalva a kedvenc adatfolyamok tárolására, kérlek válassz másik "
+"nevet!"
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-"A(z) <b>%1</b> lejátszási lista már létezik!<br/>Ahhoz a listához adjam "
-"hozzá?"
+"A(z) '%1' nevű lejátszási lista már létezik\n"
+"\n"
+"Hozzáadjam ahhoz a listához?"
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "Létező lejátszási lista"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "Stream URL-je"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr "A stream URL-je:"
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr "Érvénytelen, vagy nem támogatott URL!"
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr "Csak az MPD zenetárában található dalok címkéi szerkeszthetők."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Nincs"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "Automatikus"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
@@ -2727,9 +2773,9 @@ msgstr ""
"<i>csatlakozva ehhez %1<br/>Alábbi elemeket a jelenleg kapcsolt MPD-"
"gyűjteményre érvényesíti.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2737,31 +2783,31 @@ msgstr ""
"<i>Nincs csatlakoztatva!<br/>Az alábbi elemek nem módosíthatóak, mivel a "
"Cantata ben csatlakozik az MPD-hez.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
-msgstr ""
-"<p>A Replay Gain (lejátszási szint) 2001-ben kiadott szabványosítási "
-"javaslat, hogy az MP3 és Ogg Vorbis-hoz hasonló számítógépes hangok "
-"lejátszási hangerejét normalizálja. Ez szám/album alapon működik, és "
-"mostanra már a lejátszók nagy száma támogatja. </p><p>A következő Lejátszási "
-"szint beállítások használhatók:<ul><li><i>Semmi</i> - Nincs beállítva szint."
-"</li><li><i>Szám</i> - A hangerőt a számok ReplayGain címkéi alapján állítja "
-"be.</li><li><i>Album</i> - A hangerőt az albumok ReplayGain címkéi alapján "
-"állítja be.</li><li><i>Automatikus</i> - A lejátszás hangerejét, ha a "
-"véletlenszerű lejátszás aktív, akkor a számok ReplayGain címkéi alapján "
-"állítja be, egyébként az album címkéjét használja.</li></ul></p>"
-
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+"li></ul>"
+msgstr ""
+"A Replay Gain egy 2001-ben abból a célból kiadott ajánlott szabvány, hogy "
+"beszabályozza az MP3 és Ogg Vorbis-hez hasonló számítógépes hangformátum "
+"várható hangerejét. Szám/album alapon dolgozik, és mára növekvő számú "
+"lejátszó támogatja..<br/><br/> A következő Replay Gain (lejátszási "
+"szint)beállítások használhatók <ul><li><i>Nincs</i> - értelemszerű.</"
+"li><li><i>Szám</i> - A hangerőt a szám ReplayGain jelölője szerint állítja "
+"be.</li><li><i>Album</i> - A hangerő beállításához az album ReplayGain "
+"jelölőjét használja.</li><li><i>Auto</i> - Amennyiben véletlenszerű "
+"lejátszás van, akkor a hangerőt a szám ReplayGain jelölője szerint, más "
+"esetben pedig az album jelölője szerint állítja be.</li></ul>"
+
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "Átnevezés"
@@ -2769,35 +2815,43 @@ msgstr "Átnevezés"
msgid "Remove Duplicates"
msgstr "Másolatok eltávolítása"
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Biztosan eltávolítod a kijelölt lejátszási listát?\n"
-"Nem vonható vissza."
+"Biztos el akarod távolítani a kiválasztott lejátszási listát?\n"
+"\n"
+"Ez nem vonható vissza."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "Lejátszási lista eltávolítása"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "A(z) <b>%1</b> lejátszási lista létezik!<br/>Felülírjam?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"A(z) '%1' nvű lejátszási lista már létezik!\n"
+"\n"
+"Felülírod?"
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "Lejátszási lista felülírása"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "Lejátszási lista eltávolítása"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "Adj új nevet a lejátszási listának:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr "A dalok innen '%1'nem adhatók ide '%2'"
@@ -2861,113 +2915,117 @@ msgid_plural "%1 Updates available"
msgstr[0] "1 Van frissítés"
msgstr[1] "%1 Vannak frissítések"
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "Gyűjtemény beállításai"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "Lejátszás"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "Lejátszás beállításai"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "Fájlok"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "Fájl-beállítások"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "Felület"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "A felület beállításai"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr "Hangfolyam beállításai"
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr "Online szolgáltatók"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "Tartalom"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "Tartalmi nézet beállításai"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
-msgstr "Karcolás"
+msgstr "Zenefeljegyzés"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
-msgstr "Karcolás beállításai"
+msgstr "Zenefeljegyzés beállításai"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "HTTP Szerver"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "HTTP Szerver beállításai"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "Hang CD beállításai"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "Proxy"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "Proxybeállítások"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "Gyorsbillentyűk"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "Gyorsbillentyűk beállításai"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "Cache"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "Cache elemei"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr "A Cantata beállításai"
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "Beállítás"
@@ -2975,60 +3033,64 @@ msgstr "Beállítás"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr "Zeneszerző:"
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr "Szereplő:"
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "Műfaj:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr "Megjegyzés:"
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "Dátum:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr "Módosítva:"
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr "Bármely:"
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "Számokat nem találtam."
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
@@ -3036,335 +3098,317 @@ msgstr ""
"<i> A könyvtár az eszközökre (és eszközökről) átvitelre szánt zene "
"tárolására is szolgál.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "Elhelyező:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr "Milyen típusú válogatáshoz szeretnél csatlakozni?"
+
+#: gui/serversettings.cpp:240
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
msgstr ""
-"Milyen gyűjteménytípushoz akarsz csatlakozni? <br/><ul><li>Standard - "
-"zenegyűjtemény már megosztva másik gépen, vagy már be van állítva </"
-"li><li>Basic - zenegyűjtemény nincs megosztva más gépekkel, és a Cantata "
-"állítja be és vezérli az MPD példányt.</li></ul>"
+"Standard - megosztható zeneválogatás, másik gépen van, vagy már be lett "
+"állítva"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:241
+msgid ""
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
+msgstr ""
+"Basic - nem megosztott zeneválogatás, a Cantata fogja beállítani és "
+"vezérelni az MPD példányt"
+
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "Gyűjteményt hozzáad"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "Szabványos"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "Alap"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "Törlöd <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr "Törlöd a(z) '%1'-t?"
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "Törlés"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "Új gyűjtemény %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "Alapbeállítás"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr "Multimédia-gombok"
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr "Ne használd a média-gombokat a Cantata vezérlésére"
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr "A médiagombok használata a Cantata vezérlésére"
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-"A médiagombok használata a Cantata vezérlésére asztalbeállítások szerint"
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-"A médiagombok használata a Cantata vezérlésére a GNOME/Unity beállításai "
-"szerint"
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "Beállítás..."
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "Előző szám"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "Következő szám"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "Lejátszás/Szünet"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "A mostani szám után leáll"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "Hangerő növelése"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "Hangerő csökkentése"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "Mentés mint..."
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "Lejátszási listához hozzáad"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr "Albumok hozzáadása véletlenszerű sorrendben."
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "Lejátszási lista lecserélése"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "Hozzáad prioritással"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "Legmagasabb prioritás (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "Magas prioritás (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "Közepes prioritás (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "Alacsony prioritás (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "Alap prioritás (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "Tetszőleges prioritás..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "Lejátszási listához ad"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Fájlok rendezése"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "Címkék szerkesztése"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "Lejátszási szint"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr "Száminformációk szerkesztése"
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "Számok másolása az eszközre"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "Kép beállítása"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr "Keres"
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "Most megy"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr "Helyi visszacsatolás (%1)"
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr "Vezetékes (%1)"
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr "Vezeték nélküli (%1)"
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "Az első aktív interfész"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr "Lejátszás"
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr "Szünet"
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%1 előadja %2"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Kulcslap"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "Lejátszási lista"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "Eszköz beállítása"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "Eszköz frissítése"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "Eszköz csatlakoztatása"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "Eszköz leválasztása"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "CD-adatok szerkesztése"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "Nincs csatlakoztatott eszköz"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "Nincs bejelentkezve"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "Bejelentkezve"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "Nincs előfizetés"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "Nincs aktív előfizetésed"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "Bejelentkezve (lejárat:%1) "
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "Munkamenet lejárt"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "Hangfájl"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "Egyedüli számok"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "Szolgáltatás beállítása"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "Szolgáltatás frissítése"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "Előfizetés hozzáadása"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "Előfizetés eltávolítása"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "Előfizetés frissítése"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "Utoljára keresett:%1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "Nincs betöltve"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "Számok előkerítésére használd a keresést "
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(Letölt: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr "(Letöltés sorbaállítva)"
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "Új lejátszási lista..."
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "Okos lejátszási lista"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "Időtartam"
@@ -3372,6 +3416,10 @@ msgstr "Időtartam"
msgid "Disc"
msgstr "Lemez"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr "Besorolás"
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr "Visszavon"
@@ -3394,86 +3442,82 @@ msgstr "Rendezés ... szerint"
msgid "Album Artist"
msgstr "Album előadója"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(Prioritás: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "Betöltés..."
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "Könyvjelzők"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr "Dirble???"
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Kedvencek"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "Könyvjelző-kategóriák"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Hangfolyam hozzáadása a kedvencekhez"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "Hangfolyam beállítása"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "Ismeretlen"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "\"%1\""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "\"%1\" (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "Csatlakozás ehhez %1 sikertelen"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr ""
"Kapcsolódás %1 -hez nem sikerült - kérem ellenőrizd a proxy beállításait."
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "Csatlakozás ehhez %1 sikertelen - hibás jelszó"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "Csatlakozás ehhez %1 sikertelen - nincs csatlakozva"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr "Betöltés sikertelen. Ellenőrizd a felhasználó \"mpd\" olvasási jogát."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
@@ -3481,27 +3525,27 @@ msgstr ""
"Betöltés sikertelen. Az MPD csak helyi fájlokat játszik le, ha helyi "
"csatlakozóra csatolva."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "Sikertelen parancsküldés. Leválasztva innen: %1"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "Sikertelen átnevezés erről <b>%1</b> erre <b>%2</b>"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "Sikertelen mentés"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr "Kulcslap részletét nem adhatod a lejátszási listához!"
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr "Nem adhatsz lejátszási listát másik listához!"
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
"Nem sikerült %1 elküldése %2 -re. Ellenőrizd, hogy %2 MPD-be be lett-e "
@@ -3511,15 +3555,11 @@ msgstr ""
msgid "Personal"
msgstr "Személyes"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "Ismeretlen"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "Vegyes előadók"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3533,12 +3573,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr "<b>%1</b> a <b>%2</b>-ön"
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr "<b>%1</b> <b>%2</b>-vel <b>%3</b>-on"
@@ -3571,19 +3611,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "A hangfolyam formátuma:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "Hangfolyam"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3593,85 +3633,85 @@ msgstr "Magnatune-beállítások"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "Felhasználónév:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "Jelszó:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "Tagság:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "Letöltések:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "Letöltés"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "Képernyőfrissítés"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "Számok csoportosítása"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "Válaszok elemzése"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "Elemzés sikertelen"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "Letöltés sikertelen"
@@ -3687,131 +3727,137 @@ msgstr "Podcast részek letöltése"
msgid "Delete Downloaded Podcast Episodes"
msgstr "A letöltött podcast részek törlése"
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr "A podcast-rész letöltésének megszakítása"
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr "A podcast-rész megjelölése újnak"
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr "A podcast-rész megjelölése meghallgatottnak"
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Beállítás..."
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "Keresés %1:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "Újratöltésem a zenelistát evvel kapcsolatban %1?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "Újra betölt"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
-msgstr "Leiratkozik innen <b>%1</b>?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr "Leiratkozol a(z) '%1'-ről?"
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr "Az összes podcast-listát frissíti?"
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr "Frissíti a részek listáját innentől: <b>%1</b>?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr "A(z) '%1' részeinek listáját frissíti?"
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr "Az összes kiválasztott podcast-részt már letöltöttem!"
-
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr "Letöltenéd a következő podcast részt?"
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
-msgstr "Letöltenéd a következő podcast részeket?"
-
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr "Biztosan eltávolítanád a kiválasztott %1 podcast epizódot?"
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
-msgstr "Az összes kiválasztott podcast-részt már töröltem!"
-
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:648
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
-msgstr "Letörölnéd a következő podcast rész letöltött fájlját?"
-
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
-msgstr "Letörölnéd a következő podcast részek letöltött fájljait?"
+"Cancel podcast episode downloads (both current and any that are queued)?"
+msgstr ""
+"Podcast-rész letöltését megszakítja (mind a folyamatban lévőt, mind a "
+"várakozót)?"
-#: online/onlineservicespage.cpp:699
+#: online/onlineservicespage.cpp:685
msgid ""
"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr "Letörölnéd a következő kiválasztott podcast részek letöltött fájljait?"
-#: online/podcastsearchdialog.cpp:253
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr "Megjelölöd a kiválasztott podcast-részt újnak?"
+
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr "Megjelölöd a kiválasztott podcast-részt meghallgatottnak?"
+
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "Weblap:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "A podcast részletei"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr "Válaszd ki a podcast-ot, amiek a részleteit megjelenítenéd"
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr "Írd be a keresett kifejezést..."
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "Nem sikerült podcast-ot letölteni erről %1"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr "A(z) %1 válaszának elemzésével probléma adódott."
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr "A könyvtárlistát nem sikerült letölteni"
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr "Könyvtárlista elemzése sikertelen"
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "URL"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr "Írd be a podcast URL-jét..."
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr "Betölt"
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr "Írd be a podcast URL-jét és 'Betölt' gombot nyomd le."
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr "Érvénytelen URL!"
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr "Nem sikerült podcast-ot letölteni"
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr "A podcast elemzése sikertelen"
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
@@ -3819,61 +3865,61 @@ msgstr ""
"A Cantata csak audio podcast-ok lejátszását támogatja! Az URL csak videó "
"podcast-okat tartalmaz."
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr "Feliratkozás"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr "Írd be a URL-t:"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr "Podcast kézi URL"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "Keresés %1"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr "Podcast keresése itt: %1"
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr "Podcast leírásának hozzáadása"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr "Böngészés %1"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr "A(z) %1 podcast-ok böngészése"
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr "Előfizetés hozzáadva"
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr "Már feliratkoztál erre a podcsat-ra!"
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "Podcast-ok"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
"A Cantata csak audio podcast-ok lejátszását támogatja! A(z) %1 csak videó "
"podcast-okat tartalmaz."
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr "Elemzés sikertelen %1"
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr "Letöltés sikertelen %1"
@@ -3885,59 +3931,77 @@ msgstr "Új részek keresése:"
msgid "Download episodes to:"
msgstr "Részek letöltése ide:"
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
-msgstr "Új részek automatikus letöltése"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr "Automatikus letöltés:"
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr "Podcast beállítások"
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr "Kézzel"
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr "Minden 15. percben"
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr "Minden 30. percben"
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr "Minden órában"
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr "Minden 2. órában"
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr "Minden 6. órában"
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr "Minden 12. órában"
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr "Minden nap"
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr "Minden héten"
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr "Ne töltse le automatikusan a részeket."
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr "A legfrissebb rész"
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr "A legfrissebb %1 részek"
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr "Az összes rész"
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr "Háttérkép"
@@ -3949,61 +4013,61 @@ msgstr "A művész képe"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr "Egyéni kép:"
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr "Elmosás:"
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10px"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr "Áttetszőség:"
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40%"
@@ -4028,7 +4092,7 @@ msgstr "Ne legyen automatikus váltás"
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " ms"
@@ -4057,11 +4121,11 @@ msgstr "Mindig csukd össze egyetlen táblába"
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
-"Csak az 'Előadó', 'Album', vagy a 'Dalszöveg' megjelenítése még ha elegendő "
-"hely lenne az összesre."
+"Csak az 'Előadó', 'Album', vagy 'Szám' mutatása, még ha elegendő hely van "
+"mindháromhoz."
#. i18n: file: context/othersettings.ui:213
#. i18n: ectx: property (text), widget (QCheckBox, wikipediaIntroOnly)
@@ -4069,25 +4133,22 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "Csak az alapvető Wikipédia-szöveg mutatása"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> a Cantata nem jeleníti meg a teljes Wikipédia "
-"oldalakat (képekkel, hivatkozásokkal stb.) hanem csökkentett verzióját. A "
-"csökkentett változat nem mindig 100%-osan pontos, mivel a Cantata alapból az "
-"egyes cikkeknek csak a felvezetőt jeleníti meg. Ha a teljes cikk "
-"megjelenítését választod, beolvasási hibák léphetnek fel. Emellett el kell "
-"távolítanod a pillanatnyilag cache-ba tárolt cikkeket (a 'Cache' lap "
-"használatával).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
+"A Cantata a wikipédia oldalainak csökkentett változatát mutatja (képek, "
+"linkek stb. nélkül). Ez a vágás nem mindig 100%-ig pontos, mivel a Cantata "
+"alapból csak a bevezetőt mutatja. Ha a teljes cikk megjelenítését választod, "
+"akkor beolvasási gondok lehetnek. Emellett el kell távolítanod az összes (a "
+"'Cache' oldal használatával) beolvasott cikket."
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4144,24 +4205,21 @@ msgid "To copy:"
msgstr "Másolandó:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> Mopidy szerverhez kapcsolódva (kézi frissítés "
-"szükséges).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
+msgstr "Mopidy kiszolgálóhoz csatlakozott (kézi frissítés kell)."
#. i18n: file: devices/albumdetails.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
@@ -4171,13 +4229,13 @@ msgstr "Album részletei"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "Év:"
@@ -4242,172 +4300,171 @@ msgid "Never skip on read error"
msgstr "Olvasási hiba átlépése - soha"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-"<i><b>Megjegyzés:</b> Ezek a beállítások csak akkor érvényesek és "
-"szerkeszthetők, ha az eszköz csatlakozik.</i>"
+"Ezek a beállítások csak akkor érvényesek és szerkeszthetők, amikor az eszköz "
+"csatlakozott."
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "Név:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "Zenekönyvtár:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "Másolja az albumborítókat mint:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "Borító maximális mérete:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "Alaphangerő:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr "'Válogatás' munkakörnyezet:"
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "Zene automatikus keresése csatlakoztatáskor"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "Cache használata"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "Fájlnevek"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "Fájlnév-séma:"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "VFAT tároló"
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "Kizárólag ASCII-es karakterek használata"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "Szóközök cseréje aláhúzásra"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "A 'The' elvetése az előadók nevében"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr "A 'The' hozzáfűzése az előadói nevekhez."
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "Átkódolás"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4536,175 +4593,170 @@ msgid "The genre of the album."
msgstr "Az album műfaja."
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-"<i><b>Megjegyzés:</b> Ezek a beállítások csak akkor szerkeszthetők, ha az "
-"eszköz nincs csatlakoztatva.</i>"
+"Ezek a beállítások csak akkor szerkeszthetők, amikor az eszköz nem "
+"csatlakozik."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "Típus:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "Opciók"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "Port:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "Felhasználó:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "Kiszolgáló:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "Megosztás:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>Megjegyzés:</b> az itt megadott jelszó <b>nyíltan</b> kerül mentésre a "
-"Cantata beállító fájljába. Hogy a Cantata a megosztás eléréséhez jelszót "
-"kérjen, a jelszót állítsd '-'-re.</i>"
+"Az itt beírt jelszót <b>titkosítatlanul</b> tárolja a Cantata beállító "
+"fájljában. Ha a megosztás előtt akarod a jelszót bekéretni, akkor azt "
+"állítsd '-' -ra."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "Szolgáltatás neve:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "Könyvtár:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "Extra opciók:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>Megjegyzés:</b> az sshfs futási módja miatt, megfelelő ssh "
-"jelszóbekérő alkalmazás (ksshaskpass, ssh-askpass-gnome, stb.) kell jelszó "
-"beviteléhez.</i>"
+"Az sshfs működéséből eredően jelszó beviteléhez egy megfelelő ssh-askpass "
+"alkalamzás (ksshaskpass, ssh-askpass-gnome, stb.) szükséges."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>Megjegyzés:</b> ez a párbeszéd csak távoli eszközök csatlakozására "
-"(pl. Samba-n keresztül), vagy helyileg csatolt eszközök elérésére szolgál. "
-"Egyszerű, USB-n csatlakoztatott médialejátszókat a Cantata "
-"csatlakoztatásukkor automatikusan megjeleníti.</i>"
+"Ez a párbeszéd csak távoli (pl. Samba-n keresztül csatlakozott), vagy helyi "
+"csatolású eszközök, hozzáadásához és leválasztásához való. A szokáos, USB-n "
+"csatlakozott médialejátszókat a Cantata csatlakozáskor automatikusan "
+"megjeleníti."
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4724,39 +4776,51 @@ msgstr "A dinamikus szabályok neve"
msgid "Edit"
msgstr "Szerkesztés"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr "A következő besorolás közé eső számok:"
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr " - "
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "Szabályokról"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "Beleértve a következőknek megfelelő dalokat:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "Kizárva a következőknek megfelelő dalokat:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "Ehhez hasonló előadók:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "Album előadó:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "Évből:"
@@ -4768,173 +4832,171 @@ msgstr "Évből:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "Akármi"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "Évig"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "Pontos egyezés"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> csak azokhoz a címkékhez írj értéket, amelyekre "
-"keresni akarsz.</i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
+msgstr "Csak a keresni szándékozott címkeértékeket írd be."
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>Megjegyzés:</b> ha többféle műfajra akarsz keresni a karaktersort "
-"csillaggal zárd pl. 'rock*' megfelelője a 'Hard Rock' és a 'Rock and Roll' "
-"is. </i>"
+"Műfajokra érvénes, ha csillaggal zárod le, akkor az több műfajt is jelent. "
+"Pl. a 'rock*' lehet 'Hard Rock' és 'Rock and Roll' is."
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr "Helyi fájl hozzáadása."
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr "A letöltött borítók és előadók képeinek mentése a zenekönyvtárba."
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "Letöltött dalszövegek mentése a zenekönyvtárban"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "Letöltött hátterek mentése a a zenekönyvtárban"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> ha azt választod, hogy a Cantata a zenekönyvtárban "
-"tárolja a borítókat, dalszövegeket, vagy a háttereket, de nincs írási jogod "
-"a könyvtárhoz, akkor a Cantata a személyes cache könyvtáradat használja "
-"mentésre. </i>"
-
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
+msgid ""
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
+msgstr ""
+"Ha a Cantata-t választod borítók, szövegek, vagy hátterek zenekönyvtárban "
+"tárolására és nincs írási jogod arra, akkor a Cantata átirányítja a "
+"személyes cache könyvtáradba a mentést."
+
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
-"<i><b>Megjegyzés:</b>A Cantata csak a zenekönyvtár szerkezetén belül, "
-"legfeljebb 2 szint mélységig képes háttereket és előadói képeket menteni. "
-"(azaz 'Előadó/Album/szám')</i>"
+"A Cantata csak akkor képes háttereket és előadói képeket menteni, ha a "
+"zenekönyvtár legalább 2 szint mély (pl. 'Előadó/Album/Szám')"
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "Cantata első futása"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "Légy üdvözölve a Cantata-ban"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
-msgstr ""
-"<html><head/><body><p>A Cantata egy sokoldalú, felhasználóbarát alkalmazás "
-"Music Player Daemon (MPD) részére. Az MPD zene lejátszására alkalmas "
-"háttéralkalmazás. </p><p>Az MPD-vel kapcsolatos további információkért "
-"fordulj az MPD honlapjához <a href=\"http://www.musicpd.org\">span style=\" "
-"text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></"
-"a></p><p> Ez a varázsló átvezet a Cantata megfelelő működéséhez szükséges "
-"alapbeállításokon.<</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
+msgstr ""
+"<html><head/><body><p>Cantata zenelejátszó kiszolgálóhoz (MPD) való, sokrétű "
+"és felhasználóbarát. Az MPD rugalmas, nagy tudású kiszolgáló oldali "
+"zenelejátszó alkalmazás.</p><p>Az MPD-ről további információk az MPD "
+"honlapján <a href=\"http://www.musicpd.org\"><span style=\" text-decoration: "
+"underline; color:#0000ff;\">http://www.musicpd.org</span></a></p><p>Ez a "
+"varázs végigvezet a Cantata megfelelő működéséhez szükséges "
+"alapbeállításokon.</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr "<html><head/><body><p>Légy üdvözölve a Cantata-ban.</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
-"<html><head/><body><p>A Cantata egy funkciókban gazdag és felhasználóbarát "
-"kliens Music Player Daemon (MPD) számára. Az MPD egy zenék lejátszására "
-"alkalmas háttéralkalmazás. Az MPD akár rendszerszinten, vagy felhasználói "
-"alapon indítható. Kérem, válaszd ki, hogy a Cantata miként csatlakozzon az "
-"MPD-hez induláskor (vagy rendszer indításkor):</p></body></html>"
+"<html><head/><body><pCantata zenelejátszó kiszolgálóhoz (MPD) való, sokrétű "
+"és felhasználóbarát. Az MPD rugalmas, nagy tudású kiszolgáló oldali "
+"zenelejátszó alkalmazás. Az MPD indítható akár rendszerszinten, akár "
+"felhasználónként is. Válaszd ki, hogyan akarod a Cantata-t alapvetően "
+"csatlakoztatni az MPD-hez (vagy indítani):</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "Szabványos többfelhasználós, vagy szerver beállítások."
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4950,13 +5012,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "Egyfelhasználós alapbeállítások"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4966,7 +5028,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4982,13 +5044,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "Gyűjtemény részletei"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -4996,67 +5058,65 @@ msgstr ""
"Az alábbiak a Cantata által megkívánt alapvető beállítások. Kérlek add meg a "
"megfelelő adatokat és a 'Csatlakozás' gombbal ellenőrizd a kapcsolatot."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "Host (vagy helyi csatlakozó):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-"<i><b>Megjegyzés:</b> a 'Zenekönyvtár' beállításait borítóképek, dalszövegek "
-"stb. keresésére használja. Haz MPD-d távoli kiszolgálón van, akkor ez HTTP "
-"URL-re állítható.</i>"
+"A 'Zenekönyvtár' beállítása borítók, dalszövegek stb. kereséséhez kell. Ha "
+"az MPD példányod távoli kiszolgálón van, ezt HTTP-címre is állítható."
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>Megjegyzés:</b> helyi csatlakozó használatakor a csatlakozó teljes, "
-"abszolút elérési útvonalát kell beállítani. (Portszám nem kell.)</i>"
+"Ha helyi csatolást használsz, akkor a teljes és közvetlen útvonal beállítása "
+"szükséges. (A port-szám nem kell.)"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "Zenekönyvtár"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "Válaszd ki a zenegyűjteményedet tartalmazó könyvtárat."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "Borítók, dalszövegek és hangfolyamok"
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -5068,61 +5128,37 @@ msgstr ""
"fájlokat a zenekönyvtárban, vagy a személyes cache, vagy config könyvtáradba "
"mentse.</p>"
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> ha azt választod, hogy a Cantata tárolja a borítókat, "
-"vagy dalszövegeket a zenekönyvtárban és nincs írási jogod ahhoz a "
-"könyvtárhoz, akkor a Cantata visszalép a személyes könyvtáradba a fájlok "
-"mentésére. Ugyanakkor a hangfolyamoknál, ha nincs írási jogod, akkor a "
-"zenekönyvtárban csak láthatod (és lejátszhatod) a stream-eket, de nem "
-"adhatsz hozzá (vagy szerkeszthetsz) stream-et. Ha úgy állítod be, hogy a "
-"stream-eket ne mentse a zenekönyvtárba, akkor ezeket a helyi beállítások "
-"szerinti könyvtárba menti - és csak te érheted el.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
-msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-"<i><b>Megjegyzés:</b>A Cantata csak a zenekönyvtár szerkezetén belül, "
-"legfeljebb 2 szint mélységig képes háttereket és előadói képeket menteni, "
-"azaz 'Előadó/Album/szám'.</i>"
+"A Cantata csak akkor képes háttereket és előadói képeket menteni, ha a "
+"zenekönyvtár legalább 2 szint mély (pl. 'Előadó/Album/Szám')"
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-"<i><b>Megjegyzés:</b>A 'Zenekönyvtár' HTTP címre mutat, miközben a Cantata "
-"pillanatnyilag nem tud fájlokat feltölteni külső HTTP szerverekre. Ezért a "
-"fenti beállítások maradjanak kijelöletlenül.</i>"
+"A 'Zenekönyvtár' HTTP-címre mutat és a Cantata aktuálisan nem képes "
+"feltölteni fájlokat a külső HTTP szerverre. Ezért a fenti beállításokat "
+"kijelöletlenül kell hagyni. "
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "Befejezve!"
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
@@ -5132,9 +5168,24 @@ msgstr ""
"párbeszéde használható a Cantata megjelenésének testreszabására csakúgy, "
"mint extra MPD hostok stb. hozzáadására."
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+"A Cantata a számokat albumba rendezi az 'AlbumElőadó' címke alapján, ha van, "
+"ellenkező esetben az 'Előadó' címkét használja. Ha az album válogatás, akkor "
+"az 'AlbumElőadó' a működéshez a címkét a csoportosításhoz <b>be kell</b> "
+"állítani. A 'Válogatás' használata javasolt ez esetben. "
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5150,271 +5201,301 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "Oldalsáv"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr "Nézetek"
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr "Az aktív nézetek beállítására használd a lenti jelölő gombokat."
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-"<i><b>Megjegyzés:</b>Alapbeállításban a lejátszási sor a többi nézet mellett "
-"jelenik meg. Ha a fenti opciót engedélyezed, akkor a többi nézethez "
-"hasonlóan bekerül az oldalsávba.</i>"
+"Alapesetben a többi nézet mellett a lejátszási sor jelenik meg, az "
+"információs nézet az eszközsoron található ikon aktiválásával érhető el. A "
+"megfelelő opció kijelölésével a nézet, miként a többi nézet, ez is az "
+"oldalsávba kerül."
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> Alapbeállításban az 'Infó'-nézet (aktuális szám "
-"információi) a fő eszközsávon lévő ikon lenyomása után válik elérhetővé. Ha "
-"az opciót aktiválod, akkor a többi nézethez hasonlóan belekerül az "
-"oldalsávba.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Stílus:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "Pozíció:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "Csak ikonok mutatása, szöveg nélkül"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "Fekete-fehér ikonok alkalmazása"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "Automatikus elrejtés"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "Borítók:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "Mutassa a művész képeit"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr "Albumok rendezése év szerint"
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> amikor előadó képét keresi, a Cantata előadó.jpg,-t, "
-"'Előadó'.jpg-t, vagy 'Előadó.png',-t keres \n"
-"a jelenlegi szám könyvtárában, vagy annak szülő könyvtárában. Ha nem talál "
-"képet, a Cantata megpróbál letölteni egyet.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "Mutassa a művész képeit"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "Albumok rendezése:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr "Válogatás:"
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "Induláskor az albumok becsukása"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "Egyéb nézetek"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "Könyvtárnézet stílusa"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr "Könyvtárak:"
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "Hangfolyam-nézet stílusa:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr "Adatfolyamok (stream):"
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "Online-nézet stílusa:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr "Online:"
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "Eszköznézet stílusa:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Eszközök:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr "Keresési nézet stílusa:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Keresés:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "Aktuális album automatikus megnyitása"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "Aktuális számhoz görgetés"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr "Törlés előtt jelezzen"
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr "Önálló művelet (és billentyűparancs) a lejátszási sor kereséséhez"
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "Aktuális album borítója"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr "Eszközsáv"
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr "A stop gomb mutatása"
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr "Az aktuális szám borítójának megjelenítése"
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr "A szám értékelésének megjelenítése"
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "Külső"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "A számok váltáskor legyen felugró üzenet"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr "Ikon megjelenítése az értesítési területen"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Bezáráskor az értesítési területre csukja össze"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr "Elinduláskor"
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr "A fő menüt mutassa"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr "A fő ablak elrejtése"
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr "Az előző állapot helyreállítása"
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "Általános:"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr "Az egy számos lemezeket a 'Vegyes előadók/Egyedüli számok'"
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr "Az egyszámos albumokat csoportosítsa"
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
"Használd a 'Zeneszerző' címkét és ne az 'Eladó', vagy 'Album Előadó' címkét "
"az albumok csoportosítására."
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr "Albumok csoportosítása zeneszerző szerint"
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5428,39 +5509,33 @@ msgstr ""
"műfaja lett 'Metal'-ként jelölve, akkor csak ezt az 5-öt adja hozzá, ha a "
"nézetben a szűrő 'Metal'."
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr "Csak a szűrőn átjutott dalok esetén lépjen"
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr "A hiányzó borítók letöltése a Last.fm-ről"
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr "Méretarányos borítók cache-be"
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr "Törlési művelet megjelenítése a helyi menükben"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
-msgstr "Elemek egy-kattintásos aktiválását alkalmazza"
+msgstr "Egykattintásos elemaktiválás alkalmazása"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5468,170 +5543,176 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-"<p>Ez az alábbiak szerint változtatja meg a Cantata felületét:\n"
-"<ul><li>a lejátszó és vezérlő gombok 33%-kal szélesebbek lesznek</li><li>a "
-"nézet 'kattintható' lesz</li><li>elemek húzásához 'érinteni' kell a bal "
-"felső sarkát</li><li>a görgetősávok csak néhány pontnyi szélesek lesznek</"
-"li><li>a műveletek (p. 'Hozzáadás a lejátszási sorhoz') mindig láthatók (nem "
-"csak az egérmutató által érintett)</li><li>a forgató gomboknak a szövegmező "
-"oldalánál + és - gombjai lesznek </li></ul></p>"
+"<p>Ez a Cantata megjelenését az alábbiak szerint megváltoztatja:\n"
+"<ul><li>a Lejátszás és szabályozó gombok 33%-kal szélesebbek</li><li>a "
+"nézetek 'válthatóak'</li><li>elemek vonszolásához a bal felső sarok "
+"'érintése' szükséges</li><li>a görgetősáv csak pár pixel széles</li><li>a "
+"műveletek (pl.. 'Lejátszási sorhoz fűz') mindig látható (nem csak ha az "
+"egérmutató rajta van)</li><li>a tekerés gomboknál a felirat mellett + és - "
+"jelek</li></ul></p>"
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
-msgstr "A felületet alakítsd sokkal érintésbarátra"
+msgstr "A felületet alakítsd sokkal érintésbarátabbra"
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
-msgstr "Mutassa a stop gombot az eszközsávban"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr "Dalinformációk-tipp megjelenítése"
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
-msgstr "Mutassa az aktuális szám borítóját azeszközsávban"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr "Retina megjelenítők támogatása"
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "Nyelv:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
msgstr ""
-"<i><b>Megjegyzés:</b> az 'Elemek egy-kattintásos aktiválása' "
-"engedélyezésekor a Cantata újraindítása szükséges.</i>"
+"A 'Egykattintásos elemaktiválás alkalmazása' beállítása a Cantata "
+"újraindítását igényli."
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr "A nyelvi beállítások változtatása a Cantata újraindítását igényli."
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Megjegyzés:</b>a nyelvi beállítások változtatása esetén a Cantata "
-"újraindítása szükséges.</i>"
+"Az 'Érintésbarát' beállítás változtatása a Cantata újraindítását igényli."
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Megjegyzés:</b> a kinézet 'érintésbarát' beállításaihoz Cantata-t újra "
-"kell indítani.</i>"
+"A retina megjelenítő-támogatás bekapcsolása a retina képernyőkön élesebb "
+"ikonokat eredményez, de a nem retina képernyőkön az ikonok elmosódottabbak "
+"lehetnek. A változtatás a Cantata újraindítását igényli."
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[Dinamikus]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr "Kilépés a teljes képernyőből"
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "Megálláskor lekeverés:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Kilépéskor a lejátszás megállítása"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr "Lejátszás közbeni felfüggesztés megakadályozás"
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>Megjegyzés:</b> ha a Stop gombotlenyomod és tartod, megjelenik a menü, "
-"lehetővé téve, hogy válassz, azonnal megállítod a lejátszást, vagy az "
-"aktuális szám után.</i>"
+"A Stop gomb lenyomása és tartása hatására menüben válaszható ki, hogy a "
+"leállás azonnali, vagy az aktuális szám után legyen. (A stop gomb a "
+"Megjelenés/Eszközsáv résznél aktiválható.)"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "Kimenet"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "Átúsztatás a számok között"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr "s"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "Lejátszási szint:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "A lejátszási szintről"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr "Az aktív kimenet beállítására használd az lenti kijelölő gombokat."
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "Gyűjtemény:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "Borító fájlneve:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5645,155 +5726,156 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "HTTP hangfolyam URL:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>Megjegyzés:</b> a 'Zenekönyvtár' beállításait használja borítóképek "
-"keresésére (akár a fenti érték lett beállítva, vagy <code>borító.jpg / "
-"borító.png</code> ha nincs beállítva). Ha az adott könyvtárra (és "
-"alkönyvtáraira) írási jogod van, akkor a Cantata a letöltött borítókat a "
-"megfelelő album könyvtárába lementi.</i>"
+"A 'Zenekönyvtár' beállítása borítók keresésére való (akár előbbiekben "
+"meghatározott értékre, vagy <code>cover.jpg / cover.png</code>, ha nincs "
+"beállítva). Ha a könyvtárra és alkönyvtáraira írási jogod van, akkor a "
+"Cantata a letöltött borítókat az albumnak megfelelő könyvtárba menti."
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-"<i><b>Megjegyzés:</b> a HTTP stream URL-je akkor kerül alkalmazásra, ha az "
-"MPD kimenete a beállítások szerint HTTP stream-re megy, és szeretnéd, hogy a "
-"Cantata képes legyen azt a stream-et lejátszani.</i>"
+"A 'HTTP adatfolyam URL' csak HTTP kimenetére beállított MPD esetén "
+"használatos, és ha szeretnéd a Cantata-t, hogy képes legyen az adatfolyam "
+"lejátszására. "
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>Megjegyzés:</b> Ha 'Zenekönyvtár' beállításait változtatod, akkor "
-"kézzel kell frissítened a zenei adatbázist. Végrehajtható 'Előadó-', vagy "
-"'Albumnézetben' az 'Adatbázis frissítése' gomb lenyomásával.</i>"
+"Ha a 'Zenekönyvtár' beállítását megváltoztatod, akkor a zenei adatbázist "
+"kézzel kell frissíteni. Ez 'Előadó'-, vagy 'Album'-nézetben a "
+"'Adatbázisfrissítés' gomb lenyomásával érhető el."
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
-"<i><b>Megjegyzés:</b> Ha a 'Borító fájlneve' nincs meghatározva, akkor a "
-"Cantata a <code>borító</code> alapbeállítást használja</i>"
+"Ha a 'Borító fájlneve' nincs meghatározva, akkor a Cantata egy "
+"alapbeállított <code>cover</code>-t használ."
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "Hálózati interfész:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
-msgstr ""
-"<i><b>Megjegyzés:</b> az MPD általában csak a könyvtáraiban tárolt dalokat "
-"játssza le. A Cantata rendelkezik egy alap HTTP szerverrel, ami használható "
-"az MPD más fájlokkal való kiszolgálására. Azonban ez csak akkor működik, "
-"amikor a Cantata fut.<br/><br/>\n"
-"<b>Megjegyzés:</b> ha a hálózati interfésznek a 'helyi visszacsatolást' "
-"választod, akkor az MPD-nek is ezen a gépen <b>kell </b>lennie.</i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+"Alapesetben az MPD csak a könyvtáraiban tárolt dalokat játsza le. A Cantata "
+"rendelkezik egy minimális HTTP kiszolgálóval, ami képes az MPD-t más "
+"fájlokkal ellátni. Ugyanakkor ez csak akkor működik, ha a Cantata fut."
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
+"Ha a 'Hálózati interfész'-nek a 'Helyi visszacsatolást' választod, akkor az "
+"MPD-nek is azon a számítógépen <b>kell lennie</b>"
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "Mód:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "HTTP Proxy"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "SOCKS Proxy"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr ""
"Az aktív szolgáltatások beállítására használd az lenti kijelölő gombokat."
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr "Karcolás használata:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "Státusz:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "Bejelentkezés"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr "Karcolás-számok"
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr "Mutassa a 'Tetszik' gombot"
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5807,143 +5889,158 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "Prémium fiók"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "Stream típusa:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "Munkamenet lejárta:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-"<i><b>Megjegyzés:</b> a beállítások ezekre érvényesek: Digitally Imported, "
-"JazzRadio.com, RockRadio.com és Sky.fm.</i>"
+"Ezek a beállítások a Digitally Imported, JazzRadio.com, RockRadio.com, és "
+"Sky.fm-re érvényesek."
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
-"<i><b>Megjegyzés:</b> ha beírod a fiók adatait, akkor egy 'DI' állapotjelző "
-"megjelenik a stream-ek listája alatt jelezvén, hogy be vagy-e jelentkezve, "
-"vagy sem.</i>"
+"Ha felhasználói adatokat megadod, akkor a 'DI' státusz az adatfolyam-lista "
+"alatt megjelenik. Ez mutatja, hogy be vagy-e, vagy sem jelentkezve."
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
"Az aktív szolgáltatók beállítására használd az lenti kijelölő gombokat."
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr "Szolgáltató beállítása"
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr "Telepítés"
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
-"<i><b>Megjegyzés:</b> a dőlt betűsek beépített beállítások, és nem lehet "
-"eltávolítani őket.</i>"
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "Keresés:"
+"Az előre meghatározott kategóriák dőlttel szedettek és nem távolíthatóak el."
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "Billentyűparancs a kiválasztott művelethez"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "Alapbeállítás:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "Egyéni:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "Album előadója:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "Szám sorszáma:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "Lemez száma:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr "Besorolás (minősítés):"
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr "<i>(Vegyes)</i>"
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
+msgid ""
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+"Több műfaj esetén, azokat pontosvesszővel kell elválasztani (pl. 'Rock;Hard "
+"Rock')"
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
-"<i><b>Megjegzés: </b> a többes műfaji megjelöléseket pontosvesszővel kell "
-"elválasztani (p. 'Rock;Hard Rock')</i>"
+"A besorolást (minősítést) külső adatbázis tárolja és <b>nem</b> dal fájlja."
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "Eredeti név"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "Új név"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr "A besorolások elvesznek, ha a fájlt átnevezed."
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Török Árpád"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "torar at freemail.hu"
@@ -5994,7 +6091,7 @@ msgstr "Számok átnézését felfüggeszted?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "Megszakít"
@@ -6004,11 +6101,11 @@ msgstr "A beállított címkék beolvasását beszakítod?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"Az <b>összes</b> számot átnézzem?<br><br><i>Megjegyzés: minden szám "
-"rendelkezik lejátszási szint címkével.</i>"
+"Az <b>összes</b> számot átnézi?<br/><br/><i>Minden szám rendelkezik "
+"Lejátszási Szint jelölővel.</i>"
#: replaygain/rgdialog.cpp:263
msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
@@ -6030,17 +6127,17 @@ msgstr "Számok átnézése..."
msgid "Reading existing tags..."
msgstr "Létező címkék beolvasása..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr "%1 (Hibás címkék?)"
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "A következő számok címkéit nem sikerült frissíteni:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "Az eszköz nem csatlakozik."
@@ -6064,63 +6161,63 @@ msgstr "Eredeti: %1 dB"
msgid "Original: %1"
msgstr "Eredeti: %1"
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "A kiválasztott számokat eltávolítsam a listából?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "Számok eltávolítása"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr "Érvénytelen szolgáltatás"
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr "Érvénytelen eljárás"
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr "Az azonosítás sikeretlen"
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr "Érvénytlen formátum"
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr "Érvénytelen paraméterek"
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr "Érvénytlen forrásmeghatározás"
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr "Sikertelen művelet"
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr "Érvénytelen munkamenet-kulcs"
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr "Érvénytelen API-kulcs"
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr "Szolgáltatás offline"
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr "A last.fm pillanatnyilag foglalt, próbáld meg néhány perc múlva."
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr "A díjhatárt átlépted"
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr "%1 hiba: %2"
@@ -6132,33 +6229,33 @@ msgstr "%1: aktuális szám tetszett"
msgid "%1: Love Current Track"
msgstr "%1: az aktuális szám tetszik"
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr "%1 (MPD-n keresztül)"
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-"<i><b>Megjegyzés:</b> ha '(MPD-n keresztüli)'-ként jelölt karcolást (mint a "
-"%1) alkalmazol, akkor annak már futnia kell. A Cantata csak így tudja "
-"'Tetszik'-kel jelölni a számokat és nem képes ki-, illetve bekapcsolni a "
-"karcolást.</i>"
+"Amennyiben olyan zenefeljegyzést használsz, mint '(MPD-n keresztül)' (mint "
+"%1), akkor ennek már megnyitottnak ls futónak kell lennie. A Cantata csak "
+"ezen keresztül tudja 'kedvelni' a számokat és nem kapcsolható ki, vagy be a "
+"zenefeljegyzés."
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr "Azonosítás..."
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr "Azonosítva"
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6166,7 +6263,7 @@ msgstr "Nincs azonosítva"
#: scrobbling/scrobblingstatus.cpp:44
msgid "%1: Scrobble Tracks"
-msgstr "%1: számok karcolása"
+msgstr "%1: számok feljegyzése"
#: streams/digitallyimportedsettings.cpp:36
msgid "Digitally Imported Settings"
@@ -6188,27 +6285,27 @@ msgstr "AAC 128k"
msgid "Logout"
msgstr "Kijelentkezés"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "URL:"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "Csak fűzd a lejátszási sorhoz, ne mentsd"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Fűzd a lejátszási sorhoz és mentsd a kedvencek közé"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "Stream hozzáadása"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "Stream szerkesztése"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>Hiba:</b> érvénytelen protokoll</i>"
@@ -6253,39 +6350,39 @@ msgid "Installing/updating %1"
msgstr "Telepítés, frissítés %1"
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
-msgstr "Nem sikerült telepíteni <b>%1</b>"
+msgid "Failed to install '%1'"
+msgstr "A(z) '%1' telepítése sikertelen"
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
-msgstr "Nem sikerült letölteni <b>%1</b>"
+msgid "Failed to download '%1'"
+msgstr "A(z) '%1' letöltése sikertelen"
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
-msgstr "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr "A kiválasztott adatfolyam-szolgáltatókat telepíti, vagy frissíti?"
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
-msgstr "Telepíted a következőt?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr "A kiválasztott adatfolyam-szolgáltatókat telepíti?"
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
-msgstr "Frissíted a következőt?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr "A kiválasztott adatfolyam-szolgáltatókat frissíti?"
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr "Telepít, frissít"
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr "Telepítés, frissítés megszakítása?"
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr "Letöltés %1"
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr "Az összes frissíthető szolgáltató frissítése"
@@ -6301,192 +6398,198 @@ msgstr "Kedvenc stream-ek exportálása"
msgid "Add New Stream To Favorites"
msgstr "Új stream hozzáadása a kedvencekhez"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Digitally Imported"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|XML Stream-ek"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "Stream-ek importálása"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "XML stream-ek (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|XML Stream-ek"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "Stream-ek exportálása"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr "XML adatfolyamok (*.xml.gz)"
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "Létrehozás sikertelen <b>%1</b>!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr "A(z) '%1'-t nem sikerült létrehozni!"
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "Létező stream!<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr "A(z) '%1' adatfolyam már létezik!"
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "A nevezett stream <b>%1</b> már létezik!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr "A(z) '%1' nevű adatfolyam már létezik!"
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "Könyvjelző hozzáadva"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "Már van könyvjelzője"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Már szerepel a kedvencek között"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "<b>%1</b> stream-ek újratöltése?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr "A(z) '%1' adatfolyamot újratölti?"
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "Biztosan eltávolítanád a könyvjelzőjét ennek: <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr "Biztosan eltávolítaná a(z) '%1' könyvjelzőjét?"
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "Biztosan eltávolítanád az összes <b>%1</b> könyvjelzőt?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr "Biztosan eltávolítaná az összes '%1' könyvjelzőt?"
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "Biztosan eltávolítanád a kiválasztott %1 stream-eket?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "Biztosan eltávolítanád ezt <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "Biztosan eltávolítaná a(z) '%1'-t?"
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "Keresés %1:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "%1 hozzáadva a kedvencekhez"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr "Fájlból..."
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr "Letöltve..."
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.streams|Cantata hangfolyamok"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr "Stream-ek telelpítése"
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "Cantata stream-ek (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Már van <b>%1</b> nevű lejátszási lista!<br/>Felülírjam?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"A(z) '%1' nevű kategória már létezik!\n"
+"\n"
+"Felülírja?"
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
-msgstr "Nem sikerült megnyitni a csomagfájlt"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
+msgstr "A csomagfájl megnyitása sikertelen."
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr "Érvénytelen fájlformátum!"
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr "Nem sikerült létrehozni a steram-kategória könyvtárát!<br/>%1"
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr "Nem sikerült menteni a stream-ek litáját!"
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr "Nem sikerült eltávolítani a stream-ek könyvtárát"
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "&Ok"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "Elvet"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "Igen"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "&Nem"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "Visszavon"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "Ment"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "&Alkalmaz"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "Bezár"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "Felülír"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "&Reset"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "Folytat"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "Töröl"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "Állj"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "Eltávolít"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "Előző"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "Következő"
@@ -6498,14 +6601,32 @@ msgstr "Jelszó"
msgid "Please enter password:"
msgstr "Kérem a jelszót:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr "Bezár"
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "Figyelem"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "Kérdés"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr "Ablak"
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr "Minimalizál"
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr "Zoom"
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "Könyvtárválasztás"
@@ -6514,59 +6635,97 @@ msgstr "Könyvtárválasztás"
msgid "Select File"
msgstr "Fájl-választás"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 kB"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MB"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 GB"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "1 nap %2"
msgstr[1] "%1 napok %2"
-#: tags/tageditor.cpp:180
-msgid "Set 'Album Artist' from 'Artist'"
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Címkék"
+
+#: tags/tageditor.cpp:202
+msgid "Set 'Album Artist' from 'Artist'"
msgstr "'Album Előadó' beállítása 'Előadó'-ból"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr "A besorolás olvasása fájlból"
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr "Besorolás kiírása fájlba"
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "Minden szám"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
"\"Válogatott előadók\" munkakörnyezet alkalmazása az <b>összes</b> számra?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>Ez a \"Album előadót\" és \"Előadót\" \"Vegyes előadók\"-ra állítja, és a "
+"\"Címet\" \"Előadó Szám - Szám címe\"</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
"Visszaállítod a \"Vegyes előadók\" munkakörnyezetet az <b>összes</b> számra? "
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "Visszaállítja a \"Vegyes előadók\" munkakörnyezetet"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>Ahol az \"Album előadó\" megegyezik az \"Előadó és a Címmel, illetve "
+"\"Cím\" \"SzámElőadó -SzámCím\" formátumú, az Előadót a \"Cím\"-ből veszi és "
+"a \"Cím\" maga egyszerűen a cím lesz, pl. <br/><br/>ha a \"Cím\" \"Wibble - "
+"Wobble\", akkor az \"Előadó\" egyszerűen \"Wibble\", a \"Cím\" pedig \"Wobble"
+"\" lesz.</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6574,73 +6733,163 @@ msgstr ""
"'Album Előadó'-t állítasz az 'Előadó' helyett (ha az 'Album Előadó' üres) "
"<b>az összes</b> számnál?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr ""
"Beállítod 'Album előadót' az 'Előadó' helyett (ha az 'Album Előadó' üres)?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "Album Előadó-ról Előadóra"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"A 'Cím', 'Előadó', 'Album előadó' és 'Album' első betűjének nagyra váltása "
-"az <b>összes</b> számnál?"
+"Nagybetűsítse a (pl. 'Cím', 'Előadó, 'Előadó' stb.) első betűjét az "
+"<b>összes</b> számnak?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+"Nagybetűsítse a szövegmező (pl. 'Cím', 'Előadó, 'Előadó' stb.) első betűjét?"
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "Az összes szám sorszámának módosítása ennyivel:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr "Az összes szám besorolásának kiolvasása a zenei fájlból? "
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr "A besorolás kiolvasása a zenei fájlból?"
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr "Besorolások"
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr "Besorolások olvasása"
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr "Besorolások olvasása"
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr "A következő fájlok besorolás kiolvasva és frissítve:"
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr "Nem minden dal besorolását olvasta ki az MPD-ről!"
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+"A dalok besorolása nem a dalfájlokban, hanem az MPD-hez 'ragasztott' "
+"adatbázisban vannak. Hogy ezek az adott fájlban kerüljenek, a Cantata-nak "
+"előbb ki kell olvasni azokat.az MPD-ből."
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr "A dalbesorolást az MPD-ből nem olvasta be!"
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr "Az összes szám besorolását az zenei fájlokba írja?"
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr "A besorolást a zenefájlba írja?"
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr "A besorolások kiírása"
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr "A besorolások kiírása"
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr "A következő számok besorolását nem tudtam kiírni?"
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr "Nem tudtam kiírni a besorolást a zenefájlba!"
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "Minden szám [módosítva]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [módosítva]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr "Átnevezed a dalok fájljait is, hogy egyezzenek a címkéiddel?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "Fájlok átnevezése"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "Fájlátnevezés megszakítása?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "Forrásfájl nem létezik!<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr "A forrás nem létezik!"
+
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr "A célfájl már létezik!"
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "A célfájl már létezik! <br/>"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr "Nem sikerült létrehozni a célkönyvtárat!"
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "Nem sikerült létrehozni a könyvtárat!<br/>%1"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr "'%1'-t nem sikerült átnevezni '%2'-re"
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "Nem sikerült %1 átnevezése %2-re"
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+"A dalok besorolása nem a dalfájlokban, hanem az MPD-hez 'ragasztott' "
+"adatbázisban van tárolva.\n"
+"\n"
+"Ha a fájlt (vagy a könyvtárat, amiben van) átnevezed, akkor a dalra "
+"vonatkozó besorolás elveszik."
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(Stream)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\">Zeneszerző:</td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr "<tr><td align=\"right\"><b>Előadó</b></td><td>%1</td></tr>"
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6658,7 +6907,7 @@ msgstr "Műfaj szerinti szűrés"
msgid "All Genres"
msgstr "Minden műfaj"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "Visszalépés"
@@ -6666,15 +6915,19 @@ msgstr "Visszalépés"
msgid "Menu"
msgstr "Menü"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr "<i><b>Megjegyzés:</b> %1</i>"
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "A lejátszási sorból töröl"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "Keresés..."
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "Keresősáv bezárása"
@@ -6688,22 +6941,27 @@ msgstr "<b>NEM VAGY</b> bejelentkezve a ide: %1"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
-"<p>Nem tudom elérni a dalok fájljait!<br/><br/>Ellenőrizd a Cantata "
-"\"Zenekönyvtárát\" és az MPD \"music_directory\" (zenekönyvtár) beállításait."
-"</p>"
+"A dalfájl nem érhető el!\n"
+"\n"
+"Kérem ellenőrizd a \"Zenekönyvtár\" beállítását és az MPD \"zenekönyvtárának"
+"\" beállítását."
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-"<p>Nem tudom elérni a dalok fájljait!<br/><br/>Ellenőrizd, hogy az eszköz "
-"csatlakozik-e még.</p>"
+"A dalfájlokat nem lehet elérni!!\n"
+"\n"
+"Kérem ellenőrizd, hogy az eszköz csatlakoztatva van-e még!"
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr "Oszlop igazítás az ablakhoz illeszkedéshez"
@@ -6839,6 +7097,785 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr "%1 számú frissítés érhető el"
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "A céleszközön nem maradt elegendő hely\n"
+#~ "A kiválasztott számnak %1 hely kell, de csak %2 maradt\n"
+#~ "A számot át kell kódolni kisebb fájlméretűre, hogy sikeresen másolni "
+#~ "lehessen."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "Nem maradt elegendő hely a célon.\n"
+#~ "A kiválasztott szám %1 helyet foglal, de csak %2 hely maradt."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>A céleszközt nem állítottad be.<br/>Folytatod az alapbeállításokkal?</"
+#~ "p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Nem állítottad be a forráseszközt.</br> Használjuk az "
+#~ "alapbeállításokat?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "A 'Cím', 'Előadó', 'Előadó lemez' és 'Lemez' kezdőbetűjét nagybetűsre "
+#~ "váltja"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>Milyen fajta frissítést szeretne végrehajtani?<ul><li>Részleges - Csak "
+#~ "új számokat keres <i>(gyors)</i></li><li>Teljes - Minden számot újrakeres "
+#~ "<i>(lassú)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Biztosan törölni akarod a kiválasztott dalokat?\n"
+#~ "Ezt nem lehet visszaállítani."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "Biztosan el akarod felejteni <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "Biztosan ki szeretnéd adni a hang CD-t <b>%1 - %2</b>"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "Biztosan le szeretnéd csatlakoztatni <b>%1</b>?"
+
+#~ msgid ""
+#~ "<p>The following variables will be replaced with their corresponding "
+#~ "meaning for each track name.</p>"
+#~ msgstr ""
+#~ "<p>A számok címeiben a következő változók, értelmüknek megfelelően "
+#~ "lecserélésre kerülnek."
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "A \"%1\" nevű távoli eszköz már létezik!\n"
+#~ "Kérem válassz más nevet"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Biztosan szeretnéd eltávolítani a kiválasztott szabályokat?\n"
+#~ "Ezt nem lehet visszavonni."
+
+#~ msgid ""
+#~ "<p>Cantata will query your library using all of the rules listed. The "
+#~ "list of <i>Include</i> rules will be used to build a set of songs that "
+#~ "can be used. The list of <i>Exclude</i> rules will be used to build a set "
+#~ "of songs that cannot be used. If there are no <i>Include</i> rules, "
+#~ "Cantata will assume that all songs (bar those from <i>Exclude</i>) can be "
+#~ "used. <br/>e.g. to have Cantata look for 'Rock songs by Wibble OR songs "
+#~ "by Various Artists', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> To have Cantata look for 'Songs by Wibble but not from "
+#~ "album Abc', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After the set of "
+#~ "usable songs has been created, Cantata will randomly select songs to keep "
+#~ "the play queue filled with 10 entries.</p>"
+#~ msgstr ""
+#~ "<p>A Cantata a felsorolt szabályok szerint végignézi a könyvtáradat. A "
+#~ "<i>Hozzávesz</i> szabályokat a szóba jöhető dalokból összeállítás "
+#~ "készítésére használja. A <i>Kizár</i> szabályokat fel nem használható "
+#~ "dalok összegyűjtésére használja. <i>Hozzávesz</i> szabályok hiányát, a "
+#~ "Cantata úgy értelmezi, hogy az összes dal (a <i>Kizár</i> kivételével) "
+#~ "felhasználható. <br/>pl. hogy a Cantata 'Wibble VAGY Válogatott előadók "
+#~ "rock dalokat gyűjtse', a következők kellenek: <ul><li>Hozzávesz "
+#~ "AlbumElőadó=Wibble Műfaj=Rock</li><li>Hozzávesz AlbumElőadó=Vegyes "
+#~ "előadók</li></ul>. Hogy a Cantata keresse a 'Wibble dalokat, de nem az "
+#~ "ABC albumból', a következők kellenek: <ul><li>Hozzávesz "
+#~ "AlbumElőadó=Wibble</li><li>Kizár Album=Abc</li></ul>. Ezután a "
+#~ "használható dalokból készül összeállítás. A Cantata véletlenszerűen "
+#~ "választ ki dalokat lejátszásra, hogy a lejátszó listában meglegyen a 10 "
+#~ "tétel.</p>"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "Ezen a néven '%1' már van szabályrendszer!\n"
+#~ "Felülírja?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>Innentől kezdve mindent töröl?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "Nem sikerült a borítót beállítani\n"
+#~ "Nem tudtam átmeneti fájlba tölteni!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "A borító beállítása sikertelen!\n"
+#~ "Nem tudtam másolatot készíteni!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "A borító beállítása sikertelen!\n"
+#~ "Nem tudtam menteni az eredetit!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "A borító beállítása sikertelen!\n"
+#~ "Nem tudtam másolni a fájlt ide '%1'!"
+
+#~ msgid "Medium"
+#~ msgstr "Közepes"
+
+#~ msgid "Extra Large"
+#~ msgstr "Nagyon nagy"
+
+#~ msgid "Icon/List"
+#~ msgstr "Ikon, vagy lista"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "Dal címkéjének szerkesztése"
+
+#~ msgid ""
+#~ "Podcasts are currently being downloaded\n"
+#~ "\n"
+#~ "Quiting now will abort all downloads."
+#~ msgstr ""
+#~ "Podcast-ok letöltése folyik\n"
+#~ "\n"
+#~ "A kilépés az összes letöltést megszakítja."
+
+#~ msgid "Abort downloads and quit"
+#~ msgstr "Letöltés megszakítása és kilépés"
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "A(z) <b>%1</b> használatban van a kedvenc adatfolyamok tárolására, kérem "
+#~ "válasszon másik nevet."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr ""
+#~ "A(z) <b>%1</b> lejátszási lista már létezik!<br/>Ahhoz a listához adjam "
+#~ "hozzá?"
+
+#~ msgid "Can only edit tags of songs within MPD's music collection."
+#~ msgstr "Csak az MPD zenetárában található dalok címkéi szerkeszthetők."
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>A Replay Gain (lejátszási szint) 2001-ben kiadott szabványosítási "
+#~ "javaslat, hogy az MP3 és Ogg Vorbis-hoz hasonló számítógépes hangok "
+#~ "lejátszási hangerejét normalizálja. Ez szám/album alapon működik, és "
+#~ "mostanra már a lejátszók nagy száma támogatja. </p><p>A következő "
+#~ "Lejátszási szint beállítások használhatók:<ul><li><i>Semmi</i> - Nincs "
+#~ "beállítva szint.</li><li><i>Szám</i> - A hangerőt a számok ReplayGain "
+#~ "címkéi alapján állítja be.</li><li><i>Album</i> - A hangerőt az albumok "
+#~ "ReplayGain címkéi alapján állítja be.</li><li><i>Automatikus</i> - A "
+#~ "lejátszás hangerejét, ha a véletlenszerű lejátszás aktív, akkor a számok "
+#~ "ReplayGain címkéi alapján állítja be, egyébként az album címkéjét "
+#~ "használja.</li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Biztosan eltávolítod a kijelölt lejátszási listát?\n"
+#~ "Nem vonható vissza."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "A(z) <b>%1</b> lejátszási lista létezik!<br/>Felülírjam?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "Milyen gyűjteménytípushoz akarsz csatlakozni? <br/><ul><li>Standard - "
+#~ "zenegyűjtemény már megosztva másik gépen, vagy már be van állítva </"
+#~ "li><li>Basic - zenegyűjtemény nincs megosztva más gépekkel, és a Cantata "
+#~ "állítja be és vezérli az MPD példányt.</li></ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "Törlöd <b>%1</b>?"
+
+#~ msgid "Multi-Media Keys"
+#~ msgstr "Multimédia-gombok"
+
+#~ msgid "Do not use media keys to control Cantata"
+#~ msgstr "Ne használd a média-gombokat a Cantata vezérlésére"
+
+#~ msgid "Use media keys to control Cantata"
+#~ msgstr "A médiagombok használata a Cantata vezérlésére"
+
+#~ msgid ""
+#~ "Use media keys, as configured in desktop settings, to control Cantata"
+#~ msgstr ""
+#~ "A médiagombok használata a Cantata vezérlésére asztalbeállítások szerint"
+
+#~ msgid ""
+#~ "Use media keys, as configured in GNOME/Unity settings, to control Cantata"
+#~ msgstr ""
+#~ "A médiagombok használata a Cantata vezérlésére a GNOME/Unity beállításai "
+#~ "szerint"
+
+#~ msgid "Add Albums In Random Order"
+#~ msgstr "Albumok hozzáadása véletlenszerű sorrendben."
+
+#~ msgid "Edit Tags"
+#~ msgstr "Címkék szerkesztése"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(Prioritás: %1)</b>"
+
+#~ msgid "Unsubscribe from <b>%1</b>?"
+#~ msgstr "Leiratkozik innen <b>%1</b>?"
+
+#~ msgid "Refresh episode listing from <b>%1</b>?"
+#~ msgstr "Frissíti a részek listáját innentől: <b>%1</b>?"
+
+#~ msgid "All selected podcasts have already been downloaded!"
+#~ msgstr "Az összes kiválasztott podcast-részt már letöltöttem!"
+
+#~ msgid "Do you wish to download the following podcast episode?"
+#~ msgstr "Letöltenéd a következő podcast részt?"
+
+#~ msgid "Do you wish to download the following podcast episodes?"
+#~ msgstr "Letöltenéd a következő podcast részeket?"
+
+#~ msgid "All selected downloaded podcast episodes have already been deleted!"
+#~ msgstr "Az összes kiválasztott podcast-részt már töröltem!"
+
+#~ msgid ""
+#~ "Do you wish to delete the downloaded file of the following podcast "
+#~ "episode?"
+#~ msgstr "Letörölnéd a következő podcast rész letöltött fájlját?"
+
+#~ msgid ""
+#~ "Do you wish to the delete downloaded files of the following podcast "
+#~ "episodes?"
+#~ msgstr "Letörölnéd a következő podcast részek letöltött fájljait?"
+
+#~ msgid "Automatically download new episodes"
+#~ msgstr "Új részek automatikus letöltése"
+
+#~ msgid ""
+#~ "Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
+#~ "all three."
+#~ msgstr ""
+#~ "Csak az 'Előadó', 'Album', vagy a 'Dalszöveg' megjelenítése még ha "
+#~ "elegendő hely lenne az összesre."
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a Cantata nem jeleníti meg a teljes Wikipédia "
+#~ "oldalakat (képekkel, hivatkozásokkal stb.) hanem csökkentett verzióját. A "
+#~ "csökkentett változat nem mindig 100%-osan pontos, mivel a Cantata alapból "
+#~ "az egyes cikkeknek csak a felvezetőt jeleníti meg. Ha a teljes cikk "
+#~ "megjelenítését választod, beolvasási hibák léphetnek fel. Emellett el "
+#~ "kell távolítanod a pillanatnyilag cache-ba tárolt cikkeket (a 'Cache' lap "
+#~ "használatával).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> Mopidy szerverhez kapcsolódva (kézi frissítés "
+#~ "szükséges).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> Ezek a beállítások csak akkor érvényesek és "
+#~ "szerkeszthetők, ha az eszköz csatlakozik.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "A 'The' elvetése az előadók nevében"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> Ezek a beállítások csak akkor szerkeszthetők, ha az "
+#~ "eszköz nincs csatlakoztatva.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> az itt megadott jelszó <b>nyíltan</b> kerül "
+#~ "mentésre a Cantata beállító fájljába. Hogy a Cantata a megosztás "
+#~ "eléréséhez jelszót kérjen, a jelszót állítsd '-'-re.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> az sshfs futási módja miatt, megfelelő ssh "
+#~ "jelszóbekérő alkalmazás (ksshaskpass, ssh-askpass-gnome, stb.) kell "
+#~ "jelszó beviteléhez.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ez a párbeszéd csak távoli eszközök csatlakozására "
+#~ "(pl. Samba-n keresztül), vagy helyileg csatolt eszközök elérésére "
+#~ "szolgál. Egyszerű, USB-n csatlakoztatott médialejátszókat a Cantata "
+#~ "csatlakoztatásukkor automatikusan megjeleníti.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> csak azokhoz a címkékhez írj értéket, amelyekre "
+#~ "keresni akarsz.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ha többféle műfajra akarsz keresni a karaktersort "
+#~ "csillaggal zárd pl. 'rock*' megfelelője a 'Hard Rock' és a 'Rock and "
+#~ "Roll' is. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
+#~ "backdrops, within the music folder, and you do not have write access to "
+#~ "this folder, then Cantata will revert to saving the files in your "
+#~ "personal cache folder.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ha azt választod, hogy a Cantata a zenekönyvtárban "
+#~ "tárolja a borítókat, dalszövegeket, vagy a háttereket, de nincs írási "
+#~ "jogod a könyvtárhoz, akkor a Cantata a személyes cache könyvtáradat "
+#~ "használja mentésre. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
+#~ "Tracks')</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b>A Cantata csak a zenekönyvtár szerkezetén belül, "
+#~ "legfeljebb 2 szint mélységig képes háttereket és előadói képeket menteni. "
+#~ "(azaz 'Előadó/Album/szám')</i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>A Cantata egy sokoldalú, felhasználóbarát "
+#~ "alkalmazás Music Player Daemon (MPD) részére. Az MPD zene lejátszására "
+#~ "alkalmas háttéralkalmazás. </p><p>Az MPD-vel kapcsolatos további "
+#~ "információkért fordulj az MPD honlapjához <a href=\"http://www.musicpd.org"
+#~ "\">span style=\" text-decoration: underline; color:#0000ff;\">http://www."
+#~ "musicpd.org</span></a></p><p> Ez a varázsló átvezet a Cantata megfelelő "
+#~ "működéséhez szükséges alapbeállításokon.<</p></body></html>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music. MPD may be started either system-wide, or on a per-"
+#~ "user basis. Please select how you would like to have Cantata initially "
+#~ "connect to (or startup) MPD:</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>A Cantata egy funkciókban gazdag és "
+#~ "felhasználóbarát kliens Music Player Daemon (MPD) számára. Az MPD egy "
+#~ "zenék lejátszására alkalmas háttéralkalmazás. Az MPD akár "
+#~ "rendszerszinten, vagy felhasználói alapon indítható. Kérem, válaszd ki, "
+#~ "hogy a Cantata miként csatlakozzon az MPD-hez induláskor (vagy rendszer "
+#~ "indításkor):</p></body></html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
+#~ "lyrics, etc. If you're MPD instance is on a remote host, you may set this "
+#~ "to a HTTP URL.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a 'Zenekönyvtár' beállításait borítóképek, "
+#~ "dalszövegek stb. keresésére használja. Haz MPD-d távoli kiszolgálón van, "
+#~ "akkor ez HTTP URL-re állítható.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> helyi csatlakozó használatakor a csatlakozó teljes, "
+#~ "abszolút elérési útvonalát kell beállítani. (Portszám nem kell.)</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, "
+#~ "within the music folder, and you do not have write access to this folder, "
+#~ "then Cantata will revert to saving the files in your personal cache "
+#~ "folder. However, for streams, if you do not have write access, then you "
+#~ "will only be able to view (and play) the streams stored in the music "
+#~ "folder, and not add (or edit) any streams. If you elect not to store "
+#~ "streams within the music folder, then these will be saved in your local "
+#~ "config folder - and will only be accessible to yourself.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ha azt választod, hogy a Cantata tárolja a "
+#~ "borítókat, vagy dalszövegeket a zenekönyvtárban és nincs írási jogod "
+#~ "ahhoz a könyvtárhoz, akkor a Cantata visszalép a személyes könyvtáradba a "
+#~ "fájlok mentésére. Ugyanakkor a hangfolyamoknál, ha nincs írási jogod, "
+#~ "akkor a zenekönyvtárban csak láthatod (és lejátszhatod) a stream-eket, de "
+#~ "nem adhatsz hozzá (vagy szerkeszthetsz) stream-et. Ha úgy állítod be, "
+#~ "hogy a stream-eket ne mentse a zenekönyvtárba, akkor ezeket a helyi "
+#~ "beállítások szerinti könyvtárba menti - és csak te érheted el.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/"
+#~ "Tracks'.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b>A Cantata csak a zenekönyvtár szerkezetén belül, "
+#~ "legfeljebb 2 szint mélységig képes háttereket és előadói képeket menteni, "
+#~ "azaz 'Előadó/Album/szám'.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
+#~ "currently cannot upload files to external HTTP servers. Therefore, the "
+#~ "above settings should be left un-checked.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b>A 'Zenekönyvtár' HTTP címre mutat, miközben a "
+#~ "Cantata pillanatnyilag nem tud fájlokat feltölteni külső HTTP "
+#~ "szerverekre. Ezért a fenti beállítások maradjanak kijelöletlenül.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the play queue appears to the side of the "
+#~ "other views. If you enable the option above, then it will be merged into "
+#~ "the sidebar as per other views.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b>Alapbeállításban a lejátszási sor a többi nézet "
+#~ "mellett jelenik meg. Ha a fenti opciót engedélyezed, akkor a többi "
+#~ "nézethez hasonlóan bekerül az oldalsávba.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
+#~ "accessible by pressing its icon in the main toolbar. If you enable the "
+#~ "option above, then it will be merged into the sidebar as per other views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> Alapbeállításban az 'Infó'-nézet (aktuális szám "
+#~ "információi) a fő eszközsávon lévő ikon lenyomása után válik elérhetővé. "
+#~ "Ha az opciót aktiválod, akkor a többi nézethez hasonlóan belekerül az "
+#~ "oldalsávba.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "Borítók:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> amikor előadó képét keresi, a Cantata előadó.jpg,-"
+#~ "t, 'Előadó'.jpg-t, vagy 'Előadó.png',-t keres \n"
+#~ "a jelenlegi szám könyvtárában, vagy annak szülő könyvtárában. Ha nem "
+#~ "talál képet, a Cantata megpróbál letölteni egyet.</i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "Albumok rendezése:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "Könyvtárnézet stílusa"
+
+#~ msgid "Streams view style:"
+#~ msgstr "Hangfolyam-nézet stílusa:"
+
+#~ msgid "Online view style:"
+#~ msgstr "Online-nézet stílusa:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "Eszköznézet stílusa:"
+
+#~ msgid "Search view style:"
+#~ msgstr "Keresési nézet stílusa:"
+
+#~ msgid "Cache scaled covers"
+#~ msgstr "Méretarányos borítók cache-be"
+
+#~ msgid ""
+#~ "<p>This will change Cantata's interface as detailed:\n"
+#~ "<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views "
+#~ "will be 'flickable'</li><li>To drag items, you will need to 'touch' the "
+#~ "top-left corner</li><li>Scrollbars will only be a few pixels wide</"
+#~ "li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not "
+#~ "just when item is under mouse)</li><li>Spin buttons with have + and - "
+#~ "buttons at the side of the text field</li></ul></p>"
+#~ msgstr ""
+#~ "<p>Ez az alábbiak szerint változtatja meg a Cantata felületét:\n"
+#~ "<ul><li>a lejátszó és vezérlő gombok 33%-kal szélesebbek lesznek</"
+#~ "li><li>a nézet 'kattintható' lesz</li><li>elemek húzásához 'érinteni' "
+#~ "kell a bal felső sarkát</li><li>a görgetősávok csak néhány pontnyi "
+#~ "szélesek lesznek</li><li>a műveletek (p. 'Hozzáadás a lejátszási sorhoz') "
+#~ "mindig láthatók (nem csak az egérmutató által érintett)</li><li>a forgató "
+#~ "gomboknak a szövegmező oldalánál + és - gombjai lesznek </li></ul></p>"
+
+#~ msgid "Show stop button in toolbar"
+#~ msgstr "Mutassa a stop gombot az eszközsávban"
+
+#~ msgid "Show cover of current track in toolbar"
+#~ msgstr "Mutassa az aktuális szám borítóját azeszközsávban"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> az 'Elemek egy-kattintásos aktiválása' "
+#~ "engedélyezésekor a Cantata újraindítása szükséges.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b>a nyelvi beállítások változtatása esetén a Cantata "
+#~ "újraindítása szükséges.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
+#~ "start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a kinézet 'érintésbarát' beállításaihoz Cantata-t "
+#~ "újra kell indítani.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ha a Stop gombotlenyomod és tartod, megjelenik a "
+#~ "menü, lehetővé téve, hogy válassz, azonnal megállítod a lejátszást, vagy "
+#~ "az aktuális szám után.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a 'Zenekönyvtár' beállításait használja borítóképek "
+#~ "keresésére (akár a fenti érték lett beállítva, vagy <code>borító.jpg / "
+#~ "borító.png</code> ha nincs beállítva). Ha az adott könyvtárra (és "
+#~ "alkönyvtáraira) írási jogod van, akkor a Cantata a letöltött borítókat a "
+#~ "megfelelő album könyvtárába lementi.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD "
+#~ "configured to output to a HTTP stream, and you wish Cantata to be able to "
+#~ "play that stream.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a HTTP stream URL-je akkor kerül alkalmazásra, ha "
+#~ "az MPD kimenete a beállítások szerint HTTP stream-re megy, és szeretnéd, "
+#~ "hogy a Cantata képes legyen azt a stream-et lejátszani.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> Ha 'Zenekönyvtár' beállításait változtatod, akkor "
+#~ "kézzel kell frissítened a zenei adatbázist. Végrehajtható 'Előadó-', vagy "
+#~ "'Albumnézetben' az 'Adatbázis frissítése' gomb lenyomásával.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> Ha a 'Borító fájlneve' nincs meghatározva, akkor a "
+#~ "Cantata a <code>borító</code> alapbeállítást használja</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> az MPD általában csak a könyvtáraiban tárolt "
+#~ "dalokat játssza le. A Cantata rendelkezik egy alap HTTP szerverrel, ami "
+#~ "használható az MPD más fájlokkal való kiszolgálására. Azonban ez csak "
+#~ "akkor működik, amikor a Cantata fut.<br/><br/>\n"
+#~ "<b>Megjegyzés:</b> ha a hálózati interfésznek a 'helyi visszacsatolást' "
+#~ "választod, akkor az MPD-nek is ezen a gépen <b>kell </b>lennie.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio."
+#~ "com, RockRadio.com, and Sky.fm</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a beállítások ezekre érvényesek: Digitally "
+#~ "Imported, JazzRadio.com, RockRadio.com és Sky.fm.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter account details, then a 'DI' status item "
+#~ "will appear under the list of streams. This will indicate if you are "
+#~ "logged in or not</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ha beírod a fiók adatait, akkor egy 'DI' "
+#~ "állapotjelző megjelenik a stream-ek listája alatt jelezvén, hogy be vagy-"
+#~ "e jelentkezve, vagy sem.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot "
+#~ "be removed.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> a dőlt betűsek beépített beállítások, és nem lehet "
+#~ "eltávolítani őket.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
+#~ "'Rock;Hard Rock')</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegzés: </b> a többes műfaji megjelöléseket pontosvesszővel kell "
+#~ "elválasztani (p. 'Rock;Hard Rock')</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "Az <b>összes</b> számot átnézzem?<br><br><i>Megjegyzés: minden szám "
+#~ "rendelkezik lejátszási szint címkével.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via "
+#~ "MPD)' (such as %1), then you will need to have this already started and "
+#~ "running. Cantata can only 'Love' tracks via this, and cannot enable/"
+#~ "disable scrobbling.</i>"
+#~ msgstr ""
+#~ "<i><b>Megjegyzés:</b> ha '(MPD-n keresztüli)'-ként jelölt karcolást (mint "
+#~ "a %1) alkalmazol, akkor annak már futnia kell. A Cantata csak így tudja "
+#~ "'Tetszik'-kel jelölni a számokat és nem képes ki-, illetve bekapcsolni a "
+#~ "karcolást.</i>"
+
+#~ msgid "Failed to install <b>%1</b>"
+#~ msgstr "Nem sikerült telepíteni <b>%1</b>"
+
+#~ msgid "Failed to download <b>%1</b>"
+#~ msgstr "Nem sikerült letölteni <b>%1</b>"
+
+#~ msgid "ListenLive"
+#~ msgstr "ListenLive"
+
+#~ msgid "Install the following?"
+#~ msgstr "Telepíted a következőt?"
+
+#~ msgid "Update the following?"
+#~ msgstr "Frissíted a következőt?"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "Létrehozás sikertelen <b>%1</b>!"
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "Létező stream!<br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "A nevezett stream <b>%1</b> már létezik!"
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "<b>%1</b> stream-ek újratöltése?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "Biztosan eltávolítanád a könyvjelzőjét ennek: <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "Biztosan eltávolítanád az összes <b>%1</b> könyvjelzőt?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "Biztosan eltávolítanád ezt <b>%1</b>?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Már van <b>%1</b> nevű lejátszási lista!<br/>Felülírjam?"
+
+#~ msgid "Failed top open package file"
+#~ msgstr "Nem sikerült megnyitni a csomagfájlt"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "A 'Cím', 'Előadó', 'Album előadó' és 'Album' első betűjének nagyra "
+#~ "váltása az <b>összes</b> számnál?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "Forrásfájl nem létezik!<br/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "A célfájl már létezik! <br/>"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "Nem sikerült létrehozni a könyvtárat!<br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "Nem sikerült %1 átnevezése %2-re"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music "
+#~ "folder\" setting, and MPD's \"music_directory\" setting.</p>"
+#~ msgstr ""
+#~ "<p>Nem tudom elérni a dalok fájljait!<br/><br/>Ellenőrizd a Cantata "
+#~ "\"Zenekönyvtárát\" és az MPD \"music_directory\" (zenekönyvtár) "
+#~ "beállításait.</p>"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check that the device is "
+#~ "still attached.</p>"
+#~ msgstr ""
+#~ "<p>Nem tudom elérni a dalok fájljait!<br/><br/>Ellenőrizd, hogy az eszköz "
+#~ "csatlakozik-e még.</p>"
+
#~ msgid "TextLabel"
#~ msgstr "Szövegcímke"
@@ -7329,9 +8366,6 @@ msgstr "%1 számú frissítés érhető el"
#~ msgid " seconds"
#~ msgstr " másodperc"
-#~ msgid "Devices:"
-#~ msgstr "Eszközök:"
-
#~ msgid "Current URL:"
#~ msgstr "Jelenlegi URL:"
diff --git a/po/ko.po b/po/ko.po
index 24a2b47..7cce58d 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -5,12 +5,12 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cantata 1.4.0\n"
+"Project-Id-Version: Cantata 1.5.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: 2012-10-24 20:00+0900\n"
"Last-Translator: Minho Park <parkmino at gmail.com>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language-Team: Minho Park <parkmino at gmail.com>\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,10 +23,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "음반정보 새로 읽기"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "음반"
@@ -37,32 +37,33 @@ msgstr "음반"
msgid "Tracks"
msgstr "곡"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "연주자정보 새로 읽기"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "연주자"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "음반"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "웹 연결"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "비슷한 연주자"
@@ -70,28 +71,28 @@ msgstr "비슷한 연주자"
msgid "Lyrics Providers"
msgstr "가사 찾기"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "위키피디아 언어"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "기타"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "간격 새로 맞추기"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "연주자(&A)"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "음반(&b)"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr "곡(&T)"
@@ -120,16 +121,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "제목:"
@@ -137,17 +138,17 @@ msgstr "제목:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "연주자:"
@@ -163,38 +164,39 @@ msgstr "가사를 찾을 때 사용할 웹사이트를 선택합니다."
msgid "Song Information"
msgstr "곡 정보"
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "이미지 (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr "10화소"
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr "%1px"
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "가사"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "정보"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "태그"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr "메타데이터"
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -216,14 +218,14 @@ msgstr "가사파일 지우기"
msgid "Refresh Track Information"
msgstr "곡 정보 다시 읽기"
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "취소"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "곡"
@@ -239,7 +241,7 @@ msgstr ""
"디스크에서 다시 읽거나, 아니면 디스크 복사본을 지우고 내려받을까요?"
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "다시 읽기"
@@ -271,39 +273,39 @@ msgstr "가사를 지울까요?"
msgid "Delete File"
msgstr "파일 삭제"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr "음반 연주자"
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr "작곡가"
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr "작사가"
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr "지휘자"
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr "리믹서"
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr "부제"
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr "곡 번호"
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr "음반 번호"
@@ -315,102 +317,119 @@ msgstr "음반 번호"
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "장르"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "날짜"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr "원본 날짜"
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr "설명"
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr "저작권"
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr "음반사"
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr "목록 번호"
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr "제목 정렬"
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr "연주자 정렬"
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr "음반 연주자 정렬"
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr "음반 정렬"
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr "인코딩"
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "인코더"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr "분위기"
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr "매체"
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "비트레이트"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr "샘플레이트"
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr "채널"
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr "태그 시간"
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr "공연가 (%1)"
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr "%1 kb/s"
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr "%1 Hz"
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr "비트"
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr "공연가"
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "연도"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr "파일이름"
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "%1에서 가사 가져옴"
@@ -458,16 +477,16 @@ msgstr "칸타타가 곡을 연주하고 있습니다"
msgid "Songs To Be Copied"
msgstr "복사할 곡"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>무효</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(다를 때)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -481,328 +500,342 @@ msgstr ""
"다. 따라서, 칸타타를 중지하고 수동으로 데이터베이스를 읽은 다음에 다시 실행하"
"시기 바랍니다."
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "연주자:%1, 음반:%2, 곡:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 남음"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "로컬 음악라이브러리"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "오디오 CD"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
"대상 장치에 여유 공간이 부족합니다.\n"
+"\n"
"선택된 곡에 필요한 공간은 %1이지만, 남은 공간은 %2입니다.\n"
"선택된 곡을 복사하려면, 더 작은 파일 크기로 변환해야 합니다."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"사용하고자 하는 장치에 여유 공간이 부족합니다.\n"
+"대상 장치에 여유 공간이 부족합니다.\n"
+"\n"
"선택된 곡에 필요한 공간은 %1이지만, 남은 공간은 %2입니다."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "곡 복사"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "곡 지우기"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
-msgstr "<p>대상 장치가 설정되지 않았습니다.<br/>기본 설정으로 계속할까요?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
+msgstr ""
+"대상 장치가 설정되지 않았습니다.\n"
+"\n"
+"기본 설정으로 계속할까요?"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "설정 안 됨"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "기본값 사용"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
-msgstr "<p>원본 장치가 설정되지 않았습니다.<br/>기본 설정으로 계속할까요?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
+msgstr ""
+"원본 장치가 설정되지 않았습니다.\n"
+"\n"
+"기본 설정으로 계속할까요?"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "정지할까요?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "정지"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "장치가 제거되었습니다!"
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "장치가 연결되지 않았습니다!"
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "장치가 사용 중입니까?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "장치가 바뀌었습니까?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "사용되지 않는 폴더 지우기"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "리핑된 곡의 리플레이게인을 계산할까요?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr "리플레이게인"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "계산"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "대상 파일이름이 이미 있습니다!"
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "곡이 이미 있습니다!"
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "곡이 없습니다!"
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
msgstr "대상 폴더를 만들 수 없음!<br/>권한이 있는지 확인 바랍니다."
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "원본 파일이 더 이상 존재하지 않습니까?"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "복사할 수 없음."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "지울 수 없음."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "장치에 연결되어 있지 않음."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "선택된 코덱을 사용할 수 없습니다."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "변환 실패."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
msgstr "임시 파일을 만들 수 없음.<br/>(MTP 장치로 변환에 필요.)"
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "원본 파일을 읽을 수 없음."
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "대상 파일을 쓸 수 없음."
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "장치에 여유 공간이 없음."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "메타데이터를 업데이트할 수 없음."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "곡을 내려받을 수 없음."
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "장치를 잠글 수 없음."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "로컬 음악라이브러리 속성"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "오류"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "건너뜀"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "자동 건너뜀"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "다시 시도"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "음반:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "곡:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "원본:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "대상 파일:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "파일:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "계산 중..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (예상)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "남은 시간:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "캐시 저장"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "\"여러 연주자\" 해결 적용"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "\"여러 연주자\" 해결 되돌리기"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "대문자로"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "곡 번호 조정"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "도구"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "\"여러 연주자\" 해결을 적용할까요?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>'음반연주자'와 '연주자'를 \"여러 연주자\"로 설정하고, '제목'을 \"곡 연주"
-"자 - 곡 제목\"으로 바꿉니다.</i>"
+"'음반연주자'와 '연주자'를 \"여러 연주자\"로 설정하고, '제목'을 \"곡 연주자 - "
+"곡 제목\"으로 바꿉니다."
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "\"여러 연주자\" 해결을 되돌림"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr "\"여러 연주자\" 해결을 되돌릴까요?"
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>'음반연주자'가 \"곡 연주자 - 곡 제목\" 형태의 '연주자'와 '제목'이 같다면, "
-"'연주자'는 '제목'으로부터 나오고 '제목' 자체는 제목으로 설정됩니다. 예로 <br/"
-"><br/>'제목'이 \"유재하 - 내 마음에 비친 내 모습\"이고 '연주자'가 \"유재하"
-"\"로 설정되면, '제목'은 \"내 마음에 비친 내 모습\"이 됩니다.</i>"
+"'음반연주자'가 '연주자'와 같고 '제목'이 \"곡 연주자 - 곡 제목\" 형태이면, '연"
+"주자'는 '제목'으로부터 나오고 '제목'은 제목자체로부터 설정됩니다. 예로 \n"
+"'제목'이 \"유재하 - 내 마음에 비친 내 모습\"이면, '연주자'가 \"유재하\"로 설"
+"정되고 '제목'은 \"내 마음에 비친 내 모습\"이 됩니다."
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "되돌림"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
-msgstr "'제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 만듬"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
+msgstr "'제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 만들까요?"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "곡 번호 조정:"
@@ -850,8 +883,8 @@ msgstr "여러 자료가 있으니, 아래에서 하나를 고르시기 바랍
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "제목"
@@ -968,74 +1001,79 @@ msgstr "동기화"
msgid "Forget Device"
msgstr "장치 잃음"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "장치 추가"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "음반과 곡의 상세정보를 찾습니까?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "새로 읽기"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "CDDB 사용"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "MusicBrainz 사용"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
-msgstr ""
-"<p>어떻게 새로 읽을까요?<ul><li>부분 - 새 음악만 읽기 <i>(빠름)</i></li><li>"
-"전체 - 모든 음악 다시 읽기 <i>(느림)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr "어떻게 새로 읽을까요?"
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr "부분 - 새 음악만 읽기 (빠름)"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr "전체 - 모든 음악 다시 읽기 (느림)"
+
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "부분"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "전체"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
"선택된 곡을 지울까요?\n"
+"\n"
"되돌릴 수 없습니다."
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "<b>%1</b>을 무시할까요?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "'%1'을 무시할까요?"
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "오디오 CD <b>%1 - %2</b>을 뺄까요?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr "오디오 CD '%1 - %2'을 뺄까요?"
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "빼기"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "<b>%1</b>을 끊을까요?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr "'%1'을 끊을까요?"
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "연결 끊음"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "다른 대화창을 먼저 닫으시기 바랍니다."
@@ -1137,7 +1175,7 @@ msgstr ""
"생기에서 음악 듣기에 좋은 선택입니다.<br/><b>120kb/s 이하</b>는 음악이 불만족"
"스러울 수 있습니다.<b>205kb/s 이상</b>은 너무 높을 수 있습니다."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1250,7 +1288,7 @@ msgstr ""
"%8B%A4>애플 무손실</a> (ALAC)은 디지털 음악의 무손실 압축을 위한 오디오 코덱"
"입니다.<br>애플 제품이나 FLAC을 지원하지 않는 연주기에서만 추천합니다."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1375,64 +1413,63 @@ msgstr "Ballad"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
-msgstr "<p>아래 변수는 각 곡명의 해당되는 의미에 따라 바뀝니다.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
+msgstr "아래 변수는 각 곡명에 해당하는 뜻에 따라 바뀝니다."
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
msgstr ""
"<tr><th><em>변수</em></th><th><em>단추</em></th><th><em>설명</em></th></tr>"
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "업데이트 중..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "캐시 읽음"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "장치 연결 중..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "장치가 없음"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "장치에 연결됨"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "장치와 분리됨"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "폴더 업데이트 중..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "파일 업데이트 중..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "곡 업데이트 중..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "연결 안 됨"
@@ -1440,7 +1477,7 @@ msgstr "연결 안 됨"
msgid "%1 (Disc %2)"
msgstr "%1 (디스크 %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "MusicBrainz에서 찾을 수 없음"
@@ -1448,17 +1485,19 @@ msgstr "MusicBrainz에서 찾을 수 없음"
msgid "Connection"
msgstr "연결"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "음악라이브러리"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"원격 장치인 \"%1\"는 이미 있음!\n"
-"다른 이름을 선택해야 합니다"
+"원격 장치인 '%1'은 이미 있음!\n"
+"\n"
+"다른 이름을 선택해야 합니다."
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1537,20 +1576,20 @@ msgstr "용량을 모름"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "찾기"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "항목 확인"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "항목 확인 안 함"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "선택 안 됨"
@@ -1594,7 +1633,7 @@ msgstr "무효 파일명 (%1)"
msgid "Failed to save %1."
msgstr "%1 저장 안됨."
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "규정 파일 지워지지 않음. (%1)"
@@ -1626,66 +1665,70 @@ msgstr "잘못된 변수가 주어짐."
msgid "Unknown method called."
msgstr "모르는 방법을 요청함."
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "모르는 오류"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "동적 연주목록 시작"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "동적 방식 중지"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr " - 등급: %1..%2"
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
msgstr "칸타타의 동적 모드를 작동하려면 \"perl\"을 시스템에 설치해야 합니다."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "규정 파일을 찾을 수 없음 - %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "이전 규정 파일을 지울 수 없음 - %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "규정 파일을 설치할 수 없음 - %1 -> %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "활동이 중지됨."
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "규정 저장"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "규정 지우기"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "이전 명령어 응답 대기 중. (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr "%1 저장 안됨. (%2)"
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "활동 상태 관리 안 됨. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "현재 동적 규정 설정 안 됨. (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1706,26 +1749,28 @@ msgstr "동적 규정 지우기"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
"선택된 규정을 지울까요?\n"
+"\n"
"되돌릴 수 없습니다."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "동적 규정"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "추가"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr "<i><b>오류</b>: '시작 연도'는 '마지막 연도'보다 작아야 합니다</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1756,72 +1801,80 @@ msgstr " (정확)"
msgid "Dynamic Rules"
msgstr "동적 규정"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr "동적 규정에 대하여"
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
msgstr ""
"<p>칸타타는 등록된 모든 규정을 이용하여 라이브러리를 조회합니다. <i>포함</i>"
"된 규정 항목은 사용될 곡들을 선별하는 데에 사용됩니다. <i>제외</i>된 규정 항"
"목은 사용되지 않을 곡들을 선별하는 데에 사용됩니다. <i>포함</i>된 규정이 없으"
-"면, 전곡(<i>제외</i>된 규정을 제외하고)을 사용할 수 있다고 가정합니다. <br/>"
-"예로 '유재하의 Ballad 및 여러 연주자의 곡'을 선택하려면 다음과 같이 하면 됩니"
-"다: <ul><li>포함 음반연주자=유재하 장르=Ballad</li><li>포함 음반연주자=여러 "
-"연주자</li></ul> '유재하의 모든 곡 중에 미련 음반을 제외'하려면: <ul><li>포"
-"함 음반연주자=유재하</li><li>제외 음반=미련</li></ul>사용할 곡들이 만들어지"
+"면, 전곡(<i>제외</i>된 규정을 제외하고)을 사용할 수 있다고 가정합니다.</p></"
+"p>예로 '유재하의 Ballad 및 여러 연주자의 곡'을 선택하려면 다음과 같이 하면 됩"
+"니다: <ul><li>포함 음반연주자=유재하 장르=Ballad</li><li>포함 음반연주자=여"
+"러 연주자</li></ul> '유재하의 모든 곡 중에 미련 음반을 제외'하려면: <ul><li>"
+"포함 음반연주자=유재하</li><li>제외 음반=미련</li></ul>사용할 곡들이 만들어지"
"면 칸타타는 무작위로 곡들을 선택하여 연주순서에 10개 항목을 유지합니다.</p>"
-#: dynamic/dynamicrulesdialog.cpp:311
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "%1 저장 안 됨"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
"규정 이름인 '%1'는 이미 있음!\n"
+"\n"
"덮어쓸까요?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "규정 덮어쓰기"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "%1로 저장함"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "지우는 중..."
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "이름"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "항목 수"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "사용 공간"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr "전체사용공간: %1"
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1834,67 +1887,67 @@ msgstr ""
"내려받았으나 음악 폴더에 저장되지 못한 경우입니다 (접근할 수 없거나, 저장하"
"지 않도록 설정해서입니다). 아래는 캐시를 사용한 내역입니다."
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "음반표지"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "비율표지"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "배경"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "연주자정보"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "음반정보"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr "곡 정보"
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr "스트림 목록"
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "자멘도(Jamendo)"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "매그나튠(Magnatune)"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr "팟캐스트 디렉터리"
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr "곡 스크로블"
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "모두 지우기"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "'%1' 항목을 모두 지울까요?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "캐시항목을 지웁니다"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>아래 전부를 지웁니까?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr "선택된 카테고리를 모두 지울까요?"
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1905,7 +1958,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1916,71 +1969,73 @@ msgstr ""
"%1\n"
"%2 x %3"
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "현재 표지"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr "보관된 음반표지"
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "이미지"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "내려받는 중..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "이미지 (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr "이 연주자의 이미지가 이미 있으므로, 파일 쓰기가 되지 않습니다."
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr "이 음반의 표지가 이미 있으므로, 파일 쓰기가 되지 않습니다."
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr "%1 연주자 이미지"
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr "'%1 - %2' 음반표지"
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
"표지 설정에 실패함!\n"
+"\n"
"임시 파일에 내려받을 수 없음!"
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "이미지를 내려받을 수 없음!"
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "로컬 표지 읽기"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "파일이 이미 목록에 있음!"
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "이미지를 읽을 수 없음!"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
-msgstr "보이기"
+msgstr "보기"
#. i18n: file: dynamic/dynamicrules.ui:67
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
@@ -1990,36 +2045,42 @@ msgstr "보이기"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "지우기"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
"표지를 설정할 수 없음!\n"
-"복사할 수 수 없음!"
+"\n"
+"복사할 수 없음!"
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
"표지를 설정할 수 없음!\n"
+"\n"
"원본을 백업할 수 없음!"
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
"표지를 설정할 수 없음!\n"
+"\n"
"'%1'에 복사할 수 없음!"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "찾기..."
@@ -2035,370 +2096,317 @@ msgstr "연결됨"
msgid "Connection Failed"
msgstr "연결 안 됨"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr "음반, 연주자, 연도"
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr "음반, 연도, 연주자"
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr "연주자, 음반, 연도"
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr "연주자, 연도, 음반"
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr "연도, 음반, 연주자"
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr "연도, 연주자, 음반"
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "없음"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "작게"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "보통"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "크게"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "아주 크게"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr "기본 나무 모양 (아이콘 없음)"
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "단순 나무 모양"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "상세 나무 모양"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "앨범으로 묶음"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "목록"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "아이콘/목록"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr "격자"
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "항목으로 따로"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "연주순서"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "연주자"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "폴더"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "연주목록"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "동적 연주목록"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "스트림 (예, 라디오 방송국)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr "온라인 서비스 - Jamendo, Maganatune, SoundCloud, Podcasts"
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr "장치 - UMS, MTP (예, 안드로이드), 오디오CD"
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr "찾기 (MPD를 통해서)"
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr "정보 - 현재 곡 정보 (연주자, 음반, 가사)"
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "방식:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "크게"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "작게"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr "꼬리표"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "왼쪽"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "오른쪽"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "위"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "아래"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr "알림"
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "시스템 기본값"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "칸타타"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "MPD의 KDE 클라이언트"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "© 2011-2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "유지"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "사용자 인터페이스 개선"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "QtMPC 개발자"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
msgstr "찾아보기 배경 (나만의 음악 팬아트를 fanart.tv에 올려주셔요)"
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "위키피디아"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "찾아보기 자료"
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "URL 열기"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "칸타타 설정..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr "설정"
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "나가기"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "칸타타에 대하여..."
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "창 보기"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "서버정보..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "데이터베이스 새로 읽기"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr "전체 새로 읽기"
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "연결"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "음원"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "출력"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "곡 다음 정지"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "저장된 연주목록에 추가"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "잘라내기"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "스트림 URL 추가"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "지우기"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr "지금 곡을 가운데로"
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "넓게 보기"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "지금 곡 정보보기"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "전체화면"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "무작위"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "반복"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "단일"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2406,115 +2414,123 @@ msgstr ""
"'단일'이 선택되면, 지금 곡 다음에 연주를 멈춥니다. '반복'이 선택되면, 곡은 반"
"복됩니다."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "소비"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
msgstr "소비가 선택되면, 곡은 연주 후에 연주순서에서 없어집니다."
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr "연주순서에서 찾기"
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "우선순위 설정"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "스트림 연주"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "라이브러리 위치 찾기"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "곡 태그수정"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "전체확장"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "전체축소"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr "모든 곡을 지움"
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr "'새로운' 연주자와 음반 표시 지움"
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "동적"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "스트림"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "온라인"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "장치"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "정보"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr "메뉴 줄 보기"
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr "음악(&M)"
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "수정(&E)"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr "보기(&V)"
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr "순서(&Q)"
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "설정(&S)"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "도움말(&H)"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr "등급 설정"
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr "등급 없음"
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr "동적 연주목록 규정에 맞는 음악을 찾지 못했습니다."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "%1에 연결"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "MPD 데이터베이스를 새로 읽을까요?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "칸타타에 대하여"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2525,7 +2541,7 @@ msgstr ""
"Drummond<br/><a href=\"http://www.gnu.org/licenses/gpl.html\">GPLv3</a>에 따"
"라 배포"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
@@ -2533,14 +2549,14 @@ msgstr ""
"<a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> 기반 - © 2007-2010 QtMPC "
"개발자<br/>"
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
"tv</a>"
msgstr "찾아보기 배경 도움은 <a href=\"http://www.fanart.tv\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2549,7 +2565,7 @@ msgstr ""
"찾아보기 자료 도움은 <a href=\"http://www.wikipedia.org\">위키피디아</a> 와 "
"<a href=\"http://www.last.fm\">Last.fm</a>"
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2557,21 +2573,33 @@ msgstr ""
"나만의 음악 팬아트를 올려주실 곳은 <a href=\"http://www.fanart.tv\">FanArt."
"tv</a>"
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
msgstr ""
"팟캐스트를 내려받고 있습니다\n"
"\n"
-"지금 취소하면 모든 내려받기를 그만둡니다."
+"지금 취소하면 내려받기를 그만둡니다."
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr "내려받기를 그만두고 취고"
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
-msgstr "내려받기를 그만두고 취소"
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr "사용 가능: %1"
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr "사용 불가능: %1"
+
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "서버정보"
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2585,7 +2613,7 @@ msgstr ""
"tr><tr><td align=\"right\">처리: </td><td>%6</td></tr><tr><td align="
"\"right\">태그: </td><td>%7</td></tr>"
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2599,87 +2627,108 @@ msgstr ""
"align=\"right\">지속시간: </td><td>%4</td></tr><tr><td align=\"right\">"
"업데이트: </td><td>%5</td></tr>"
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "서버정보"
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "칸타타 (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr "MPD가 다음 오류를 보고함: %1"
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr "연주중지"
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr "연주순서의 모든 곡을 지울까요?"
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "우선순위"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "우선순위 입력 (0..255):"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "연주목록 이름"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "연주목록 이름을 입력합니다:"
-#: gui/mainwindow.cpp:2009
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
+msgstr "'%1'이 즐겨찾는 스트림 저장에 사용되므로, 다른 이름을 선택합니다."
+
+#: gui/mainwindow.cpp:2053
msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
msgstr ""
-"<b>%1</b>이 선호하는 스트림을 저장하기 위해 사용되므로, 다른 이름을 선택합니"
-"다."
-
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
-msgstr "연주목록 이름 <b>%1</b>이 이미 있습니다!<br/>연주목록에 추가할까요?"
+"연주목록 이름 '%1'이 이미 있습니다!\n"
+"\n"
+"연주목록에 추가할까요?"
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "이미 있는 연주목록"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "스트림 URL"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr "스트림 URL 입력:"
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr "사용할 수 없거나, 지원하지 않는 URL!"
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr "MPD 음원에 있는 곡의 태그만 수정할 수 있습니다."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "없음"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "자동"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
msgstr ""
"<i><b>%1에 연결</b><br/>아래 목록들은 지금 연결된 MPD 음원에 적용됩니다.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2687,28 +2736,28 @@ msgstr ""
"<i><b>연결 안 됨!</b><br/>칸타타가 MPD에 연결되지 않았으므로 아래 목록은 수정"
"되지 않습니다.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
+"li></ul>"
msgstr ""
-"<p>리플레이게인은 MP3나 Ogg Vorbis 같은 오디오 포맷의 소리 크기를 맞추기 위하"
-"여 2001년에 제안된 표준입니다. 곡이나 음반 단위로 작동하며 이제는 점점 더 많"
-"은 연주기가 지원합니다.</p><p>아래 설정이 사용될 수 있습니다:<ul><li><i>안 함"
+"리플레이게인은 MP3나 Ogg Vorbis 같은 오디오 포맷의 소리 크기를 맞추기 위하여 "
+"2001년에 제안된 표준입니다. 곡이나 음반 단위로 작동하며 이제는 점점 더 많은 "
+"연주기가 지원합니다.<br/><br/>아래 설정이 사용될 수 있습니다:<ul><li><i>안 함"
"</i> - 리플레이게인을 적용 안 함.</li><li><i>곡</i> - 곡의 리플레이게인 태그"
"를 이용하여 음량을 조정함.</li><li><i>음반</i> - 음반의 리플레이게인 태그를 "
"이용하여 음량을 조정함.</li><li><i>자동</i> - 무작위연주는 곡의 리플레이게인 "
-"태그를, 그 밖은 음반의 태그를 이용하여 음량을 조정함.</li></ul></p>"
+"태그를, 그 밖은 음반의 태그를 이용하여 음량을 조정함.</li></ul>"
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "이름 바꾸기"
@@ -2716,35 +2765,43 @@ msgstr "이름 바꾸기"
msgid "Remove Duplicates"
msgstr "중복 지우기"
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
"선택된 연주목록을 지울까요?\n"
+"\n"
"돌이킬 수 없습니다."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "연주목록 지움"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "연주목록 이름 <b>%1</b>은 이미 있습니다!<br/>덮어쓸까요?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"연주목록 이름 '%1'은 이미 있습니다!\n"
+"\n"
+"덮어쓸까요?"
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "연주목록을 덮어씀"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "연주목록 이름 바꾸기"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "새로운 연주목록을 입력합니다:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr "'%1'에서 '%2'로 곡을 추가할 수 없음"
@@ -2808,113 +2865,117 @@ msgid_plural "%1 Updates available"
msgstr[0] "한 업데이트 있음"
msgstr[1] "%1 업데이트 있음"
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "음원 설정"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "연주"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "연주 설정"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "파일"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "파일 설정"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "인터페이스"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "인터페이스 설정"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr "스트림 설정"
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr "온라인서비스"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "찾아보기"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "찾아보기 설정"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr "스크로블링"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr "스크로블링 설정"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "HTTP 서버"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "HTTP 서버 설정"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "오디오 CD 설정"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "프락시"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "프락시 설정"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "단축키"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "키보드 단축키 설정"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "캐시"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "캐시항목"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr "칸타타 설정"
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "설정"
@@ -2922,391 +2983,377 @@ msgstr "설정"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr "작곡가:"
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr "공연가:"
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "장르:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr "설명:"
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "날짜:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr "수정됨:"
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr "모두:"
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "곡을 찾지 못함."
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
msgstr ""
"<i> 이 폴더는 장치로(부터) 전송하는 음악파일을 찾는데에도 사용됩니다.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "호스트:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr "어떤 형식의 음원에 연결할까요?"
+
+#: gui/serversettings.cpp:240
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
-msgstr ""
-"어떤 형식의 음원에 연결할까요?<br/><ul><li>표준 - 다른 컴퓨터에 연결되거나 이"
-"미 설정되어, 음원을 공유할 수 있음</li><li>기본 - 음원이 공유되지 않고 MPD만 "
-"설정하고 관리함</li></ul>"
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr "표준 - 다른 컴퓨터에 연결되거나 이미 설정되어, 음원을 공유할 수 있음"
+
+#: gui/serversettings.cpp:241
+msgid ""
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
+msgstr "기본 - 음원이 공유되지 않고 MPD만 설정하고 관리함"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "음원 추가"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "표준"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "기본"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "<b>%1</b>을 지울까요?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr "'%1'을 지울까요?"
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "지우기"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "새로운 음원 %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "기본값"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr "멀티미디어 키"
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr "미디어 키 사용 안 함"
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr "미디어 키 사용함"
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr "데스크톱 환경에서 설정된 미디어 키 사용함"
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr "그놈/유니티에서 설정된 미디어 키 사용함"
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "설정..."
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "이전 곡"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "다음 곡"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "연주/멈춤"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "지금 곡 다음 정지"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "음량 올림"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "음량 내림"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "다른 이름으로 저장"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "연주순서 추가"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr "무작위로 음반 추가"
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "연주순서 교체"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "우선순위 추가"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "최고 우선순위 (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "높은 우선순위 (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "중간 우선순위 (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "낮은 우선순위 (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "기본 우선순위 (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "사용자 우선순위..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "연주목록 추가"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "파일구성"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "태그수정"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "리플레이게인"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr "곡 정보 수정"
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "장치로 곡 복사"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "이미지 설정"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr "찾기"
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "지금 연주 중"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr "로컬 루프백 (%1)"
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr "유선 (%1)"
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr "무선 (%1)"
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "우선 사용되는 연결"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr "연주"
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr "멈춤"
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%2의 %1"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Cue 시트"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "연주목록"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "장치 설정"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "장치 새로 읽기"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "장치 연결"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "장치 분리"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "CD 상세정보 수정"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "장치 연결 안 됨"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "로그인 안 됨"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "로그인 됨"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "가입 안 됨"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "가입이 되지 않았음"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "로그인 됨 (만기:%1)"
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "세션 닫힘"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "음악파일"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "한 곡들"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "서비스설정"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "서비스 새로 읽기"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "구독 추가"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "구독 삭제"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "구독 새로 읽기"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "최근 찾기:%1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "읽지 않음"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "곡의 위치는 찾기를 사용"
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(내려받는 중: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr "(내려받기 대기)"
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "새로운 연주목록..."
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "고급 연주목록"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "길이"
@@ -3314,6 +3361,10 @@ msgstr "길이"
msgid "Disc"
msgstr "디스크"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr "등급"
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr "되돌리기"
@@ -3336,111 +3387,107 @@ msgstr "정렬하기"
msgid "Album Artist"
msgstr "음반연주자"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(우선순위: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "읽는 중..."
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "책갈피"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr "Dirble"
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "즐겨찾기"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "카테고리를 책갈피에 추가"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "스트림을 즐겨찾기에 추가"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "스트림 설정"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "모름"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "\"%1\""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "\"%1\" (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "%1에 연결 안 됨"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr "%1에 연결할 수 없음 - 프록시 설정을 확인해야 합니다"
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "%1에 연결 안 됨 - 틀린 암호"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "%1에 명령어 전달 안 됨 - 연결 안 됨"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr "연결 안 됨. \"mpd\" 사용자가 읽기 권한이 있는지 확인해야 합니다."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
msgstr "불러오기 안 됨. MPD는 로컬에 연결된 파일만 불러올 수 있습니다."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "명령어 전달 안 됨. %1 연결 해제"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "<b>%1</b>에서 <b>%2</b>로 이름 바꾸기 안 됨"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "<b>%1</b> 저장 안 됨"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr "큐시트의 일부를 연주목록에 추가할 수 없습니다!"
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr "연주목록을 다른 연주목록에 추가할 수 없습니다!"
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr "'%1'을 %2로 보낼 수 없음. %2가 MPD에 등록되어 있는지 확인해야 합니다."
@@ -3448,15 +3495,11 @@ msgstr "'%1'을 %2로 보낼 수 없음. %2가 MPD에 등록되어 있는지 확
msgid "Personal"
msgstr "개인"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "모름"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "여러 연주자"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3470,12 +3513,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr "<b>%2</b>의 <b>%1</b>"
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr "<b>%3</b>에서 <b>%2</b>의 <b>%1</b>"
@@ -3508,19 +3551,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "스트림 형식:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "스트림"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3530,85 +3573,85 @@ msgstr "Magnatune 설정"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "사용자:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "비밀번호:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "회원:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "내려받기:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "내려받는 중"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "화면 업데이트"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "곡 묶음"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "응답 분석"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "분석 안 됨"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "내려받을 수 없음"
@@ -3624,131 +3667,135 @@ msgstr "팟캐스트 에피소드 내려받기"
msgid "Delete Downloaded Podcast Episodes"
msgstr "내려받은 팟캐스트 에피소드 지우기"
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr "팟캐스트 에피소드 내려받기 취소"
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr "팟캐스트 에피소드를 읽지 않음으로 처리"
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr "팟캐스트 에피소드를 읽음으로 처리"
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "설정..."
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "%1 찾기:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "%1의 음악항목을 다시 내려받습니까?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "다시 내려받기"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
-msgstr "<b>%1</b>을 구독 취소할까요?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr "'%1'을 구독 취소할까요?"
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr "모든 팟캐스트를 새로 읽을까요?"
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr "<b>%1</b>의 팟캐스트 항목을 새로 읽을까요?"
-
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr "이미 선택된 모든 팟캐스트를 내려받았습니다!"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr "'%1'의 팟캐스트 항목을 새로 읽을까요?"
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr "아래 팟캐스트의 한 에피소드를 내려받을까요?"
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
-msgstr "아래 팟캐스트의 여러 에피소드를 내려받을까요? "
-
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr "선택된 팟캐스트 에피소드를 내려받을까요?"
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
-msgstr "이미 선택된 모든 팟캐스트를 지웠습니다!"
-
-#: online/onlineservicespage.cpp:693
-msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
-msgstr "아래 팟캐스트 에피소드에서 내려받은 한 파일을 지울까요?"
-
-#: online/onlineservicespage.cpp:696
+#: online/onlineservicespage.cpp:648
msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
-msgstr "아래 팟캐스트 에피소드에서 내려받은 여러 파일을 지울까요?"
+"Cancel podcast episode downloads (both current and any that are queued)?"
+msgstr "팟캐스트 에피소드 내려받기를 취소할까요 (지금과 대기 모두)?"
-#: online/onlineservicespage.cpp:699
+#: online/onlineservicespage.cpp:685
msgid ""
"Do you wish to the delete downloaded files of the selected podcast episodes?"
-msgstr "선택된 팟캐스트 에피소드에서 내려받은 여러 파일을 지울까요?"
+msgstr "선택된 팟캐스트 에피소드에서 내려받은 파일들을 지울까요?"
+
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr "선택된 팟캐스트 에피소드를 읽지 않음으로 처리할까요?"
-#: online/podcastsearchdialog.cpp:253
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr "선택된 팟캐스트 에피소드를 읽음으로 처리할까요?"
+
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "웹사이트:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "팟캐스트 상세정보"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr "상세정보를 보여줄 팟캐스트를 선택합니다"
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr "검색단어입력..."
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "%1의 팟캐스트를 가져올 수 없음"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr "%1의 응답을 분석할 수 없습니다"
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr "디렉터리 항목을 내려받을 수 없음"
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr "디렉터리 항목을 분석할 수 없음"
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "URL"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr "팟캐스트 URL 입력..."
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr "읽기"
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr "아래에 팟캐스트 URL을 입력하고, '읽기'를 누릅니다"
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr "잘못된 URL!"
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr "팟캐스트를 가져올 수 없음!"
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr "팟캐스트 분석 안 됨."
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
@@ -3756,59 +3803,59 @@ msgstr ""
"오디오 팟캐스트만 지원합니다! 입력한 URL은 비디오 팟캐스트만 포함하고 있습니"
"다."
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr "구독"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr "URL 입력"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr "수동 팟캐스트 URL"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "%1 찾기"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr "%1에서 팟캐스트를 찾기"
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr "팟캐스트 구독 추가"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr "%1 둘러보기"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr "%1 팟캐스트 둘러보기"
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr "구독 추가됨"
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr "이미 이 팟캐스트를 구독하고 있습니다!"
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "팟캐스트"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr "오디오 팟캐스트만 지원합니다! %1은 비디오 팟캐스트만 있습니다."
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr "%1 분석 안 됨"
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr "%1을 내려받을 수 없음"
@@ -3820,59 +3867,77 @@ msgstr "새로운 에피소드 확인:"
msgid "Download episodes to:"
msgstr "에피소드 내려받기:"
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
-msgstr "새로운 에피소드 자동 내려받기"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr "자동으로 내려받기:"
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr "팟캐스트 설정"
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr "수동"
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr "15분마다"
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr "30분마다"
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr "1시간마다"
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr "2시간마다"
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr "6시간마다"
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr "12시간마다"
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr "매일"
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr "매주"
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr "자동으로 에피소드를 내려받지 않기"
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr "최신 에피소드"
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr "최신 %1 에피소드"
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr "모든 에피소드"
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr "배경 화면"
@@ -3884,61 +3949,61 @@ msgstr "연주자이미지"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr "사용자 이미지:"
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr "흐림:"
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10화소"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr "불투명:"
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40%"
@@ -3963,7 +4028,7 @@ msgstr "알아서 바꾸지 않음"
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " ms"
@@ -3990,8 +4055,8 @@ msgstr "항상 하나의 창으로 줄이기"
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
"세 화면 모두 볼 수 있는 폭이더라도, '연주자', '음반' 또는 '가사'만 봅니다."
@@ -4001,22 +4066,21 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "위키피디아 기본 본문만 보기"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
msgstr ""
-"<i><b>참고:</b> 칸타타는 위키피디아의 이미지나 링크가 포함된 전체 페이지가 아"
-"니라, 이를 단순화해서 보여줍니다. 이 단순화는 항상 100% 정확하지는 않아서, 기"
-"본 본문을 보여주게 됩니다. 전체 본문에서는 오류가 있을 수 있습니다. 또한 '캐"
-"시' 설정을 이용하여 저장된 기본 본문을 지워야 합니다.</i>"
+"칸타타는 위키피디아의 이미지나 링크가 없이 단순화해서 보여줍니다. 이 단순화"
+"는 항상 100% 정확하지는 않아서, 기본 본문을 보여주게 됩니다. 전체 본문에서는 "
+"오류가 있을 수 있습니다. 또한 '캐시' 설정을 이용하여 저장된 기본 본문을 지워"
+"야 합니다."
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4073,22 +4137,21 @@ msgid "To copy:"
msgstr "복사하기:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
-msgstr "<i><b>참고:</b> Mopidy 서버에 연결됨 (수동 업데이트 필요).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
+msgstr "Mopidy 서버에 연결됨 (수동 업데이트 필요)."
#. i18n: file: devices/albumdetails.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
@@ -4098,13 +4161,13 @@ msgstr "음반 상세정보"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "연도:"
@@ -4169,172 +4232,169 @@ msgid "Never skip on read error"
msgstr "읽기오류 건너뛰지 않음"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
-msgstr ""
-"<i><b>참고:</b> 이 설정은 장치가 연결되었을 때에만 유효하고 수정할 수 있습니"
-"다.</i>"
+"These settings are only valid, and editable, when the device is connected."
+msgstr "이 설정은 장치가 연결되었을 때에만 유효하고 수정할 수 있습니다."
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "이름:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "음악 폴더:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "음반표지 저장하기:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "최대 표지 크기:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "기본 음량:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr "'여러 연주자' 해결"
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "연결되면 알아서 음악검색"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "캐시 사용"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "파일이름"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "파일이름 구성:"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "안전한 VFAT"
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "ASCII 문자만 표시"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "빈칸을 밑줄로 바꿈"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "연주자 이름에 'The' 무시"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr "연주자 이름에 'The'를 붙입니다"
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "변환"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4458,173 +4518,165 @@ msgid "The genre of the album."
msgstr "음반 장르."
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
-msgstr ""
-"<i><b>참고:</b> 이 설정은 장치가 연결되지 않았을 때에만 수정할 수 있습니다.</"
-"i>"
+msgid "These settings are only editable when the device is not connected."
+msgstr "이 설정은 장치가 연결되지 않았을 때에만 수정할 수 있습니다."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "형태:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "선택"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "포트:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "사용자:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "도메인:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "공유:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>참고:</b> 여기에 비밀번호를 입력하면, 설정 파일에 <b>비 암호화</b>되어 "
-"저장됩니다. 공유에 접근하기 전에 비밀번호를 입력하려면, 비밀번호를 '-'로 설정"
-"합니다.</i>"
+"여기에 비밀번호를 입력하면, 설정 파일에 <b>비 암호화</b>되어 저장됩니다. 공유"
+"에 접근하기 전에 비밀번호를 입력하려면, 비밀번호를 '-'로 설정합니다."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "서비스 이름:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "폴더:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "기타 선택:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>참고:</b> sshfs의 작동 원리에 따라, 적당한 ssh-askpass 응용프로그램"
-"(ksshaskpass, ssh-askpass-gnome, 등.)이 비밀번호 입력을 위해 필요합니다.</i>"
+"sshfs의 작동 원리에 따라, 비밀번호 입력을 위해서는 적당한 ssh-askpass 응용프"
+"로그램 (ksshaskpass, ssh-askpass-gnome, 등.)이 필요합니다."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>참고:</b> 이 대화상자는 원격장치를 삼바(Samba)등으로 추가하거나 로컬 마"
-"운트된 폴더에 연결할 때만 사용됩니다. 일반적인 미디어 연주기나 USB 장치는 연"
-"결되면 자동으로 표시됩니다.</i>"
+"이 대화상자는 원격장치를 추가(예. Samba)하거나 로컬 마운트된 폴더에 연결할 때"
+"만 사용됩니다. 일반 미디어 연주기나 USB 장치는 연결되면 자동으로 표시됩니다."
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4644,39 +4696,51 @@ msgstr "새로운 동적 규정"
msgid "Edit"
msgstr "수정"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr "등급 구간의 곡:"
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr " - "
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "규정에 대하여"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "아래와 맞는 음악 포함:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "아래와 맞는 음악 제외:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "비슷한 연주자:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "음반연주자:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "시작 연도:"
@@ -4688,127 +4752,130 @@ msgstr "시작 연도:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "모두"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "마지막 연도:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "정확한 맞춤"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
-msgstr "<i><b>참고</b> 찾고자 하는 태그값만 입력합니다. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
+msgstr "찾고자 하는 태그값만 입력합니다."
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>참고</b> 장르에서 별표(*)로 끝나는 문자열은 다양한 장르를 포함합니다. "
-"예) 'rock*'은 'Hard Rock'과 'Rock and Roll'을 포함. </i>"
+"장르에서 별표(*)로 끝나는 문자열은 다양한 장르를 포함합니다. 예) 'rock*'은 "
+"'Hard Rock'과 'Rock and Roll'을 포함."
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr "로컬 파일 추가"
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr "음악 폴더에 내려받은 음반 표지와 연주자 이미지 저장"
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "음악 폴더에 내려받은 가사 저장"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "음악 폴더에 내려받은 배경 저장"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
+msgid ""
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-"<i><b>참고:</b> 음악폴더에 음반표지, 가사 또는 배경을 저장하고, 이 폴더에 쓰"
-"기 권한이 없다면, 개인 캐시 폴더에 파일들을 다시 저장하기 시작합니다.</i>"
+"음악폴더에 음반표지, 가사 또는 배경을 저장하는데 쓰기 권한이 없다면, 개인 캐"
+"시 폴더에 파일들을 저장합니다."
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
-"<i><b>참고:</b> 두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합니"
-"다. (즉, '연주자/음반/곡')</i>"
+"두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합니다. (즉, '연주자/"
+"음반/곡')"
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "처음으로 칸타타 실행"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "칸타타로 맞이합니다"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
"<html><head/><body><p>칸타타는 기능이 다양하고 사용하기가 편리한 Music "
"Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운드 "
@@ -4820,19 +4887,19 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr "<html><head/><body><p>칸타타로 맞이합니다</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
"<html><head/><body><p>칸타타는 기능이 다양하고 사용하기가 편리한 Music "
"Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운드 "
@@ -4841,13 +4908,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "표준 다수 사용자/서버 설정"
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4861,13 +4928,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "기본 단일 사용자 설정"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4877,7 +4944,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4893,13 +4960,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "연결 상세정보"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -4907,66 +4974,64 @@ msgstr ""
"아래 설정은 칸타타에서 기본적으로 필요한 정보입니다. 관련 상세정보를 입력해 "
"주시고, 연결해 보려면 '연결' 단추를 누릅니다."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "호스트 (또는 로컬소켓):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-"<i><b>참고:</b> '음악 폴더' 설정은 음반표지나 가사 등을 찾기 위해 사용됩니"
-"다. 만약 MPD가 원격 호스트에 있다면 HTTP URL로 설정할 수 있습니다.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
-msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"'음악 폴더' 설정은 음반표지나 가사 등을 찾기 위해 사용됩니다. 만약 MPD가 원"
+"격 호스트에 있다면 HTTP URL로 설정할 수 있습니다."
+
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
+msgid ""
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>참고:</b> 로컬소켓을 사용할 때는 절대경로로 설정되어야 합니다 (포트번호"
-"는 필요 없음).</i>"
+"로컬소켓을 사용할 때는 절대경로로 설정되어야 합니다. (포트번호는 필요 없음.)"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "음악 폴더"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "음악 폴더를 선택합니다."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "음반표지, 가사와 스트림"
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -4976,56 +5041,36 @@ msgstr ""
"<p>인터넷으로부터 없는 음반표지와 가사를 내려받습니다.</p><p>이를 위하여, 음"
"악폴더 또는 개인 캐시/설정 폴더에 내려받을 지를 확인합니다.</p>"
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-"<i><b>참고:</b> 칸타타에서 쓰기 권한이 없는 음악 폴더에 음반 표지를 저장하"
-"면, 개인 캐시 폴더에 대신 저장하게 됩니다. 하지만 스트림은 쓰기 권한이 없다"
-"면, 음악 폴더에 저장된 스트림을 보고 연주할 수만 있으며 추가하거나 수정할 수"
-"는 없습니다. 스트림을 음악 폴더에 저장하지 않으면, 로컬 설정 폴더에 저장되며 "
-"해당 사용자만 접근할 수 있습니다.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
-msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-"<i><b>참고:</b> 두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합니"
-"다. 즉, '연주자/음반/곡'</i>"
+"두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합니다. (즉, '연주자/"
+"음반/곡')"
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-"<i><b>참고:</b> '음악 폴더'가 HTTP 주소로 지정되어, 외부 HTTP 서버에 파일을 "
-"올릴 수 없습니다. 따라서 위의 설정은 사용하지 않아야 합니다.</i>"
+"'음악 폴더'가 HTTP 주소로 지정되어, 외부 HTTP 서버에 파일을 올릴 수 없습니"
+"다. 따라서 위의 설정은 사용하지 않아야 합니다."
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "완료!"
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
@@ -5034,9 +5079,24 @@ msgstr ""
"이제 칸타타가 설정되었습니다!<br/><br/>칸타타의 설정 대화창은 MPD 호스트 등을"
"추가하는 것 이외에 외관을 개인화하는 데에 사용할 수 있습니다."
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+"칸타타는 '음반연주자' 태그가 있으면 이를 이용해서 곡을 음반으로 묶고, 아니라"
+"면 '연주자' 태그를 이용합니다. 여러연주자 음반을 제대로 묶기 위해서는 <b>반드"
+"시</b> '음반연주자' 태그를 설정해야 합니다. 이때는 '여러연주자'를 사용하기를 "
+"추천합니다."
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5050,267 +5110,298 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "옆줄"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr "보기"
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr "보기를 선택하려면 아래 항목을 사용합니다."
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-"<i><b>참고:</b> 기본적으로 연주순서는 다른 보기의 옆에 보입니다. 위를 선택한 "
-"경우에는, 다른 보기처럼 옆줄에 합쳐집니다.</i>"
+"기본적으로 연주순서는 다른 보기의 옆에 보이고, 정보보기는 메인 툴바의 아이콘"
+"을 누르면 됩니다. 위에서 적절한 설정을 하면, 다른 보기처럼 옆줄에 합쳐집니다."
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
-"<i><b>참고:</b> 기본적으로 '정보'(지금 곡 정보) 보기는 주 메뉴의 아이콘을 누"
-"르면 사용할 수 있습니다. 위를 선택한 경우에는, 다른 보기처럼 옆줄에 합쳐집니"
-"다.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "방식:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "위치:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "아이콘만 보임"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "단색 아이콘 사용"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "자동 숨김"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "표지:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "연주자이미지 보기"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr "연도순으로 음반 정렬"
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>참고:</b> 연주자이미지를 찾을 때, 지금 곡이 있는 폴더나 상위 폴더의 "
-"artist.jpg, artist.png, '연주자'.jpg 또는 '연주자'.png\n"
-"를 찾습니다.만약 이미지를 찾지 못하면 내려받기를 시도합니다.<i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "연주자이미지 보기"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "음반 정렬:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr "분류:"
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "처음에 음반 펼치지 않기"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "다른 보기"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "폴더 보기:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr "폴더:"
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "스트림 보기:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr "스트림:"
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "온라인 보기:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr "온라인:"
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "장치 보기:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "장치:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr "찾기 보여주기:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "찾기:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "지금 음반을 자동으로 펼치기"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "지금 곡으로 이동"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr "지우기 전에 물어보기"
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr "연주목록에서 찾기 (또는 단축키)"
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "현재 음반표지"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr "툴바"
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr "정지 단추 보기"
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr "지금 곡 표지 보기"
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr "곡 등급 보기"
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "외부"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "곡이 바뀌면 팝업 표시"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
-msgstr "알림 영역에 아이콘 보이기"
+msgstr "알림 영역에 아이콘 보기"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "닫으면 알림 영역으로 최소화"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr "시작할 때"
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
-msgstr "창 보이기"
+msgstr "창 보기"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr "창 숨기기"
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr "이전 상태로"
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "일반"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr "'여러 연주자/한 곡들'아래에 한 곡 음반만을 놓습니다"
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr "한 곡 음반 묶기"
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
"음반을 묶기 위해서 '연주자'나 '음반연주자'가 아니라 '작곡가'를 사용합니다."
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr "작곡가 음반 묶기"
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5323,39 +5414,33 @@ msgstr ""
"'Metal' 장르로 되어 있으면, 장르 필터가 'Metal'로 설정된 상태에서는 이 5곡만 "
"추가됩니다."
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr "필터를 통과하는 곡들만 적용"
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr "표지가 없으면 Last.fm에서 가져오기"
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr "비율표지 캐시"
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
-msgstr "메뉴에 지우기 보이기"
+msgstr "메뉴에 지우기 보기"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr "한 번 클릭 사용"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5363,163 +5448,171 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
"<p>칸타타의 인터페이스를 아래와 같이 바꿉니다:\n"
-"<ul><li>연주와 컨트롤버튼은 33% 더 넓어집니다</li><li>보기는 '깜빡'거립니다"
-"</li><li>드래그하려면, 상단-좌측 모서리를 '터치'해야 합니다</li><li>스크롤바"
-"는 조금 넓어집니다</li><li>동작(예. '연주순서 추가')는 항상 보입니다 (마우스"
-"아래에 항목이 있지 않아도)</li><li>회전 단추가 문자영역 옆에 +와 -를 가집니"
-"다</li></ul></p>"
+"<ul><li>연주와 컨트롤버튼은 33% 더 넓어집니다</li><li>보기는 '깜빡'거립니다</"
+"li><li>드래그하려면, 상단-좌측 모서리를 '터치'해야 합니다</li><li>스크롤바는 "
+"숨겨집니다</li><li>동작(예. '연주순서 추가')는 항상 보입니다 (마우스 아래에 "
+"항목이 있지 않아도)</li><li>회전 단추가 문자영역 옆에 +와 -를 가집니다</li></"
+"ul></p>"
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr "인터페이스를 터치 친화적으로 만들기"
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
-msgstr "툴바에 정지 단추 보이기"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr "곡 정보 툴팁 보기"
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
-msgstr "툴바에 지금 곡 표지 보이기"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr "등급 표시 지원"
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "언어:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
-msgstr ""
-"<i><b>참고:</b> '한 번 클릭 사용' 설정을 바꾸면 다시 시작해야 합니다.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
+msgstr "'한 번 클릭 사용' 설정을 바꾸면 다시 시작해야 합니다."
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr "언어 설정을 바꾸면 다시 시작해야 합니다."
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
-msgstr "<i><b>참고:</b> 언어 설정을 바꾸면 다시 시작해야 합니다.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
+msgstr "'터치 친화적' 설정을 바꾸면 다시 시작해야 합니다."
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
-msgstr "<i><b>참고:</b> '터치 친화적' 설정을 바꾸면 다시 시작해야 합니다.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
+msgstr ""
+"레티나 디스플레이 기능을 켜면 해당기기에서 아이콘이 보다 선명하게 보이지만, "
+"해당기기가 아니면 덜 선명하게 보입니다. 이 설정을 바꾸면 다시 시작해야 합니"
+"다."
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[동적]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr "전체화면 나가기"
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "정지할 때 페이드아웃:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "빠져나가면 연주 정지"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr "연주 중에 절전기능 사용 않기"
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>참고:</b> 정지 단추를 누르고 있으면, 바로 정지할지 지금 곡 다음에 정지"
-"할지를 선택하는 메뉴가 보입니다.</i>"
+"정지 단추를 누르고 있으면, 바로 정지할지 지금 곡 다음에 정지할지를 선택하는 "
+"메뉴가 보입니다. (정지 단추는 인터페이스/툴바에서 켤 수 있습니다)"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "출력"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "곡 사이 크로스페이드:"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr " 초"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "리플레이게인:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "리플레이게인에 대하여"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr "출력을 선택하려면 아래 항목을 켭니다."
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "음원:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "표지 파일이름:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5533,150 +5626,151 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "HTTP 스트림 URL:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>참고:</b> '음악 폴더' 설정은 표지그림을 찾기 위해 사용됩니다 (위에서 설"
-"정된 값 또는 설정되지 않았다면 <code>cover.jpg/cover.png</code>). 이 폴더에 "
-"쓰기 권한이 있다면 내려받은 표지를 각각의 음반 폴더에 저장합니다.</i>"
+"'음악 폴더' 설정은 표지그림을 찾기 위해 사용됩니다 (위에서 설정된 값 또는 설"
+"정되지 않았다면 <code>cover.jpg/cover.png</code>). 이 폴더에 쓰기 권한이 있다"
+"면 내려받은 표지를 각각의 음반 폴더에 저장합니다."
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-"<i><b>참고:</b> 'HTTP 스트림 URL'은 MPD가 HTTP 스트림으로 출력하도록 설정되어"
-"있고, 칸타타로 그 스트림을 연주할 때에만 의미가 있습니다.</i>"
+"'HTTP 스트림 URL'은 MPD가 HTTP 스트림으로 출력하도록 설정되어있고, 칸타타로 "
+"그 스트림을 연주할 때에만 의미가 있습니다."
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>참고:</b> '음악폴더' 설정을 바꾸면, 음악데이터베이스를 직접 업데이트해"
-"야 합니다. 이는 '연주자'나 '음반' 보기의 '데이터베이스 새로 읽기' 단추를 누르"
-"면 됩니다.</i>"
+"'음악폴더' 설정을 바꾸면, 음악데이터베이스를 직접 업데이트해야 합니다. 이는 "
+"'연주자'나 '음반' 보기의 '데이터베이스 새로 읽기' 단추를 누르면 됩니다."
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
-"<i><b>참고:</b> '표지 파일이름'에 설정이 되어 있지 않으면 기본 "
-"<code>cover<code>를 사용합니다 </i>"
+"'표지 파일이름'에 설정이 되어 있지 않으면 기본 <code>cover<code>를 사용합니다"
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "네트워크 연결:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+"MPD는 주로 음악 폴더에 저장된 음악만 연주합니다. 칸타타는 파일을 MPD로 서비스"
+"하는 최소한의 HTTP 서버 역할을 합니다. 다만, 칸타타가 실행되는 한에서만 작동"
+"합니다."
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
msgstr ""
-"<i><b>참고:</b> MPD는 주로 음악 폴더에 저장된 음악만 연주합니다. 칸타타는 파"
-"일을 MPD로 서비스하는 최소한의 HTTP 서버 역할을 합니다. 다만, 칸타타가 실행되"
-"는 한에서만 작동합니다.<br/><br/>\n"
-"<b>참고:</b> 만약 '네트워크 연결'에 '로컬 루프백'을 선택한다면, MPD가 이 컴퓨"
-"터에 <b>반드시</b> 있어야 합니다.</i>"
+"만약 '네트워크 연결'에 '로컬 루프백'을 선택한다면, MPD가 이 컴퓨터에 <b>반드"
+"시</b> 있어야 합니다."
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "모드:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "HTTP 프락시"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "SOCKS 프락시"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr "서비스를 선택하려면 아래 항목을 사용합니다."
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr "스크로블링 사용:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "상태:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "로그인"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr "곡 스크로블링"
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr "'좋아요' 단추 보기"
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5689,141 +5783,154 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "프리미엄 계정"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "스트림 형식:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "세션 만료:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-"<i><b>참고:</b> 이 설정은 Digitally Imported, JazzRadio.com, RockRadio.com, "
-"Sky.fm에만 적용됩니다.</i>"
+"이 설정은 Digitally Imported, JazzRadio.com, RockRadio.com, Sky.fm에 적용됩니"
+"다."
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
-"<i><b>참고:</b> 계정을 입력하면, 스트림 항목 아래에 로그인 여부를 나타내는 "
-"'DI' 상황이 표시됩니다.</i>"
+"계정을 입력하면, 스트림 항목 아래에 'DI' 상태가 표시됩니다. 이것은 로그인 여"
+"부를 나타냅니다."
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr "서비스를 선택하려면 아래 항목을 사용합니다."
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr "서비스 설정"
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr "설치"
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
-msgstr ""
-"<i><b>참고:</b> 기본 설치된 카테고리는 기울어져 보이는데, 이는 삭제할 수 없습"
-"니다.</i>"
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "찾기:"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
+msgstr "기본 설치된 카테고리는 기울어져 보이는데, 이는 삭제할 수 없습니다."
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "선택된 기능 단축키"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "기본:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "개인:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "음반연주자:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "곡 번호:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "디스크 번호:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr "등급:"
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr "<i>(여러)</i>"
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr "다중 장르는 세미콜론으로 나뉘어야 합니다 (예. 'Rock;Hard Rock')"
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
+msgid ""
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
-"<i><b>참조</b> 다중 장르는 세미콜론으로 나뉘어야 합니다 (예. 'Rock;Hard "
-"Rock')</i>"
+"등급은 외부 데이터베이스에 저장되며, 곡 파일에 저정되지 <b>않</b>습니다."
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "원래 이름"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "새 이름"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr "등급은 파일이름이 바뀌면 사라집니다."
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "이름"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "이메일"
@@ -5874,7 +5981,7 @@ msgstr "곡 검색을 취소할까요?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "취소"
@@ -5884,15 +5991,15 @@ msgstr "기존 태그 읽기를 취소할까요?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"<b>전</b>곡을 검색할까요?<br><br><i>참고: 전곡은 기존 리플레이게인을 가지고 "
-"있습니다.</i>"
+"<b>모든</b> 곡을 검색할까요?<br/><br/><i>모든 곡이 리플레이게인 태그가 있음."
+"</i>"
#: replaygain/rgdialog.cpp:263
msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
-msgstr "전곡이나 기존 태그가 없는 곡만 검색할까요?"
+msgstr "모든 곡 또는 태그가 없는 곡만 검색할까요?"
#: replaygain/rgdialog.cpp:264
msgid "Untagged Tracks"
@@ -5900,7 +6007,7 @@ msgstr "태그가 없는 곡"
#: replaygain/rgdialog.cpp:264
msgid "All Tracks"
-msgstr "전곡"
+msgstr "모든 곡"
#: replaygain/rgdialog.cpp:274
msgid "Scanning tracks..."
@@ -5908,19 +6015,19 @@ msgstr "곡 검색 중..."
#: replaygain/rgdialog.cpp:341
msgid "Reading existing tags..."
-msgstr "기존 태그 읽는 중..."
+msgstr "태그를 읽는 중..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr "%1 (태그 오류?)"
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "다음 곡들의 태그를 업데이트할 수 없음:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "장치가 연결되지 않았음."
@@ -5944,63 +6051,63 @@ msgstr "원곡: %1 dB"
msgid "Original: %1"
msgstr "원곡: %1"
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "항목의 선택된 곡을 지울까요?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "곡을 지움"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr "무효 서비스"
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr "무료 방법"
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr "인증 실패"
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr "무효 포맷"
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr "무효 변수"
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr "무효 자원 지정"
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr "기능 실패"
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr "무효 세션 키"
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr "무효 API 키"
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr "서비스 오프라인"
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr "Last.fm이 지금 혼잡하므로, 잠시 후에 다시 해야 합니다"
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr "등급-한도 초과"
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr "%1 오류: %2"
@@ -6012,32 +6119,32 @@ msgstr "%1: 지금 곡 좋아함"
msgid "%1: Love Current Track"
msgstr "%1: 지금 곡 좋아요"
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr "%1 (MPD를 통해서)"
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-"<i><b>참고:</b> (%1 같은)'(MPD를 통해서)'를 선택해서 스크로블링을 하려면, 먼"
-"저 이를 명시하고 실행해야 합니다. 칸타타에서 곡을 '좋아요' 할 수만 있으며, 스"
-"크로블링을 가능하거나 불가능하게 할 수는 없습니다.</i>"
+"(%1 같은)'(MPD를 통해서)'를 선택해서 스크로블링을 하려면, 먼저 이를 명시하고 "
+"실행해야 합니다. 칸타타에서 곡을 '좋아요' 할 수만 있으며, 스크로블링을 가능하"
+"거나 불가능하게 할 수는 없습니다."
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr "인증 중..."
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr "인증됨"
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6067,27 +6174,27 @@ msgstr "AAC 128k"
msgid "Logout"
msgstr "로그아웃"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "URL:"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "연주순서에 추가하고 저장하지 않음"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "연주순서에 추가하고 즐겨찾기에 저장"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "스트림 추가"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "스트림 수정"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>오류:</b> 무효 프로토콜</i>"
@@ -6132,39 +6239,39 @@ msgid "Installing/updating %1"
msgstr "%1 설치/업데이트하는 중"
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
-msgstr "<b>%1</b> 설치 실패함"
+msgid "Failed to install '%1'"
+msgstr "'%1' 설치 실패함"
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
-msgstr "<b>%1</b> 내려받기 실패함"
+msgid "Failed to download '%1'"
+msgstr "'%1' 내려받기 실패함"
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
-msgstr "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr "선택된 스트림 제공자를 설치/업데이트할까요?"
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
-msgstr "아래를 설치합니까?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr "선택된 스트림 제공자를 설치할까요?"
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
-msgstr "아래를 내려받습니까?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr "선택된 스트림 제공자를 업데이트할까요?"
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr "설치/업데이트"
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr "설치/업데이트를 취소합니까?"
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr "%1 내려받는 중"
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr "모두 업데이트"
@@ -6180,192 +6287,198 @@ msgstr "즐겨찾기 스트림을 내보내기"
msgid "Add New Stream To Favorites"
msgstr "새로운 스트림을 즐겨찾기에 추가"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Digitally Imported"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|XML 스트림"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "스트림 불러오기"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "XML 스트림 (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|XML 스트림"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "스트림 내보내기"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr "XML 스트림 (*.xml.gz)"
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "<b>%1</b>을 만들 수 없음!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr "'%1'을 만들 수 없음!"
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "이미 있는 스트림! <br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr "스트림 '%1'은 이미 있습니다!"
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "스트림 <b>%1</b>은 이미 있습니다!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr "스트림 이름 '%1'은 이미 있습니다!"
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "책갈피 추가됨"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "책갈피 이미 있음"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "즐겨찾기에 있음"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "<b>%1</b> 스트림을 다시 읽을까요?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr "스트림 '%1'을 다시 읽을까요?"
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "<b>%1</b>의 책갈피를 지울까요?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr "'%1'의 책갈피를 지울까요?"
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "<b>%1</b>의 모든 책갈피를 지울까요?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr "'%1'의 모든 책갈피를 지울까요?"
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
-msgstr "선택된 %1 스트림을 지울까요?"
+msgstr "선택된 스트림 %1을 지울까요?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "<b>%1</b>을 지울까요?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "'%1'을 지웁니까?"
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "%1 찾기:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "'%1'을 즐겨찾기에 추가함"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr "파일로부터..."
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr "내려받기..."
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.streams|칸타타 스트림"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr "스트림 설치"
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "칸타타 스트림 (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "카테고리 <b>%1</b>은 이미 있습니다!<br/>덮어쓸까요?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"카테고리 '%1' 은 이미 있습니다!\n"
+"\n"
+"덮어쓸까요?"
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
-msgstr "패키지 파일을 열 수 없음"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
+msgstr "패키지 파일을 열 수 없음."
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr "파일 포맷 오류!"
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr "카테고리 폴더를 만들 수 없음!"
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr "스트림 항목을 저장할 수 없음!"
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr "스트림 폴더를 지울 수 없음!"
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "확인(&O)"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "취소(&C)"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "예(&Y)"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "아니오(&N)"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "취소(&D)"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "저장(&S)"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "적용(&A)"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "닫기(&C)"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "덮어쓰기(&O)"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "재설정(&R)"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "계속(&C)"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "지우기(&D)"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "정지(&S)"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "지우기(&R)"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "이전(&P)"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "다음(&N)"
@@ -6377,14 +6490,32 @@ msgstr "비밀번호"
msgid "Please enter password:"
msgstr "비밀번호 입력:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr "닫기"
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "주의"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "질문"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr "창(&W)"
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr "최소화"
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr "확대"
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "폴더 선택"
@@ -6393,57 +6524,94 @@ msgstr "폴더 선택"
msgid "Select File"
msgstr "파일 선택"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 kB"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MB"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 GB"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "하루 %2"
msgstr[1] "%1일 %2"
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "태그"
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr "'연주자'에서 '음반연주자' 설정"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr "파일로부터 등급 읽기"
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr "파일에 등급 쓰기"
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "전곡"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr "\"여러 연주자\" 해결을 <b>전</b>곡에 적용할까요?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>'음반연주자'와 '연주자'를 \"여러 연주자\"로 설정하고, '제목'을 \"곡 연주"
+"자 - 곡 제목\"으로 바꿉니다</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr "\"여러 연주자\" 해결을 <b>전</b>곡에 되돌릴까요?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "\"여러 연주자\" 해결을 되돌림"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>'음반연주자'가 \"곡 연주자 - 곡 제목\" 형태의 '연주자'와 '제목'이 같다면, "
+"'연주자'는 '제목'으로부터 나오고 '제목' 자체는 제목으로 설정됩니다. 예로 <br/"
+"><br/>'제목'이 \"유재하 - 내 마음에 비친 내 모습\"이고 '연주자'가 \"유재하"
+"\"로 설정되면, '제목'은 \"내 마음에 비친 내 모습\"이 됩니다</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6451,72 +6619,157 @@ msgstr ""
"만약 음반연주자가 비어있다면, '연주자'에서 '음반연주자'를 설정하는 것을 <b>전"
"</b>곡에 적용할까요?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr "만약 음반연주자가 비어있다면, '연주자'에서 '음반연주자'를 설정할까요?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "연주자에서 음반연주자"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"<b>전</b>곡의 '제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 할"
-"까요?"
+"<b>전</b>곡의 문자열 (예. '제목', '연주자' 등) 첫글자를 대문자로 할까요?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr "문자열 (예. '제목', '연주자' 등) 첫글자를 대문자로 할까요?"
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "각 곡 순서를 값대로 늘여갑니다:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr "음악 파일 모든 곡의 등급을 읽을까요?"
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr "음악 파일의 등급을 읽을까요?"
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr "등급"
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr "등급 읽기"
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr "등급 읽기"
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr "아래 곡의 등급을 읽고 업데이트 함:"
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr "MPD로부터 모든 곡의 등급을 읽지 않았음!"
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+"곡 등급은 파일이 아니라, MPD의 'sticker' 데이터베이스에 저정됩니다.실제 파일"
+"에 저장하기 위해서, 칸타타는 MPD로부터 등급을 먼저 읽어야 합니다."
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr "MPD로부터 곡 등급을 읽지 않았음!"
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr "모든 곡의 등급을 음악 파일에 쓸까요?"
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr "등급을 음악 파일에 쓸까요?"
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr "등급 쓰기"
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr "등급 쓰기"
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr "아래 파일의 등급을 쓸 수 없음:"
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr "음악 파일에 등급을 쓸 수 없음!"
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "전곡 [수정됨]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [수정됨]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr "태그에 맞추기 위해서, 곡들의 이름을 바꾸겠습니까?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "파일이름 바꾸기"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "파일 이름 바꾸기를 취소할까요?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "원본 파일이 없습니다!<hr/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr "원본 파일이 없음!"
+
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr "대상 파일이 이미 있음!"
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "대상 파일이 이미 있음!<br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr "대상 폴더를 만들 수 없음!"
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "대상 폴더를 만들 수 없음!<br/>%1"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr "파일이름을 '%1'에서 '%2'로 바꿀 수 없습니다"
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "%1을 %2로 이름을 바꿀 수 없음"
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+"곡 등급은 파일이 아니라, MPD의 'sticker' 데이터베이스에 저정됩니다.\n"
+"\n"
+"파일 (또는 저장된 폴더) 이름을 바꾸면, 곡의 등급은 지워집니다."
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(스트림)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\"><b>작곡가:</b></td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr "<tr><td align=\"right\"><b>공연가:</b></td><td>%1</td></tr>"
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6534,7 +6787,7 @@ msgstr "장르 선택"
msgid "All Genres"
msgstr "모든 장르"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "돌아가기"
@@ -6542,15 +6795,19 @@ msgstr "돌아가기"
msgid "Menu"
msgstr "메뉴"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr "<i><b>참고:</b> %1</i>"
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "연주순서 지우기"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "찾기..."
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "검색 줄 닫기"
@@ -6564,21 +6821,26 @@ msgstr "%1로 로그인 <b>안</b>됨"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
-"<p>음악 파일에 접근할 수 없음!<br/><br/>칸타타의 \"Music folder\"와 MPD의 "
-"\"music_directory\" 설정을 확인해야 합니다.</p>"
+"곡 파일에 접근할 수 없음!\n"
+"\n"
+"칸타타의 \"음악 폴더\"와, MPD의 \"music_directory\" 설정을 확인 바랍니다."
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-"<p>음악 파일에 접근할 수 없음!<br/><br/>장치가 아직 연결되어 있는지 확인해야 "
-"합니다.</p>"
+"곡 파일에 접근할 수 없음!\n"
+"\n"
+"장치가 아직 연결되어 있는지 확인 바랍니다."
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr "칸을 늘려 윈도에 맞추기"
@@ -6714,6 +6976,729 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr "%1 업데이트 있음"
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "대상 장치에 여유 공간이 부족합니다.\n"
+#~ "선택된 곡에 필요한 공간은 %1이지만, 남은 공간은 %2입니다.\n"
+#~ "선택된 곡을 복사하려면, 더 작은 파일 크기로 변환해야 합니다."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "사용하고자 하는 장치에 여유 공간이 부족합니다.\n"
+#~ "선택된 곡에 필요한 공간은 %1이지만, 남은 공간은 %2입니다."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>대상 장치가 설정되지 않았습니다.<br/>기본 설정으로 계속할까요?</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>원본 장치가 설정되지 않았습니다.<br/>기본 설정으로 계속할까요?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr "'제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 만듬"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>어떻게 새로 읽을까요?<ul><li>부분 - 새 음악만 읽기 <i>(빠름)</i></"
+#~ "li><li>전체 - 모든 음악 다시 읽기 <i>(느림)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "선택된 곡을 지울까요?\n"
+#~ "되돌릴 수 없습니다."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "<b>%1</b>을 무시할까요?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "오디오 CD <b>%1 - %2</b>을 뺄까요?"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "<b>%1</b>을 끊을까요?"
+
+#~ msgid ""
+#~ "<p>The following variables will be replaced with their corresponding "
+#~ "meaning for each track name.</p>"
+#~ msgstr "<p>아래 변수는 각 곡명의 해당되는 의미에 따라 바뀝니다.</p>"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "원격 장치인 \"%1\"는 이미 있음!\n"
+#~ "다른 이름을 선택해야 합니다"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "선택된 규정을 지울까요?\n"
+#~ "되돌릴 수 없습니다."
+
+#~ msgid ""
+#~ "<p>Cantata will query your library using all of the rules listed. The "
+#~ "list of <i>Include</i> rules will be used to build a set of songs that "
+#~ "can be used. The list of <i>Exclude</i> rules will be used to build a set "
+#~ "of songs that cannot be used. If there are no <i>Include</i> rules, "
+#~ "Cantata will assume that all songs (bar those from <i>Exclude</i>) can be "
+#~ "used. <br/>e.g. to have Cantata look for 'Rock songs by Wibble OR songs "
+#~ "by Various Artists', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> To have Cantata look for 'Songs by Wibble but not from "
+#~ "album Abc', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After the set of "
+#~ "usable songs has been created, Cantata will randomly select songs to keep "
+#~ "the play queue filled with 10 entries.</p>"
+#~ msgstr ""
+#~ "<p>칸타타는 등록된 모든 규정을 이용하여 라이브러리를 조회합니다. <i>포함</"
+#~ "i>된 규정 항목은 사용될 곡들을 선별하는 데에 사용됩니다. <i>제외</i>된 규"
+#~ "정 항목은 사용되지 않을 곡들을 선별하는 데에 사용됩니다. <i>포함</i>된 규"
+#~ "정이 없으면, 전곡(<i>제외</i>된 규정을 제외하고)을 사용할 수 있다고 가정합"
+#~ "니다. <br/>예로 '유재하의 Ballad 및 여러 연주자의 곡'을 선택하려면 다음과 "
+#~ "같이 하면 됩니다: <ul><li>포함 음반연주자=유재하 장르=Ballad</li><li>포함 "
+#~ "음반연주자=여러 연주자</li></ul> '유재하의 모든 곡 중에 미련 음반을 제"
+#~ "외'하려면: <ul><li>포함 음반연주자=유재하</li><li>제외 음반=미련</li></ul>"
+#~ "사용할 곡들이 만들어지면 칸타타는 무작위로 곡들을 선택하여 연주순서에 10"
+#~ "개 항목을 유지합니다.</p>"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "규정 이름인 '%1'는 이미 있음!\n"
+#~ "덮어쓸까요?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>아래 전부를 지웁니까?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "표지 설정에 실패함!\n"
+#~ "임시 파일에 내려받을 수 없음!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "표지를 설정할 수 없음!\n"
+#~ "복사할 수 수 없음!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "표지를 설정할 수 없음!\n"
+#~ "원본을 백업할 수 없음!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "표지를 설정할 수 없음!\n"
+#~ "'%1'에 복사할 수 없음!"
+
+#~ msgid "Medium"
+#~ msgstr "보통"
+
+#~ msgid "Extra Large"
+#~ msgstr "아주 크게"
+
+#~ msgid "Icon/List"
+#~ msgstr "아이콘/목록"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "곡 태그수정"
+
+#~ msgid ""
+#~ "Podcasts are currently being downloaded\n"
+#~ "\n"
+#~ "Quiting now will abort all downloads."
+#~ msgstr ""
+#~ "팟캐스트를 내려받고 있습니다\n"
+#~ "\n"
+#~ "지금 취소하면 모든 내려받기를 그만둡니다."
+
+#~ msgid "Abort downloads and quit"
+#~ msgstr "내려받기를 그만두고 취소"
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "<b>%1</b>이 선호하는 스트림을 저장하기 위해 사용되므로, 다른 이름을 선택합"
+#~ "니다."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr "연주목록 이름 <b>%1</b>이 이미 있습니다!<br/>연주목록에 추가할까요?"
+
+#~ msgid "Can only edit tags of songs within MPD's music collection."
+#~ msgstr "MPD 음원에 있는 곡의 태그만 수정할 수 있습니다."
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>리플레이게인은 MP3나 Ogg Vorbis 같은 오디오 포맷의 소리 크기를 맞추기 "
+#~ "위하여 2001년에 제안된 표준입니다. 곡이나 음반 단위로 작동하며 이제는 점"
+#~ "점 더 많은 연주기가 지원합니다.</p><p>아래 설정이 사용될 수 있습니다:"
+#~ "<ul><li><i>안 함</i> - 리플레이게인을 적용 안 함.</li><li><i>곡</i> - 곡"
+#~ "의 리플레이게인 태그를 이용하여 음량을 조정함.</li><li><i>음반</i> - 음반"
+#~ "의 리플레이게인 태그를 이용하여 음량을 조정함.</li><li><i>자동</i> - 무작"
+#~ "위연주는 곡의 리플레이게인 태그를, 그 밖은 음반의 태그를 이용하여 음량을 "
+#~ "조정함.</li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "선택된 연주목록을 지울까요?\n"
+#~ "돌이킬 수 없습니다."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "연주목록 이름 <b>%1</b>은 이미 있습니다!<br/>덮어쓸까요?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "어떤 형식의 음원에 연결할까요?<br/><ul><li>표준 - 다른 컴퓨터에 연결되거"
+#~ "나 이미 설정되어, 음원을 공유할 수 있음</li><li>기본 - 음원이 공유되지 않"
+#~ "고 MPD만 설정하고 관리함</li></ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "<b>%1</b>을 지울까요?"
+
+#~ msgid "Multi-Media Keys"
+#~ msgstr "멀티미디어 키"
+
+#~ msgid "Do not use media keys to control Cantata"
+#~ msgstr "미디어 키 사용 안 함"
+
+#~ msgid "Use media keys to control Cantata"
+#~ msgstr "미디어 키 사용함"
+
+#~ msgid ""
+#~ "Use media keys, as configured in desktop settings, to control Cantata"
+#~ msgstr "데스크톱 환경에서 설정된 미디어 키 사용함"
+
+#~ msgid ""
+#~ "Use media keys, as configured in GNOME/Unity settings, to control Cantata"
+#~ msgstr "그놈/유니티에서 설정된 미디어 키 사용함"
+
+#~ msgid "Add Albums In Random Order"
+#~ msgstr "무작위로 음반 추가"
+
+#~ msgid "Edit Tags"
+#~ msgstr "태그수정"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(우선순위: %1)</b>"
+
+#~ msgid "Unsubscribe from <b>%1</b>?"
+#~ msgstr "<b>%1</b>을 구독 취소할까요?"
+
+#~ msgid "Refresh episode listing from <b>%1</b>?"
+#~ msgstr "<b>%1</b>의 팟캐스트 항목을 새로 읽을까요?"
+
+#~ msgid "All selected podcasts have already been downloaded!"
+#~ msgstr "이미 선택된 모든 팟캐스트를 내려받았습니다!"
+
+#~ msgid "Do you wish to download the following podcast episode?"
+#~ msgstr "아래 팟캐스트의 한 에피소드를 내려받을까요?"
+
+#~ msgid "Do you wish to download the following podcast episodes?"
+#~ msgstr "아래 팟캐스트의 여러 에피소드를 내려받을까요? "
+
+#~ msgid "All selected downloaded podcast episodes have already been deleted!"
+#~ msgstr "이미 선택된 모든 팟캐스트를 지웠습니다!"
+
+#~ msgid ""
+#~ "Do you wish to delete the downloaded file of the following podcast "
+#~ "episode?"
+#~ msgstr "아래 팟캐스트 에피소드에서 내려받은 한 파일을 지울까요?"
+
+#~ msgid ""
+#~ "Do you wish to the delete downloaded files of the following podcast "
+#~ "episodes?"
+#~ msgstr "아래 팟캐스트 에피소드에서 내려받은 파일들을 지울까요?"
+
+#~ msgid "Automatically download new episodes"
+#~ msgstr "새로운 에피소드 자동 내려받기"
+
+#~ msgid ""
+#~ "Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
+#~ "all three."
+#~ msgstr ""
+#~ "세 화면 모두 볼 수 있는 폭이더라도, '연주자', '음반' 또는 '가사'만 봅니다."
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 칸타타는 위키피디아의 이미지나 링크가 포함된 전체 페이지"
+#~ "가 아니라, 이를 단순화해서 보여줍니다. 이 단순화는 항상 100% 정확하지는 않"
+#~ "아서, 기본 본문을 보여주게 됩니다. 전체 본문에서는 오류가 있을 수 있습니"
+#~ "다. 또한 '캐시' 설정을 이용하여 저장된 기본 본문을 지워야 합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#~ msgstr "<i><b>참고:</b> Mopidy 서버에 연결됨 (수동 업데이트 필요).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 이 설정은 장치가 연결되었을 때에만 유효하고 수정할 수 있습"
+#~ "니다.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "연주자 이름에 'The' 무시"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 이 설정은 장치가 연결되지 않았을 때에만 수정할 수 있습니"
+#~ "다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 여기에 비밀번호를 입력하면, 설정 파일에 <b>비 암호화</b>되"
+#~ "어 저장됩니다. 공유에 접근하기 전에 비밀번호를 입력하려면, 비밀번호를 "
+#~ "'-'로 설정합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> sshfs의 작동 원리에 따라, 적당한 ssh-askpass 응용프로그램"
+#~ "(ksshaskpass, ssh-askpass-gnome, 등.)이 비밀번호 입력을 위해 필요합니다.</"
+#~ "i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 이 대화상자는 원격장치를 삼바(Samba)등으로 추가하거나 로"
+#~ "컬 마운트된 폴더에 연결할 때만 사용됩니다. 일반적인 미디어 연주기나 USB 장"
+#~ "치는 연결되면 자동으로 표시됩니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr "<i><b>참고</b> 찾고자 하는 태그값만 입력합니다. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>참고</b> 장르에서 별표(*)로 끝나는 문자열은 다양한 장르를 포함합니"
+#~ "다. 예) 'rock*'은 'Hard Rock'과 'Rock and Roll'을 포함. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
+#~ "backdrops, within the music folder, and you do not have write access to "
+#~ "this folder, then Cantata will revert to saving the files in your "
+#~ "personal cache folder.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 음악폴더에 음반표지, 가사 또는 배경을 저장하고, 이 폴더에 "
+#~ "쓰기 권한이 없다면, 개인 캐시 폴더에 파일들을 다시 저장하기 시작합니다.</"
+#~ "i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
+#~ "Tracks')</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합"
+#~ "니다. (즉, '연주자/음반/곡')</i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>칸타타는 기능이 다양하고 사용하기가 편리한 Music "
+#~ "Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운"
+#~ "드 어플입니다.</p><p>MPD에 대한 더 많은 정보는, 다음 웹사이트를 참조 바랍"
+#~ "니다. <a href=\"http://www.musicpd.org\"><span style=\" text-decoration: "
+#~ "underline; color:#0000ff;\">http://www.musicpd.org</span></a></p><p>이 '마"
+#~ "법사'는 칸타타가 제대로 동작하기 위한 사용자의 기본 설정을 돕습니다.</p></"
+#~ "body></html>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music. MPD may be started either system-wide, or on a per-"
+#~ "user basis. Please select how you would like to have Cantata initially "
+#~ "connect to (or startup) MPD:</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>칸타타는 기능이 다양하고 사용하기가 편리한 Music "
+#~ "Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운"
+#~ "드 어플입니다. MPD는 시스템이나 사용자 기반에서 시작할 수 있습니다. 칸타타"
+#~ "가 처음에 어떻게 MPD에 연결되고 시작할 지를 선택합니다:</p></body></html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
+#~ "lyrics, etc. If you're MPD instance is on a remote host, you may set this "
+#~ "to a HTTP URL.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '음악 폴더' 설정은 음반표지나 가사 등을 찾기 위해 사용됩니"
+#~ "다. 만약 MPD가 원격 호스트에 있다면 HTTP URL로 설정할 수 있습니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 로컬소켓을 사용할 때는 절대경로로 설정되어야 합니다 (포트"
+#~ "번호는 필요 없음).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, "
+#~ "within the music folder, and you do not have write access to this folder, "
+#~ "then Cantata will revert to saving the files in your personal cache "
+#~ "folder. However, for streams, if you do not have write access, then you "
+#~ "will only be able to view (and play) the streams stored in the music "
+#~ "folder, and not add (or edit) any streams. If you elect not to store "
+#~ "streams within the music folder, then these will be saved in your local "
+#~ "config folder - and will only be accessible to yourself.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 칸타타에서 쓰기 권한이 없는 음악 폴더에 음반 표지를 저장하"
+#~ "면, 개인 캐시 폴더에 대신 저장하게 됩니다. 하지만 스트림은 쓰기 권한이 없"
+#~ "다면, 음악 폴더에 저장된 스트림을 보고 연주할 수만 있으며 추가하거나 수정"
+#~ "할 수는 없습니다. 스트림을 음악 폴더에 저장하지 않으면, 로컬 설정 폴더에 "
+#~ "저장되며 해당 사용자만 접근할 수 있습니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/"
+#~ "Tracks'.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합"
+#~ "니다. 즉, '연주자/음반/곡'</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
+#~ "currently cannot upload files to external HTTP servers. Therefore, the "
+#~ "above settings should be left un-checked.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '음악 폴더'가 HTTP 주소로 지정되어, 외부 HTTP 서버에 파일"
+#~ "을 올릴 수 없습니다. 따라서 위의 설정은 사용하지 않아야 합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the play queue appears to the side of the "
+#~ "other views. If you enable the option above, then it will be merged into "
+#~ "the sidebar as per other views.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 기본적으로 연주순서는 다른 보기의 옆에 보입니다. 위를 선택"
+#~ "한 경우에는, 다른 보기처럼 옆줄에 합쳐집니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
+#~ "accessible by pressing its icon in the main toolbar. If you enable the "
+#~ "option above, then it will be merged into the sidebar as per other views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 기본적으로 '정보'(지금 곡 정보) 보기는 주 메뉴의 아이콘을 "
+#~ "누르면 사용할 수 있습니다. 위를 선택한 경우에는, 다른 보기처럼 옆줄에 합쳐"
+#~ "집니다.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "표지:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 연주자이미지를 찾을 때, 지금 곡이 있는 폴더나 상위 폴더의 "
+#~ "artist.jpg, artist.png, '연주자'.jpg 또는 '연주자'.png\n"
+#~ "를 찾습니다.만약 이미지를 찾지 못하면 내려받기를 시도합니다.<i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "음반 정렬:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "폴더 보기:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "스트림 보기:"
+
+#~ msgid "Online view style:"
+#~ msgstr "온라인 보기:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "장치 보기:"
+
+#~ msgid "Search view style:"
+#~ msgstr "찾기 보여주기:"
+
+#~ msgid "Cache scaled covers"
+#~ msgstr "비율표지 캐시"
+
+#~ msgid ""
+#~ "<p>This will change Cantata's interface as detailed:\n"
+#~ "<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views "
+#~ "will be 'flickable'</li><li>To drag items, you will need to 'touch' the "
+#~ "top-left corner</li><li>Scrollbars will only be a few pixels wide</"
+#~ "li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not "
+#~ "just when item is under mouse)</li><li>Spin buttons with have + and - "
+#~ "buttons at the side of the text field</li></ul></p>"
+#~ msgstr ""
+#~ "<p>칸타타의 인터페이스를 아래와 같이 바꿉니다:\n"
+#~ "<ul><li>연주와 컨트롤버튼은 33% 더 넓어집니다</li><li>보기는 '깜빡'거립니"
+#~ "다</li><li>드래그하려면, 상단-좌측 모서리를 '터치'해야 합니다</li><li>스크"
+#~ "롤바는 조금 넓어집니다</li><li>동작(예. '연주순서 추가')는 항상 보입니다 "
+#~ "(마우스아래에 항목이 있지 않아도)</li><li>회전 단추가 문자영역 옆에 +와 -"
+#~ "를 가집니다</li></ul></p>"
+
+#~ msgid "Show stop button in toolbar"
+#~ msgstr "툴바에 정지 단추 보기"
+
+#~ msgid "Show cover of current track in toolbar"
+#~ msgstr "툴바에 지금 곡 표지 보기"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '한 번 클릭 사용' 설정을 바꾸면 다시 시작해야 합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr "<i><b>참고:</b> 언어 설정을 바꾸면 다시 시작해야 합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
+#~ "start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '터치 친화적' 설정을 바꾸면 다시 시작해야 합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 정지 단추를 누르고 있으면, 바로 정지할지 지금 곡 다음에 정"
+#~ "지할지를 선택하는 메뉴가 보입니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '음악 폴더' 설정은 표지그림을 찾기 위해 사용됩니다 (위에"
+#~ "서 설정된 값 또는 설정되지 않았다면 <code>cover.jpg/cover.png</code>). 이 "
+#~ "폴더에 쓰기 권한이 있다면 내려받은 표지를 각각의 음반 폴더에 저장합니다.</"
+#~ "i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD "
+#~ "configured to output to a HTTP stream, and you wish Cantata to be able to "
+#~ "play that stream.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 'HTTP 스트림 URL'은 MPD가 HTTP 스트림으로 출력하도록 설정"
+#~ "되어있고, 칸타타로 그 스트림을 연주할 때에만 의미가 있습니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '음악폴더' 설정을 바꾸면, 음악데이터베이스를 직접 업데이트"
+#~ "해야 합니다. 이는 '연주자'나 '음반' 보기의 '데이터베이스 새로 읽기' 단추"
+#~ "를 누르면 됩니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> '표지 파일이름'에 설정이 되어 있지 않으면 기본 "
+#~ "<code>cover<code>를 사용합니다 </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> MPD는 주로 음악 폴더에 저장된 음악만 연주합니다. 칸타타는 "
+#~ "파일을 MPD로 서비스하는 최소한의 HTTP 서버 역할을 합니다. 다만, 칸타타가 "
+#~ "실행되는 한에서만 작동합니다.<br/><br/>\n"
+#~ "<b>참고:</b> 만약 '네트워크 연결'에 '로컬 루프백'을 선택한다면, MPD가 이 "
+#~ "컴퓨터에 <b>반드시</b> 있어야 합니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio."
+#~ "com, RockRadio.com, and Sky.fm</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 이 설정은 Digitally Imported, JazzRadio.com, RockRadio."
+#~ "com, Sky.fm에만 적용됩니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter account details, then a 'DI' status item "
+#~ "will appear under the list of streams. This will indicate if you are "
+#~ "logged in or not</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 계정을 입력하면, 스트림 항목 아래에 로그인 여부를 나타내"
+#~ "는 'DI' 상황이 표시됩니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot "
+#~ "be removed.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> 기본 설치된 카테고리는 기울어져 보이는데, 이는 삭제할 수 "
+#~ "없습니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
+#~ "'Rock;Hard Rock')</i>"
+#~ msgstr ""
+#~ "<i><b>참조</b> 다중 장르는 세미콜론으로 나뉘어야 합니다 (예. 'Rock;Hard "
+#~ "Rock')</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "<b>전</b>곡을 검색할까요?<br><br><i>참고: 전곡은 기존 리플레이게인을 가지"
+#~ "고 있습니다.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via "
+#~ "MPD)' (such as %1), then you will need to have this already started and "
+#~ "running. Cantata can only 'Love' tracks via this, and cannot enable/"
+#~ "disable scrobbling.</i>"
+#~ msgstr ""
+#~ "<i><b>참고:</b> (%1 같은)'(MPD를 통해서)'를 선택해서 스크로블링을 하려면, "
+#~ "먼저 이를 명시하고 실행해야 합니다. 칸타타에서 곡을 '좋아요' 할 수만 있으"
+#~ "며, 스크로블링을 가능하거나 불가능하게 할 수는 없습니다.</i>"
+
+#~ msgid "Failed to install <b>%1</b>"
+#~ msgstr "<b>%1</b> 설치 실패함"
+
+#~ msgid "Failed to download <b>%1</b>"
+#~ msgstr "<b>%1</b> 내려받기 실패함"
+
+#~ msgid "ListenLive"
+#~ msgstr "ListenLive"
+
+#~ msgid "Install the following?"
+#~ msgstr "아래를 설치합니까?"
+
+#~ msgid "Update the following?"
+#~ msgstr "아래를 내려받습니까?"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "<b>%1</b>을 만들 수 없음!"
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "이미 있는 스트림! <br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "스트림 <b>%1</b>은 이미 있습니다!"
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "<b>%1</b> 스트림을 다시 읽을까요?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "<b>%1</b>의 책갈피를 지울까요?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "<b>%1</b>의 모든 책갈피를 지울까요?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "<b>%1</b>을 지울까요?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "카테고리 <b>%1</b>은 이미 있습니다!<br/>덮어쓸까요?"
+
+#~ msgid "Failed top open package file"
+#~ msgstr "패키지 파일을 열 수 없음"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "<b>전</b>곡의 '제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 "
+#~ "할까요?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "원본 파일이 없습니다!<hr/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "대상 파일이 이미 있음!<br/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "대상 폴더를 만들 수 없음!<br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "%1을 %2로 이름을 바꿀 수 없음"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music "
+#~ "folder\" setting, and MPD's \"music_directory\" setting.</p>"
+#~ msgstr ""
+#~ "<p>음악 파일에 접근할 수 없음!<br/><br/>칸타타의 \"Music folder\"와 MPD의 "
+#~ "\"music_directory\" 설정을 확인해야 합니다.</p>"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check that the device is "
+#~ "still attached.</p>"
+#~ msgstr ""
+#~ "<p>음악 파일에 접근할 수 없음!<br/><br/>장치가 아직 연결되어 있는지 확인해"
+#~ "야 합니다.</p>"
+
#~ msgid "TextLabel"
#~ msgstr "문자표"
@@ -7197,9 +8182,6 @@ msgstr "%1 업데이트 있음"
#~ msgid " seconds"
#~ msgstr " 초"
-#~ msgid "Devices:"
-#~ msgstr "장치:"
-
#~ msgid "Current URL:"
#~ msgstr "현재 URL:"
@@ -7305,9 +8287,6 @@ msgstr "%1 업데이트 있음"
#~ msgid "Disc %1"
#~ msgstr "디스크 %1"
-#~ msgid "Are you sure you wish to forget '%1'?"
-#~ msgstr "'%1'을 무시할까요?"
-
#~ msgid "Biography"
#~ msgstr "경력"
@@ -7399,9 +8378,6 @@ msgstr "%1 업데이트 있음"
#~ msgid "Online Music"
#~ msgstr "온라인음악"
-#~ msgid "Are you sure you wish to remove '%1'?"
-#~ msgstr "'%1'을 지웁니까?"
-
#~ msgid "Are you sure you wish to unload '%1'?"
#~ msgstr "'%1'을 읽지 않습니까?"
diff --git a/po/pl.po b/po/pl.po
index 794a3c2..02dcf09 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
-"PO-Revision-Date: 2014-07-10 19:05+0200\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
+"PO-Revision-Date: 2014-10-14 16:46+0200\n"
"Last-Translator: Piotr Wicijowski <piotr.wicijowski at gmail.com>\n"
"Language-Team: Polish <kde-i18n-doc at kde.org>\n"
"Language: pl\n"
@@ -23,10 +23,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "Odśwież informacje o albumie"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "Album"
@@ -37,32 +37,33 @@ msgstr "Album"
msgid "Tracks"
msgstr "Utwory"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "Odśwież informacje o artyście"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "Artysta"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "Albumy"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Linki sieciowe"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "Podobni Artyści"
@@ -70,28 +71,28 @@ msgstr "Podobni Artyści"
msgid "Lyrics Providers"
msgstr "Dostawcy tekstów"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "Język Wikipedii"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "Inne"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "Resetuj odstępy"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "&Artysta"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "Al&bum"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr "U&twór"
@@ -121,16 +122,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "Tytuł:"
@@ -138,17 +139,17 @@ msgstr "Tytuł:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "Artysta:"
@@ -164,38 +165,39 @@ msgstr "Proszę wybrać strony z tekstami."
msgid "Song Information"
msgstr "Informacje o utworze"
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "Obrazy (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr "10px"
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr "%1px"
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "Teksty"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "Informacja"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "Tagi"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr "Metadane"
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -217,14 +219,14 @@ msgstr "Usuń plik z tekstami"
msgid "Refresh Track Information"
msgstr "Odśwież informacje o utworze"
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "Anuluj"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "Utwór"
@@ -240,7 +242,7 @@ msgstr ""
"Załadować z dysku, czy usunąć z dysku i pobrać?"
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "Odśwież"
@@ -273,39 +275,39 @@ msgstr "Usunąć plik z tekstami?"
msgid "Delete File"
msgstr "Usuń plik"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr "Artysta albumu"
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr "Kompozytor"
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr "Twórca tekstu"
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr "Dyrygent"
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr "Twórca remixu"
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr "Podtytuł"
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr "Numer utworu"
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr "Numer płyty"
@@ -317,102 +319,119 @@ msgstr "Numer płyty"
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "Gatunek"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "Data"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr "Oryginalna data"
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr "Komentarz"
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr "Prawa autorskie"
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr "Wytwórnia muzyczna"
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr "Numer katalogowy"
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr "Tytuł (sortowanie)"
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr "Artysta (sortowanie)"
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr "Artysta albumu (sortowanie)"
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr "Album (sortowanie) "
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr "Enkodowane przez"
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "Enkoder"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr "Nastruj"
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr "Nośnik"
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "Bitrate"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr "Częstość próbkowania"
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr "Kanały"
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr "Czas tagowania"
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr "Wykonawca (%1)"
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr "%1 kb/s"
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr "%1 Hz"
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr "Bity"
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr "Wykonawca"
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "Rok"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr "Nazwa pliku"
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "Pobieranie tekstów z %1"
@@ -462,16 +481,16 @@ msgstr "Cantata odtwarza utwór"
msgid "Songs To Be Copied"
msgstr "Utwory do skopiowania"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>NIEWŁAŚCIWY</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(Gdy różne)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -486,135 +505,144 @@ msgstr ""
"odświeżyć bazę danych Mopidy i zrestartować Cantatę aby uaktywnić wszelkie "
"zmiany."
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "Artyści:%1, Albumy:%2, Utwory:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 wolnego miejsca"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "Lokalna biblioteka muzyki"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "Płyta audio"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-"Nie ma wystarczająco miejsca na urządzeniu docelowym.\n"
-"Zaznaczone utwory zajmują %1, jednak pozostało jedynie %2 miejsca.\n"
-"Aby utwory mogły zostać skopiowane, będą musiały zostać skonwertowane do "
-"plików o mniejszych rozmiarach."
+"Nie ma wystarczająco miejsca na docelowym urządzeniu.\n"
+"\n"
+"Zaznaczone utwory zajmują %1, jednak wolnego miejsca zostało jedynie %2.\n"
+"Utwory musiałyby zostać transkodowane do mniejszego rozmiary aby je "
+"skopiować z powodzeniem."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"W lokalizacji docelowej nie ma wystarczająco dużo miejsca.\n"
-"Zaznaczone utwory zajmują %1, jednak pozostało jedynie %2 miejsca."
+"Nie ma wystarczająco miejsca w lokalizacji docelowej.\n"
+"\n"
+"Zaznaczone utwory zajmują %1, jednak wolnego miejsca zostało jedynie %2."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "Skopiuj utwory"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "Usuń utwory"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Urządzenie docelowe nie zostało skonfigurowane.<br/>Czy kontynuować z "
-"domyślnymi ustawieniami?</p>"
+"Urządzenie docelowe nie zostało skonfigurowane.\n"
+"\n"
+"Kontynuować z ustawieniami domyślnymi?"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "Nie skonfigurowano"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "Użyj domyślnych"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Urządzenie źródłowe nie zostało skonfigurowane.<br/>Czy kontynuować z "
-"domyślnymi ustawieniami?</p>"
+"Urządzenie źródłowe nie zostało skonfigurowane.\n"
+"\n"
+"Kontynuować z ustawieniami domyślnymi?"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "Czy na pewno zatrzymać?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "Stop"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "Urządzenie zostało usunięte!"
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "Urządzenie nie jest podłączone!"
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "Urządzenie jest zajęte?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "Urządzenie zostało zmienione?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "Czyszczenie nieużywanych katalogów"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "Obliczyć ReplayGain zgranych utworów?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
msgstr "ReplayGain"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "Oblicz"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "Istnieje plik o nazwie docelowej!"
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "Utwór już istnieje!"
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "Utwór nie istnieje!"
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
@@ -622,31 +650,31 @@ msgstr ""
"Tworzenie katalogu docelowego nie powiodło się!<br/>Proszę upewnić się, że "
"ustawione są odpowiednie prawa dostępu."
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "Plik źródłowy już nie istnieje?"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "Kopiowanie nie powiodło się."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "Usuwanie nie powiodło się."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "Brak połączenia z urządzeniem."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "Wybrany kodek nie jest dostępny."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "Konwertowanie nie powiodło się."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
@@ -654,172 +682,174 @@ msgstr ""
"Stworzenie pliku tymczasowego nie powiodło się.<br/>(Wymagane przy "
"konwertowaniu do urządzeń MTP.)"
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "Odczyt pliku źródłowego nie powiódł się."
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "Zapis do pliku docelowego nie powiódł się!"
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "Brak miejsca na urządzeniu."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "Uaktualnienie metadanych nie powiodło się."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "Pobieranie utworu nie powiodło się."
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "Zablokowanie urządzenia nie powiodło się."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "Ustawienia lokalnej biblioteki muzyki"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "Błąd"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "Pomiń"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "Automatycznie pomiń"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "Spróbuj ponownie"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "Album:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "Utwór:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "Plik źródłowy:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "Plik docelowy:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "Plik:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "Obliczanie..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (Szacunkowo)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "Pozostało:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "Zapisywanie pamięci podręcznej"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "Zastosuj obejście dla 'Various Artists'"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "Cofnij obejście dla 'Various Artists'"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Duża pierwsza litera"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "Dostosuj numery utworów"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "Narzędzia"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "Zastosować obejście dla 'Various Artists'?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>Spowoduje to ustawienie tagów 'ArtystaAlbumu' oraz 'Artysta' na wartość "
-"\"Various Artists\", zaś tagu 'Tytuł' na \"ArtystaUtworu - TytułUtworu\"</i>"
+"To ustawi tagi 'Artysta albumu' oraz 'Artysta' na \"Various Artists\" oraz "
+"tag 'Tytuł' na \"Artysta utworu - Tytuł utworu\""
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "Cofnij obejście dla 'Various Artists'"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr "Przywrócić wartości tagów sprzed obejścia \"Various Artists\"?"
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>W przypadku, gdy tag 'ArtystaAlbumu' jest taki sam jak 'Artysta' oraz tag "
-"'Tytuł' jest formatu \"ArtystaUtworu - TytułUtworu\", to tag 'Artysta' "
-"zostanie pobrany z tagu 'Tytuł' a sam 'Tytuł' zostanie przywrócony do "
-"wartości \"TytułUtworu\". Dla przykładu: <br/><br/> Jeśli 'Tytuł' to "
-"\"Wibble - Wobble\", wtedy 'Artysta' zostanie ustawiony na \"Wibble\" "
-"natomiast 'Title' będzie miał wartość \"Wobble\"</i>"
+"Jeżeli 'Artysta albumu' jest taki sam jak 'Artysta' oraz 'Tytuł' jest "
+"formatu \"Artysta utworu - Tytuł utworu\", to wartość tagu 'Artysta' "
+"zostanie wydzielona z tagu 'Tytuł', natomiast nowa wartość tagu 'Tytuł' "
+"ustawiona będzie na 'Tytuł utworu', np.\n"
+"Jeśli 'Tytuł' to \"Wibble - Wobble\", to 'Artysta' zostanie ustawiony na "
+"\"Wibble\" a 'Tytuł' na \"Wobble\""
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "Odwróć"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-"Duża pierwsza litera w tagach 'Title', 'Artist', 'Album artist', oraz 'Album'"
+"Ustawić dużą pierwszą literę tagów 'Tytuł', 'Artysta', 'Artysta albumu' oraz "
+"'Album'?"
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "Zmień numery utworów o:"
@@ -867,8 +897,8 @@ msgstr "Znaleziono wiele pasujących wyników. Proszę wybrać jeden z poniższy
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "Tytuł"
@@ -990,75 +1020,79 @@ msgstr "Synchronizacja"
msgid "Forget Device"
msgstr "Zapomnij o urządzeniu"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "Dodaj urządzenie"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "Czy wyszukać szczegóły albumu i utworów?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "Odśwież"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "Za pośrednictwem CDDB"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "Za pośrednictwem MusicBrainz"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
-msgstr ""
-"<p>Jaki rodzaj odświeżenia ma zostać wykonany?<ul><li>Częściowy - tylko nowe "
-"utwory zostaną przeskanowane <i>(szybki)</i></li><li>Pełny - Wszystkie "
-"utwory zostaną przeskanowane <i>(wolny)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr "Jaki typ odświeżenia ma zostać przeprowadzony?"
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr "Częściowe - tylko nowe utwory są przeskanowane (szybkie)"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr "Pełne - wszystkie utwory są skanowane (wolne)"
+
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "Częściowy"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "Pełny"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Czy jesteś pewien, że chcesz usunąć zaznaczone utwory?\n"
-"Ta operacja nie może zostać cofnięta."
+"Czy na pewno usunąć zaznaczone utwory?\n"
+"\n"
+"Ta operacja nie może być cofnięta."
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "Czy na pewno zapomnieć <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "Czy na pewno zapomnieć '%1'?"
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "Czy na pewno wysunąć płytę audio <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr "Czy na pewno wysunąć płytę audio '%1 - %2'?"
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "Wysuń"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "Czy na pewno rozłączyć się z <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr "Czy na pewno rozłączyć się z '%1'?"
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "Rozłącz"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "Proszę najpierw zamknąć inne okna dialogowe."
@@ -1171,7 +1205,7 @@ msgstr ""
">Wartości poniżej <b>120kb/s</b> mogą nie być satysfakcjonujące dla muzyki, "
"a wszystko powyżej <b>205kb/s</b> jest prawdopodobnie przesadzone."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1296,7 +1330,7 @@ msgstr ""
"<br>Polecany jedynie dla odtwarzaczy muzycznych firmy Apple oraz odtwarzaczy "
"nie obsługujących formatu FLAC."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1430,13 +1464,12 @@ msgstr "Dance"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-"<p>Następujące zmienne zostaną zastąpione ich wartościami dla każdego pliku."
-"</p>"
+"Następujące zmienne zostaną zastąpione ich znaczeniami dla każdego utworu."
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
@@ -1444,53 +1477,52 @@ msgstr ""
"<tr><th><em>Zmienna</em></th><th><em>Przycisk</em></th><th><em>Opis</em></"
"th></tr>"
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "Uaktualnianie...."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "Odczytywanie pamięci podręcznej"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "Łączenie się z urządzeniem..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "Nie znaleziono urządzeń"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "Połączono z urządzeniem"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "Rozłączono urządzenie"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "Wysyłanie katalogów..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "Uaktualniania plików..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "Uaktualnianie utworów..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "Nie połączono"
@@ -1498,7 +1530,7 @@ msgstr "Nie połączono"
msgid "%1 (Disc %2)"
msgstr "%1 (Płyta %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "Nie znaleziono pasujących wyników w MusicBrainz"
@@ -1506,17 +1538,19 @@ msgstr "Nie znaleziono pasujących wyników w MusicBrainz"
msgid "Connection"
msgstr "Połączenie"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "Biblioteka muzyki"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"Urządzenie zdalne o nazwie \"%1\" już istnieje!\n"
-"Proszę wybrać inną nazwę"
+"Urządzenie zdalne o nazwie '%1' już istnieje!\n"
+"\n"
+"Proszę wybrać inną nazwę."
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1597,20 +1631,20 @@ msgstr "Pojemność nieznana"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "Szukaj"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "Zaznacz elementy"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "Odznacz elementy"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "Brak zaznaczenia"
@@ -1654,7 +1688,7 @@ msgstr "Nieprawidłowa nazwa pliku."
msgid "Failed to save %1."
msgstr "Zapisywanie nie powiodło się %1."
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "Usunięcie pliku z regułami nie powiodło się. (%1)"
@@ -1686,20 +1720,24 @@ msgstr "Podano nieprawidłowe argumenty."
msgid "Unknown method called."
msgstr "Wywołano nieznaną metodę."
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "Nieznany błąd"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "Uruchom playlistę dynamiczną"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "Zatrzymaj tryb dynamiczny"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr " - Ocena: %1..%2"
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
@@ -1707,52 +1745,53 @@ msgstr ""
"Należy w systemie zainstalować narzędzie \"perl\" aby tryb dynamiczny "
"Cantaty mógł działać."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "Odnalezienie pliku z regułami nie powiodło się - %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "Usunięcie poprzedniego pliku z regułami nie powiodło się - %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "Instalacja pliku z regułami nie powiodła się - %1 -> %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "Dynamizer został wyłączony."
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "Zapisywanie reguły"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "Usuwanie reguły"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "Oczekiwanie na odpowiedź dla poprzedniej komendy. (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr "Zapisywanie nie powiodło się %1. (%2)"
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Kontrola stanu dynamizera nie powiodła się. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "Ustawianie dynamicznych reguł nie powiodło się. (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
msgstr ""
-"Komunikacja ze zdalnym dynamizerem została zerwana, powrót do trybu lokalnego."
+"Komunikacja ze zdalnym dynamizerem została zerwana, powrót do trybu "
+"lokalnego."
#: dynamic/dynamicpage.cpp:40
msgid "Add Dynamic Rules"
@@ -1769,27 +1808,29 @@ msgstr "Usuń dynamiczne reguły"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Czy jesteś pewien, że chcesz usunąć zaznaczone reguły?\n"
-"Ta operacja nie może zostać cofnięta."
+"Czy na pewno usunąć zaznaczone reguły?\n"
+"\n"
+"Ta operacja nie może być cofnięta."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "Dynamiczna reguła"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "Dodaj"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr ""
"<i><b>BŁĄD</b>: 'Od roku' powinno mieć mniejszą wartość niż 'Do roku'</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1821,77 +1862,86 @@ msgstr " (Dokładnie)"
msgid "Dynamic Rules"
msgstr "Dynamiczne reguły"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr "Informacje o dynamicznych regułach"
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-"<p>Cantata przeszuka bibliotekę używając wszystkich przypisanych reguł. "
-"Lista reguł <i>Zawiera</i> zostanie użyta do zbudowania zbioru utworów, "
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+"<p>Cantata odpyta bazę danych używając wszystkich podanych reguł. Lista "
+"reguł o nazwie <i>Zawiera</i> zostanie użyta do zbudowania listy utworów, "
"które mogą zostać użyte. Lista reguł <i>Nie zawiera</i> zostanie użyta do "
-"zbudowania zbioru utworów, które nie będą użyte. Jeśli nie ma reguł typu "
-"<i>Zawiera</i> to Cantata zakłada, że wszystkie utwory (oprócz pasujących do "
-"reguł <i>Nie zawiera</i>) mogą zostać użyte. <br/>Dla przykładu, aby Cantata "
-"szukała 'Rockowych utworów w wykonaniu Wibble ALBO utworów w wykonaniu "
-"Various Artists', wymagane będą następujące reguły: <ul><li>Zawiera "
+"zbudowania listy utworów, które nie mogą być użyte. Jeśli lista reguł "
+"<i>Zawiera</i> jest pusta, to Cantata przyjmuje, że wszystkie utwory (za "
+"wyjątkiem nie spełniających reguł <i>Nie zawiera</i>) mogą być użyte.</"
+"p><p>np. aby Cantata wyszukała wszystkich 'Rockowych utworów artysty Wibble "
+"lub Various Artists', należy użyć następujących reguł: <ul><li>Zawiera "
"ArtystaAlbumu=Wibble Gatunek=Rock</li><li>Zawiera ArtystaAlbumu=Various "
-"Artists</li></ul> aby Cantata szukała 'Utworów w wykonaniu Wibble ale nie z "
-"albumu Abc', wymagane będą następujące reguły:<ul><li>Zawiera "
-"ArtystaAlbumu=Wibble</li><li>Nie zawiera Album=Abc</li></ul>Po utworzeniu "
-"zbioru utworów pasujących do reguł, Cantata losowo będzie wybierać z niej "
-"utwory tak, aby kolejka odtwarzania była wypełniona 10 elementami.</p>"
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"Artists</li></ul> Aby Cantata wyszukała 'Utworów w wykonaniu Wibble ale nie "
+"z albumu Abc', należy użyć: <ul><li>Zawiera ArtystaAlbumu=Wibble</li><li>Nie "
+"zawiera ArtystaAlbumu=Wibble Album=Abc</li></ul>Po tym jak lista utworów "
+"możliwych do użycia zostanie stworzona, Cantata losowo wybierze utwory do "
+"wypełnienia kolejki odtwarzania przynajmniej 10 utworami. Jeśli w regułach "
+"podano zakres ocen, to jedynie utwory o podanej ocenie zostaną użyte.</p>"
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "Nie powiodło się zapisywanie %1"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
"Zestaw reguł o nazwie '%1' już istnieje!\n"
+"\n"
"Nadpisać?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "Nadpisz reguły"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "Zapisywanie %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "Usuwanie..."
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "Nazwa"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "Liczba elementów"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "Użyta przestrzeń"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr "Całkowita użyta przestrzeń: %1"
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1900,73 +1950,73 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
"Cantata przechowuje w pamięci podręcznej listę muzyki aby przyspieszyć "
-"ładowanie biblioteki. Cantata może ponadto w ten sposób przechowywać okładki, "
-"teksty oraz obrazy artystów jeśli zostały one pobrane i nie mogły być "
-"zapisane w katalogu z muzyką (w przypadku gdy Cantata nie ma do niego dostępu "
-"albo gdy wybrano opcję, aby nie zapisywać tam plików). Poniżej przedstawiono "
-"podsumowanie obecnego użycia pamięci podręcznej."
+"ładowanie biblioteki. Cantata może ponadto w ten sposób przechowywać "
+"okładki, teksty oraz obrazy artystów jeśli zostały one pobrane i nie mogły "
+"być zapisane w katalogu z muzyką (w przypadku gdy Cantata nie ma do niego "
+"dostępu albo gdy wybrano opcję, aby nie zapisywać tam plików). Poniżej "
+"przedstawiono podsumowanie obecnego użycia pamięci podręcznej."
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "Okładki"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "Przeskalowane okładki"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "Tło"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "Informacje o artyście"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "Informacje o albumie"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr "Informacje o utworze"
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr "Listy strumieni"
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "Jamendo"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "Magnatune"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr "Katalogi podcastów"
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr "Scrobbluj utwory"
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "Usuń wszystko"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "Czy usunąć wszystkie '%1' elementów?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "Usuń elementy pamięci podręcznej"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>Czy usunąć wszystkie z wymienionych?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr "Usunąć elementy ze wszystkich zaznaczonych kategorii?"
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1977,7 +2027,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1988,69 +2038,71 @@ msgstr ""
"%1\n"
"%2 x %3"
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "Obecna okładka"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr "Archiwum okładek"
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "Obraz"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "Pobieranie..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "Obraz (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr "Istnieje już obraz dla danego artysty, a plik nie może być nadpisany."
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr "Istnieje już okładka dla danego albumu, a plik nie może być nadpisany."
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr "'%1' Obraz artysty"
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr "'%1 - %2' Okładka albumu"
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
"Ustawienie okładki nie powiodło się!\n"
-"Nie można pobrać do pliku tymczasowego!"
+"\n"
+"Nie można pobrać do tymczasowego pliku!"
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "Pobieranie obrazu nie powiodło się!"
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "Załaduj okładkę lokalną"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "Plik istnieje już na liście!"
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "Odczyt obrazu nie powiódł się!"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "Wyświetl"
@@ -2062,36 +2114,42 @@ msgstr "Wyświetl"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "Usuń"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
"Ustawienie okładki nie powiodło się!\n"
-"Nie można wykonać kopii!"
+"\n"
+"Nie można stworzyć kopii!"
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-"Failed to set cover!\n"
-"Nie można zrobić kopii zapasowej oryginału!"
+"Ustawienie okładki nie powiodło się!\n"
+"\n"
+"Nie można stworzyć kopii zapasowej oryginału!"
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
"Ustawienie okładki nie powiodło się!\n"
+"\n"
"Nie można skopiować pliku do '%1'!"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "Szukanie..."
@@ -2108,258 +2166,200 @@ msgstr "Nawiązano połączenie"
msgid "Connection Failed"
msgstr "Połączenie nie powiodło się"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr "Album, artysta, rok"
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr "Album, rok, artysta"
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr "Artysta, album, rok"
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr "Artysta, rok, album"
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr "Rok, album, artysta"
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr "Rok, artysta, album"
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "Brak"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "Małe"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "Średnie"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "Duże"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "Bardzo duże"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr "Drzewo podstawowe (bez ikon)"
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "Proste drzewo"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "Szczegółowe drzewo"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "Grupuj Albumy"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "Lista"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "Ikony/Lista"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr "Siatka"
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "Tabela"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "Kolejka odtwarzania"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "Artyści"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "Katalogi"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "Playlisty"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "Dynamiczne playlisty"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "Strumienie (np. stacje radiowe)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr "Serwisy online - Jamendo, Maganatune, SoundCloud, i podcasty"
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr "Urządzenia - UMS, MTP (np. Android), i płyty AudioCDs"
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr "Szukaj (przez MPD)"
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr ""
"Informacje - szczegóły dotyczące obecnego utworu (artysta, album i teksty)"
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "Styl:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Duże"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Małe"
+
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr "Pasek kart"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "Z lewej"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "Z prawej"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "U góry"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "U dołu"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr "Powiadomienia"
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "Domyślne systemowe"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "Cantata"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "Klient KDE dla odtwarzacza MPD "
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "© 2011-2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "Opiekun"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "Poprawki interfejsu"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "Autor QtMPC"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
@@ -2367,114 +2367,119 @@ msgstr ""
"Tła widoku kontekstowego (proszę rozpatrzeć przesłanie własnych obrazów na "
"fanart.tv)"
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "Wikipedia"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "Metadane widoku kontekstowego"
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "URL do otwarcia"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "Konfiguruj Cantatę..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr "Ustawienia"
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "Zamknij"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "O programie Cantata..."
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "Pokaż okno"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "Informacja serwera..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "Odśwież bazę danych"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr "Pełne odświeżenie"
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "Połącz"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "Kolekcja"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "Wyjścia"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "Zatrzymaj po utworze"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "Dodaj do zapisanej playlisty"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "Usuń wszystkie poza"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "Dodaj URL strumienia"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "Wyczyść"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr "Wycentruj na obecnym utworze"
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "Interfejs rozszerzony"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "Pokaż informacje o obecnym utworze"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "Pełen ekran"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "Losowo"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "Powtarzaj"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "Tryb pojedynczy"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2483,11 +2488,11 @@ msgstr ""
"utworze; utwór jest zapętlany, jeśli dodatkowo jest włączony tryb "
"'Powtarzaj'."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "Tryb konsumowania"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
@@ -2495,107 +2500,115 @@ msgstr ""
"Gdy tryb konsumowania jest aktywny, obecny utwór jest usuwany z kolejki po "
"jego zakończeniu."
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr "Znajdź w kolejce odtwarzania"
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "Ustaw priorytet"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "Odtwarzaj strumień"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "Znajdź w bibliotece"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "Edytuj tagi utworów"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "Rozwiń wszystkie"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "Zwiń wszystkie"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr "Usuń wszystkie utwory"
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr "Wyczyść stan \"nowy\" artystów i albumów"
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "Dynamiczny"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "Strumienie"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "On-line"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "Urządzenia"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "Informacje"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr "Pokaż pasek menu"
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr "&Muzyka"
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "&Edytuj"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr "&Widok"
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr "&Kolejka"
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "&Ustawienia"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "&Pomoc"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr "Ustaw ocenę"
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr "Brak oceny"
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
"Nie udało się znaleźć żadnych utworów pasujących do reguł dynamicznej "
"playlisty."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "Łączenie z %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "Odświeżyć bazę danych MPD?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "O programie Cantata"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2606,7 +2619,7 @@ msgstr ""
"Drummond<br/>Wydano na warunkach licencji <a href=\"http://www.gnu.org/"
"licenses/gpl.html\">GPLv3</a>"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
@@ -2614,7 +2627,7 @@ msgstr ""
"Program bazujący na <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © "
"2007-2010 Autorzy QtMPC "
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
@@ -2623,7 +2636,7 @@ msgstr ""
"Tło widoku kontekstowego za uprzejmością <a href=\"http://www.fanart.tv"
"\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2632,7 +2645,7 @@ msgstr ""
"Metadane widoku kontekstowego za uprzejmością <a href=\"http://www.wikipedia."
"org\">Wikipedii</a> i <a href=\"http://www.last.fm\">Last.fm</a>"
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2640,21 +2653,33 @@ msgstr ""
"Proszę rozpatrzeć przesłanie własnych obrazów na <a href=\"http://www.fanart."
"tv\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
msgstr ""
-"Trwa pobieranie podcastów\n"
+"Obecnie trwa pobieranie podcastu\n"
"\n"
-"Zamknięcie programu spowodowałoby przerwanie wszystkich pobrań."
+"Wyjście z programu spowoduje przerwanie pobierania."
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr "Przerwij pobieranie i zakończ"
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr "Włączone: %1"
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr "Wyłączone: %1"
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
-msgstr "Anuluj pobieranie i zakończ"
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Informacje serwera"
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2664,12 +2689,11 @@ msgid ""
msgstr ""
"<tr><td colspan=\"2\"><b>Serwer</b></td></tr><tr><td align=\"right"
"\">Protokół: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Czas "
-"pracy:"
-" </td><td>%4</td></tr><tr><td align=\"right\">Odtwarzanie: </td><td>"
-"%5</td></tr><tr><td align=\"right\">Obsługa URL: </td><td>%6</td></"
-"tr><tr><td align=\"right\">Tagi: </td><td>%7</td></tr>"
+"pracy: </td><td>%4</td></tr><tr><td align=\"right\">Odtwarzanie: </"
+"td><td>%5</td></tr><tr><td align=\"right\">Obsługa URL: </td><td>%6</"
+"td></tr><tr><td align=\"right\">Tagi: </td><td>%7</td></tr>"
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2681,82 +2705,103 @@ msgstr ""
"\">Artyści: </td><td>%1</td></tr><tr><td align=\"right\">Albumy: </"
"td><td>%2</td></tr><tr><td align=\"right\">Utwory: </td><td>%3</td></"
"tr><tr><td align=\"right\">Czas trwania: </td><td>%4</td></tr><tr><td "
-"align="
-"\"right\">Aktualizacja: </td><td>%5</td></tr>"
-
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "Informacje serwera"
+"align=\"right\">Aktualizacja: </td><td>%5</td></tr>"
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "Cantata (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr "MPD zgłosił następujący błąd: %1"
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr "Odtwarzanie zatrzymane"
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr "Usunąć wszystkie utwory z kolejki odtwarzania?"
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "Priorytet"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "Wpisz priorytet (0..255):"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "Nazwa playlisty"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "Proszę wpisać nazwę dla playlisty:"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-"<b>%1</b> jest używane do przechowywania ulubionych strumieni, należy wybrać "
-"inną nazwę."
+"'%1' jest używane do przechowywania ulubionych strumieni, proszę wybrać inną "
+"nazwę."
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
-msgstr "Playlista o nazwie <b>%1</b> już istnieje!<br/>Dodać do tej playlisty?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
+msgstr ""
+"Playlista o nazwie '%1' już istnieje!\n"
+"\n"
+"Dodać do tej playlisty?"
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "Istniejąca playlista"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "URL strumienia"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr "Podaj adres URL strumienia:"
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr "Niepoprawny lub niewspierany adres URL!"
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr ""
-"Można edytować tagi jedynie utworów znajdujących się w kolekcji muzyki MPD."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Brak"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "Automatycznie"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
@@ -2764,9 +2809,9 @@ msgstr ""
"<i>Połączono z %1<br/>Poniższe ustawienia dotyczą aktualnie połączonej "
"kolekcji MPD.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2774,32 +2819,32 @@ msgstr ""
"<i>Brak połączenia.<br/>Poniższe ustawienia nie mogą być modyfikowane, "
"ponieważ Cantata nie jest połączona z MPD.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
-msgstr ""
-"<p>ReplayGain jest propozycją standardu opublikowaną w 2001, której celem "
-"jest normalizacja odczuwanej głośności komputerowych formatów audio takich "
-"jak MP3 lub Ogg Vorbis. Działa na podstawie utworu/albumu i jest obsługiwany "
-"przez rosnącą liczbę odtwarzaczy.</p><p>Następujące ustawienia ReplayGain "
-"mogą zostać użyte: <ul><li><i>Brak</i> - ReplayGain nie jest stosowany.</"
-"li><li><i>Utwór</i> - Głośność jest dostosowywana na podstawie tagu "
-"ReplayGain utworu.</li><li><i>Album</i> - Głośność jest dostosowywana na "
-"podstawie tagu ReplayGain albumu.</li><li><i>Automatycznie</i> - Głośność "
-"jest dostosowywana na podstawie tagu ReplayGain utworu gdy kolejność "
-"odtwarzania jest losowa. W przeciwnym wypadku użyty jest tag albumu.</li></"
-"ul></p>"
-
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+"li></ul>"
+msgstr ""
+"ReplayGain jest propozycją standardu opublikowaną w 2001 mającą na celu "
+"znormalizowanie odczuwanej głośności komputerowych formatów dźwięku takich "
+"jak MP3 albo Ogg Vorbis. ReplayGain operuje na utworach i całych albumach i "
+"jest obsługiwany na rosnącej liczbie odtwarzaczy.<br/><br/>Następujące "
+"ustawienia ReplayGain mogą być użyte:<ul><li><i>Brak</i> - Informacja "
+"ReplayGain nie jest używana.</li><li><i>Utwór</i> - Głośność jest "
+"dostosowywana na podstawie tagu ReplayGain utworu.</li><li><i>Album</i> - "
+"Głośność jest dostosowywana na podstawie tagu ReplayGain albumu.</"
+"li><li><i>Automatycznie</i> - Głośność jest dostosowywana na podstawie tagu "
+"ReplayGain utworu jeśli włączone jest odtwarzanie losowe, w przeciwnym "
+"wypadku używany jest tag ReplayGain albumu.</li></ul>"
+
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "Zmień nazwę"
@@ -2807,35 +2852,43 @@ msgstr "Zmień nazwę"
msgid "Remove Duplicates"
msgstr "Usuń duplikaty"
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Czy jesteś pewien, że chcesz usunąć zaznaczone playlisty?\n"
-"Ta operacja nie może zostać cofnięta."
+"Czy na pewno usunąć zaznaczone playlisty?\n"
+"\n"
+"Ta operacja nie może być cofnięta."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "Usuń playlisty"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Playlista o nazwie <b>%1</b> już istnieje!<br/>Nadpisać?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Playlista o nazwie '%1' już istnieje!\n"
+"\n"
+"Nadpisać?"
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "Nadpisz playlisty"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "Zmiana nazwy playlisty"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "Proszę wpisać nową nazwę dla playlisty:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr "Nie można dodać utworów z '%1' do '%2'"
@@ -2909,113 +2962,117 @@ msgstr[0] "1 aktualizacja dostępna"
msgstr[1] "%1 aktualizacje dostępne"
msgstr[2] "%1 aktualizacji dostępnych"
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "Ustawienia kolekcji"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "Odtwarzanie"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "Ustawienia odtwarzania"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "Pliki"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "Ustawienia pliku"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "Interfejs"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "Ustawienia interfejsu"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr "Ustawienia strumieni"
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr "Dostawcy online"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "Kontekst"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "Ustawienia widoku kontekstowego"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr "Scrobbling"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr "Ustawienia scrobblowania"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "Serwer HTTP"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "Ustawienia serwera HTTP"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "Ustawienia płyt audio"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "Proxy"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "Ustawienia Proxy"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "Skróty"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "Ustawienia skrótów klawiszowych"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "Pamięć podręczna"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "Elementy w pamięci podręcznej"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr "Ustawienia Cantaty"
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "Konfiguruj"
@@ -3023,60 +3080,64 @@ msgstr "Konfiguruj"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr "Kompozytor:"
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr "Wykonawca:"
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "Gatunek:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr "Komentarz:"
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "Data:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr "Zmodyfikowano:"
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr "Dowolne:"
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "Nie znaleziono utworów."
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
@@ -3084,337 +3145,317 @@ msgstr ""
"<i> Ten katalog będzie dodatkowo użyty do odnajdywania plików w celu "
"transferu do i z urządzeń.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "Host:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr "Do jakiego typu kolekcji program ma się połączyć?"
+
+#: gui/serversettings.cpp:240
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
msgstr ""
-"Do jakiego rodzaju kolekcji program ma się połączyć?<br/><ul><li>Standardowa "
-"- kolekcja muzyczna może być współdzielona, jest na innej maszynie lub jest "
-"już skonfigurowana</li><li>Podstawowa - kolekcja muzyki nie jest "
-"współdzielona z innymi i Cantata skonfiguruje i będzie kontrolować instancję "
-"MPD</li></ul>"
+"Standardowy - kolekcja muzyki może być współdzielona, jest na innej maszynie "
+"lub jest już skonfigurowana."
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:241
+msgid ""
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
+msgstr ""
+"Podstawowy - kolekcja muzyki nie jest współdzielona z innymi i Cantata "
+"skonfiguruje i będzie kontrolować instancję MPD"
+
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "Dodaj kolekcję"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "Standardowa"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "Podstawowa"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "Usunąć <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr "Usunąć '%1'?"
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "Usuń"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "Nowa kolekcja %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "Domyślne"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr "Klawisze multimedialne"
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr "Nie używaj klawiszy multimedialnych do kontrolowania Cantaty"
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr "Użyj klawiszy multimedialnych do kontrolowania Cantaty"
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-"Użyj klawiszy multimedialnych do kontrolowania Cantaty, zgodnie z "
-"ustawieniami pulpitu"
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-"Użyj klawiszy multimedialnych do kontrolowania Cantaty, zgodnie z "
-"ustawieniami GNOME/Unity"
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "Konfiguruj..."
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "Poprzedni utwór"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "Następny utwór"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "Odtwarzaj/Wstrzymaj"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "Zatrzymaj po obecnym utworze"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "Zwiększ głośność"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "Zmniejsz głośność"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "Zapisz jako"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "Dodaj do kolejki odtwarzania"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr "Dodaj albumy w losowej kolejności"
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "Zastąp kolejkę odtwarzania"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "Dodaj z priorytetem"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "Najwyższy priorytet (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "Wysoki priorytet (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "Średni priorytet (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "Niski priorytet (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "Domyślny priorytet (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "Inny priorytet..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "Dodaj do playlisty"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Organizuj pliki"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "Edytuj tagi"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "ReplayGain"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr "Edytuj informacje o utworze"
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "Skopiuj utwory do urządzenia"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "Ustaw obraz"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr "Szukaj"
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "Teraz odtwarzane"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr "Lokalny loopback (%1)"
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr "Przewodowy (%1)"
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr "Bezprzewodowy (%1)"
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "Pierwszy aktywny interfejs"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr "Odtwarzaj"
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr "Wstrzymaj"
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%1 w wykonaniu %2"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Plik .cue"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "Playlista"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "Konfiguruj urządzenie"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "Odśwież urządzenie"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "Połącz z urządzeniem"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "Rozłącz urządzenie"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "Edytuj szczegóły CD"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "Brak podłączonych urządzeń"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "Nie zalogowano"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "Zalogowano"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "Brak subskrypcji"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "Nie ma aktywnych subskrypcji"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "Zalogowano (wygaśnięcie: %1)"
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "Sesja wygasła"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "Plik audio"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "Pojedyncze utwory"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "Konfiguruj serwis"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "Odśwież serwis"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "Dodaj subskrypcję"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "Usuń subskrypcję"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "Odśwież subskrypcję"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "Ostatnie wyszukiwanie:%1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "Nie załadowano"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "Użyj wyszukiwania do odnalezienia utworów"
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(Pobieranie: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr "(Pobierz zakolejkowane)"
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "Nowa playlista..."
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "Inteligentna lista odtwarzania"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "Długość"
@@ -3422,6 +3463,10 @@ msgstr "Długość"
msgid "Disc"
msgstr "Płyta"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr "Ocena"
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr "Cofnij"
@@ -3444,87 +3489,83 @@ msgstr "Sortuj przy użyciu"
msgid "Album Artist"
msgstr "Artysta albumu"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(Priorytet: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "Ładowanie..."
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "Zakładki"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr "Dirble"
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Favourites"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "Kategoria zakładek"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Dodaj strumień do ulubionych"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "Konfiguruj strumienie"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "Nieznany"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "\"%1\""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "\"%1\" (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "Połączenie z %1 nie powiodło się"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr "Połączenie z %1 nie powiodło się - proszę sprawdzić ustawienia proxy"
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "Połączenie z %1 nie powiodło się - nieprawidłowe hasło"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "Nie powiodło się wysyłanie komendy do %1 - nie połączono"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr ""
"Załadowanie nie powiodło się. Proszę upewnić się, że użytkownik \"mpd\" ma "
"prawa odczytu."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
@@ -3532,27 +3573,27 @@ msgstr ""
"Załadowanie nie powiodło się. MPD może odtwarzać lokalne pliki tylko gdy "
"jest połączony poprzez lokalne gniazdo."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "Wysyłanie komendy nie powiodło się. Rozłączono z %1"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "Zmiana nazwy z <b>%1</b> na <b>%2</b> nie powiodła się"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "Zapisanie <b>%1</b> nie powiodło się"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr "Nie można dodać części pliku cue do playlisty!"
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr "Nie można dodać playlisty do innej playlisty!"
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
"Wysłanie \"%1\" do %2 nie powiodło się. Należy sprawdzić, czy %2 jest "
@@ -3562,15 +3603,11 @@ msgstr ""
msgid "Personal"
msgstr "Osobiste"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "Nieznany"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "Various Artists"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3584,12 +3621,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr "<b>%1</b> na <b>%2</b>"
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr "<b>%1</b> w wykonaniu <b>%2</b> na <b>%3</b>"
@@ -3622,19 +3659,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "Format strumienia:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "Strumieniowanie"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3644,85 +3681,85 @@ msgstr "Ustawienia Magnatune"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "Użytkownik:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "Hasło:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "Członkostwo:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "Pobieranie:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "Pobieranie"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "Uaktualnianie wyświetlanych elementów"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "Grupowanie utworów"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "Przetwarzanie odpowiedzi"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "Parsowanie nie powiodło się"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "Pobieranie nie powiodło się"
@@ -3738,131 +3775,137 @@ msgstr "Pobierz odcinki podcastu"
msgid "Delete Downloaded Podcast Episodes"
msgstr "Usuń pobrane odcinki podcastu"
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr "Anuluj pobieranie odcinka podcastu"
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr "Oznacz odcinki podcastu jako nowe"
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr "Oznacz odcinki podcastu jako wysłuchane"
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Konfiguruj..."
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "Szukaj %1:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "Czy pobrać ponownie listę muzyki dla %1?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "Pobierz ponownie"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
-msgstr "Usunąć subskrypcję <b>%1</b>?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr "Wypisać się z '%1'?"
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr "Odświeżyć listę podcastów?"
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr "Odświeżyć listę podcastów z <b>%1</b>?"
-
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr "Wszystkie zaznaczone podcasty zostały już pobrane!"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr "Odświeżyć listę odcinków z '%1'?"
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr "Czy pobrać następujący odcinek podcastu?"
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
-msgstr "Czy pobrać następujące odcinki podcastu?"
-
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr "Czy pobrać zaznaczone odcinki podcastu?"
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
-msgstr "Wszystkie zaznaczone odcinki zostały już usunięte?"
-
-#: online/onlineservicespage.cpp:693
-msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
-msgstr "Czy usunąć pobrany plik następującego odcinka podcastu?"
-
-#: online/onlineservicespage.cpp:696
+#: online/onlineservicespage.cpp:648
msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
-msgstr "Czy usunąć pobrane pliki następujących odcinków podcastu?"
+"Cancel podcast episode downloads (both current and any that are queued)?"
+msgstr ""
+"Anulować pobieranie odcinków podcastu (zarówno obecnych jak i "
+"zakolejnowanych)?"
-#: online/onlineservicespage.cpp:699
+#: online/onlineservicespage.cpp:685
msgid ""
"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr "Czy usunąć pobrane pliki zaznaczonych odcinków podcastu?"
-#: online/podcastsearchdialog.cpp:253
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr "Czy oznaczyć zaznaczone odcinki podcastu jako nowe?"
+
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr "Czy oznaczyć zaznaczone odcinki podcastu jako wysłuchane?"
+
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "Strona:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "Szczegóły podcastu"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr "Zaznacz podcast aby wyświetlić jego szczegóły"
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr "Wprowadź termin do wyszukiwania..."
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "Pobieranie podcastów z %1 nie powiodło się"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr "Wystąpił problem podczas parsowania odpowiedzi z %1"
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr "Pobranie listingu katalogów nie powiodło się"
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr "Parsowanie listingu katalogów nie powiodło się"
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "URL"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr "Podaj adres URL podcastu..."
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr "Załaduj"
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr "Wprowadź poniżej URL podcastu i wciśnij przycisk \"Załaduj\""
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr "Nieprawidłowy URL!"
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr "Pobieranie podcastu nie powiodło się!"
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr "Parsowanie podcastu nie powiodło się."
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
@@ -3870,61 +3913,61 @@ msgstr ""
"Cantata obsługuje jedynie podcasty audio! Podany URL zawiera wyłącznie "
"podcasty wideo."
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr "Subskrybuj"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr "Wprowadź URL"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr "Ręczny URL podcastu"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "Szukaj %1"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr "Szukaj podcastów na %1"
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr "Dodaj subskrypcję podcastu"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr "Przeglądaj %1"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr "Przeglądaj %1 podcastów"
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr "Dodano subskrypcję"
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr "Subskrypcja do danego podcastu już istnieje!"
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "Podcasty"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
"Cantata obsługuje jedynie podcasty audio! %1 zawiera wyłącznie podcasty "
"wideo."
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr "Parsowanie %1 nie powiodło się"
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr "Pobieranie %1 nie powiodło się"
@@ -3936,59 +3979,77 @@ msgstr "Sprawdź w poszukiwaniu nowych odcinków:"
msgid "Download episodes to:"
msgstr "Pobierz odcinki do:"
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
-msgstr "Automatycznie pobieraj odcinki"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr "Pobieraj automatycznie:"
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr "Ustawienia podcastów"
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr "Ręcznie"
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr "Co 15 minut"
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr "Co 30 minut"
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr "Co godzinę"
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr "Co 2 godziny"
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr "Co 6 godzin"
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr "Co 12 godzin"
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr "Codziennie"
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr "Co tydzień"
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr "Nie pobieraj automatycznie odcinków"
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr "Najnowszy odcinek"
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr "Najnowsze %1 odcinków"
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr "Wszystkie odcinki"
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr "Obraz tła"
@@ -4000,61 +4061,61 @@ msgstr "Obraz artysty"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr "Własny obraz"
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr "Rozmycie:"
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10px"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr "Przezroczystość:"
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40%"
@@ -4079,7 +4140,7 @@ msgstr "Nie zmieniaj automatycznie"
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " ms"
@@ -4108,8 +4169,8 @@ msgstr "Zawsze zwiń do pojedynczego panelu"
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
"Pokazuj wyłącznie \"Artystę\", \"Album\" lub \"Tekst\", nawet jeśli jest "
"wystarczająco miejsca na pokazanie wszystkich trzech."
@@ -4120,25 +4181,23 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "Pokazuj tylko podstawowy tekst z Wikipedii"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Cantata nie wyświetla pełnych stron Wikipedii (z obrazami, "
-"linkami itp.). Zamiast tego wyświetlana jest okrojona wersja. Okrojenie nie "
-"jest zawsze w 100% prawidłowe, dlatego Cantata może wyświetlać tylko "
-"podstawowy wstęp każdego artykułu. W przypadku wybrania wyświetlania pełnego "
-"artykułu mogą pojawiać się błędy parsowania. Wtedy też trzeba usunąć "
-"wszystkie artykuły z pamięci podręcznej (używając strony 'Pamięć podręczna')."
-"<i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
+"Cantata pokazuje jedynie skrócone wersje stron wikipedii (bez obrazków, "
+"linków itp.). Skracanie stron nie zawsze jest poprawne w 100%, dlatego "
+"domyślnie Cantata pokazuje jedynie wstęp. Przy wybraniu opcji pokazania "
+"pełnego artykułu może dojść do błędów parsowania. W takim wypadku konieczne "
+"będzie również usunięcie artykułów obecnie przechowywanych w pamięci "
+"podręcznej (używając strony 'Pamięć podręczna')."
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4195,24 +4254,21 @@ msgid "To copy:"
msgstr "Do skopiowania:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Połączono z serwerem Mopidy (wymagane ręczne odświeżenie).</"
-"i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
+msgstr "Połączono z serwerem Mopidy (ręczna aktualizacja konieczna)."
#. i18n: file: devices/albumdetails.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
@@ -4222,13 +4278,13 @@ msgstr "Szczegóły albumu"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "Rok:"
@@ -4293,172 +4349,171 @@ msgid "Never skip on read error"
msgstr "Nigdy nie pomijaj przy błędach odczytu"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-"<i><b>UWAGA:</b> Te ustawienia są poprawne i edytowalne gdy urządzenie jest "
-"podłączone.</i>"
+"Te ustawienia są poprawne i można je edytować jedynie gdy urządzenie jest "
+"podłączone."
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "Nazwa:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "Katalog z muzyką:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "Kopiuj okładki albumów jako:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "Maksymalny rozmiar okładek:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "Domyślny wolumin:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr "Obejście dla 'Various Artists'"
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "Automatycznie skanuj muzykę po podłączeniu"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "Używaj pamięci podręcznej"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "Nazwy plików"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "Schemat nazwy pliku:"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "Bezpieczne dla VFAT"
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "Używaj jedynie znaków ASCII"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "Zastąp spacje znakami podkreślenia"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "Ignoruj 'The' w nazwach artystów"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr "Dodaj 'The' to nazw artystów."
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "Konwertowanie"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4586,176 +4641,171 @@ msgid "The genre of the album."
msgstr "Gatunek albumu."
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-"<i><b>UWAGA:</b> Te ustawienia są edytowalne gdy urządzenie nie jest "
-"podłączone.</i>"
+"Te ustawienia można edytować jedynie gdy urządzenie nie jest podłączone."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "Typ:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "Opcje"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "Port:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "Użytkownik:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "Domena:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "Udział:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>UWAGA:</b> Jeśli hasło zostanie wpisane w to pole, to będzie ono "
-"przechowywane w postaci <b>niezaszyfrowanej</b> w pliku konfiguracyjnym "
-"Cantaty. Aby Cantata za każdym razem pytała o hasło przed dostępem do "
-"zasobu, należy ustawić hasło na '-'</i>"
+"Jeżeli hasło zostanie wpisane tutaj, to będzie ono przechowywane w postaci "
+"<b>niezaszyfrowanej</b> w pliku konfiguracyjnym Cantaty. Aby program Cantata "
+"za każdym razem pytał o hasło podczas dostępu do udziału należy hasło "
+"ustawić na '-'"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "Nazwa serwisu:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "Katalog:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "Opcje dodatkowe:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>UWAGA:</b> Z powodu sposobu działania sshfs, odpowiednia aplikacja ssh-"
-"askpass (ksshaskpass, ssh-askpass-gnome, itp.) jest wymagana do podawania "
-"hasła.</i>"
+"W związku z mechanizmem działania sshfs, odpowiednia aplikacja typu ssh-"
+"askpass (ksshaskpass, ssh-askpass-gnome, itp.) konieczna jest do wpisania "
+"hasła."
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>UWAGA:</b> To okno dialogowe służy jedynie do dodawania zdalnych "
-"urządzeń (np. za pomocą Samba) oraz do uzyskiwania dostępu do lokalnie "
-"zamontowanych katalogów. Normalne odtwarzacze muzyczne, podłączane przy "
-"użyciu USB, Cantata wyświetli automatycznie gdy zostaną podłączone.</i>"
+"To okno dialogowe jest używane jedynie do dodawania zdalnych urządzeń (np. "
+"za pomocą protokołu Samba) albo w celu dostępu do lokalnie zamontowanych "
+"katalogów. W przypadku normalnych odtwarzaczy mediów podłączonych przez USB "
+"Cantata automatycznie wyświetli urządzenie gdy będzie ono podłączone."
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4775,39 +4825,51 @@ msgstr "Nazwa dynamicznych reguł"
msgid "Edit"
msgstr "Edytuj"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr "Utwory z oceną pomiędzy:"
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr " - "
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "O regułach"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "Zawieraj utwory posiadające w tagach:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "Nie zawieraj utworów posiadających w tagach:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "Artyści podobni do:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "Artysta albumu:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "Od roku:"
@@ -4819,174 +4881,174 @@ msgstr "Od roku:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "Dowolny"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "Do roku:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "Dokładne dopasowanie"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
msgstr ""
-"<i><b>UWAGA</b> Należy wpisać tylko wartości dla tych tagów, które mają "
-"zostać przeszukane. </i>"
+"Należy podać tylko wartości tagów, które mają być kryteriami wyszukiwania."
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>UWAGA</b> Dla gatunków, należy użyć gwiazdki * aby wybierać wiele "
-"gatunków np. 'rock*' wyszuka 'Hard Rock' oraz 'Rock and Roll'. </i>"
+"Dla gatunku, zakończenie tekstu przy użyciu gwiazdki dopasuje wiele "
+"gatunków, np. 'rock*' dopasuje zarówno 'Hard Rock' jak i 'Rock and Roll'."
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr "Dodaj plik lokalny"
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr "Zapisz pobrane okładki i obrazy artystów w katalogu muzyki."
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "Zapisz pobrane teksty w katalogu muzyki"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "Zapisz pobrane tła w katalogu muzyki"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Jeżeli wybrano opcję aby Cantata przechowywała okładki, "
-"teksty oraz tła w katalogu muzyki, a użytkownik nie ma wystarczających "
-"uprawnień do pisania w tym katalogu, to Cantata będzie przechowywać te dane w "
-"osobistym katalogu pamięci podręcznej.</i>"
-
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
+msgid ""
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
+msgstr ""
+"Jeżeli wybrano opcję, aby program Cantata przechowywał okładki, teksty oraz "
+"tła w katalogu muzyki, a użytkownik nie ma praw do zapisu w tym katalogu, to "
+"Cantata wróci do opcji zapisu tych plików w osobistym katalogu pamięci "
+"podręcznej."
+
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
-"<i><b>UWAGA:</b> Cantata może zapisać tła i obrazy artystów w katalogu z "
-"muzyką jeżeli ta ma hierarchię o głębokości 2 poziomów (tzn. 'Artysta/Album/"
-"Utwory')</i>"
+"Cantata może przechowywać tła i obrazy artystów w katalogu muzyki, jeśli "
+"jego hierarchia jest głęboka na 2 poziomy (tzn. 'Artysta/Album/Utwory')"
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "Pierwsze uruchomienie programu Cantata"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "Witamy w programie Cantata"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
-msgstr ""
-"<html><head/><body><p>Cantata zaawansowanym i przyjaznym dla użytkownika "
-"klientem dla serwera Music Player Daemon (MPD). MPD jest aplikacją "
-"działającą w tle, która pozwala na odtwarzanie muzyki.</p><p>W celu "
-"uzyskania informacji na temat MPD prosimy o odwiedzenie strony <a href="
-"\"http://www.musicpd.org\"><span style=\" text-decoration: underline; color:"
-"#0000ff;\">http://www.musicpd.org</span></a></p><p>Ten 'kreator "
-"konfiguracji' pomoże przy podstawowych ustawieniach potrzebnych do "
-"poprawnego działania programu Cantata.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
+msgstr ""
+"<html><head/><body><p>Cantata jest przyjaznym dla użytkownika i bogatym w "
+"funkcje klientem Music Player Daemon (MPD). MPD jest elastyczną i potężną "
+"aplikacją serwerową do odtwarzania muzyki.</p><p>W celu uzyskania informacji "
+"na temat MPD prosimy o odwiedzenie strony <a href=\"http://www.musicpd.org"
+"\"><span style=\" text-decoration: underline; color:#0000ff;\">http://www."
+"musicpd.org</span></a></p><p>Ten 'kreator konfiguracji' pomoże przy "
+"podstawowych ustawieniach potrzebnych do poprawnego działania programu "
+"Cantata.</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr "<html><head/><body><p>Witaj w programie Cantata</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
-msgstr ""
-"<html><head/><body><p>Cantata zaawansowanym i przyjaznym dla użytkownika "
-"klientem dla serwera Music Player Daemon (MPD). MPD jest aplikacją "
-"działającą w tle, która pozwala na odtwarzanie muzyki. MPD może zostać "
-"uruchomione dla całego systemu lub dla każdego użytkownika. Proszę wybrać "
-"sposób, w jaki Cantata ma łączyć się z MPD podczas uruchamiania:</p></body></"
-"html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
+msgstr ""
+"<html><head/><body><p>Cantata jest przyjaznym dla użytkownika i bogatym w "
+"funkcje klientem Music Player Daemon (MPD). MPD jest elastyczną i potężną "
+"aplikacją serwerową do odtwarzania muzyki. MPD może zostać uruchomiony "
+"systemowo lub dla każdego użytkownika. Proszę wybrać, w jaki sposób program "
+"Cantata ma wstępnie połączyć się (lub wystartować) MPD:</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "Standardowa wielo-użytkownikowa/serwerowa konfiguracja"
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -5003,13 +5065,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "Podstawowa konfiguracja dla pojedynczego użytkownika"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -5019,7 +5081,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -5035,13 +5097,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "Szczegóły połączenia"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -5050,146 +5112,136 @@ msgstr ""
"Cantata. Proszę wpisać odpowiednie dane i użyć przycisku 'Połącz' aby "
"przetestować połączenie."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "Host (albo gniazdo lokalne):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
+msgid ""
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
+msgstr ""
+"Ustawienie 'Katalog z muzyką' jest używane to wyszukiwania okładek, tekstów "
+"itp. Jeśli używana instancja MPD jest na zdalnym komputerze, to ten adres "
+"może być ustawiony na URL HTTP."
+
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>UWAGA:</b> Ustawienie 'Katalog z muzyką' jest używane do wyszukiwania "
-"okładek, tekstów, itp. Jeżeli używana jest instancja MPD na zdalnym hoście, "
-"to można użyć adresu URL w postaci HTTP.</i>"
+"Gdy używane jest lokalne gniazdo, konieczne ustawienie jest pełnej "
+"absolutnej ścieżki do gniazda. (Numer portu nie jest wymagany.)"
-# Polskie zasady pisowni wymagają, aby kropkę stawiać za nawiasem
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
-msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Przy używaniu gniazda lokalnego konieczne jest ustawienie "
-"pełnej absolutnej ścieżki do gniazda. (Numer portu nie jest wymagany).</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "Katalog z muzyką"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "Proszę wybrać katalog zawierający kolekcję z muzyką."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "Okładki, teksty i strumienie"
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
"relevant files within the music folder, or within your personal cache/config "
"folders.</p>"
msgstr ""
-"<p>Cantata pobierze brakujące okładki i teksty z internetu.</p><p>Dla każdego "
-"z nich należy wybrać, czy Cantata ma przechowywać pobrane pliki w katalogu z "
-"muzyką, czy w osobistym katalogu ustawień i pamięci podręcznej.</p>"
-
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Jeśli w ustawieniach Cantaty wybrana zostanie opcja zapisu "
-"okładek lub tekstów w katalogu muzyki, a program nie ma dostępu lub "
-"możliwości zapisu do tego katalogu, wtedy Cantata powróci do zapisywania "
-"tych plików w osobistym katalogu pamięci podręcznej. Jakkolwiek, w przypadku "
-"strumieni, przy braku możliwości zapisu możliwe jest jedynie przeglądanie i "
-"odtwarzanie strumieni zapisanych w katalogu muzyki, jednak nie ma możliwości "
-"dodawania lub edycji strumieni. Jeśli nie wybrano opcji zapisu strumieni w "
-"katalogu muzyki, wtedy będą one zapisywane w lokalnym katalogu konfiguracji "
-"i będą dostępne tylko dla obecnego użytkownika.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
-msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"<p>Cantata pobierze brakujące okładki i teksty z internetu.</p><p>Dla "
+"każdego z nich należy wybrać, czy Cantata ma przechowywać pobrane pliki w "
+"katalogu z muzyką, czy w osobistym katalogu ustawień i pamięci podręcznej.</"
+"p>"
+
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-"<i><b>UWAGA:</b> Cantata może zapisać tła i obrazy artystów w katalogu z "
-"muzyką jeżeli ta ma hierarchię o głębokości 2 poziomów tzn. 'Artysta/Album/"
-"Utwory'.</i>"
+"Cantata może przechowywać tła i obrazy artystów w katalogu muzyki, jeśli "
+"jego hierarchia jest głęboka na 2 poziomy tzn. 'Artysta/Album/Utwory'."
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-"<i><b>UWAGA:</b> 'Katalog muzyki' został ustawiony na adres HTTP i Cantata "
-"obecnie nie potrafi wysyłać plików do zewnętrznych serwerów HTTP. Dlatego "
-"powyższe ustawienie powinno zostać odznaczone.</i>"
+"Ustawienie 'Katalog z muzyką' wskazuje na adres HTTP, a program Cantata "
+"obecnie nie obsługuje wysyłania plików na zewnętrzne serwery HTTP. Dlatego "
+"powyższe ustawienie powinno pozostać odznaczone."
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "Zakończono!"
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
"etc."
msgstr ""
"Cantata została skonfigurowana!<br/><br/>Okno konfiguracji Cantaty może być "
-"użyte do dostosowania wyglądu programu, jak również w celu dodania hostów MPD "
-"itp."
+"użyte do dostosowania wyglądu programu, jak również w celu dodania hostów "
+"MPD itp."
+
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+"Cantata grupuje utwory w albumy przy użyciu tagu 'ArtystaAlbumu', jeśli jest "
+"on ustawiony. W przeciwnym wypadku wykorzystywany jest tag 'Artysta'. Jeśli "
+"w kolekcji znajdują się albumy posiadające wiele artystów, to tag "
+"'ArtystaAlbumu' <b>musi</b> w nich być ustawiony aby grupowanie działało "
+"poprawnie. W takim przypadku sugeruje się użycie 'Various Artists'."
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5205,273 +5257,303 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "Panel boczny"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr "Widok"
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr "Użyj poniższych pól wyboru aby skonfigurować listę aktywnych widoków."
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-"<i><b>UWAGA:</b> Domyślnie kolejka odtwarzania wyświetlana jest z boku "
-"innych widoków. Przy zaznaczeniu powyższej opcji, zostanie ona włączona do "
-"panelu bocznego jako jeden z pozostałych widoków.</i>"
+"Domyślnie kolejka odtwarzania wyświetlana jest obok innych widoków, a widok "
+"informacji dostępny jest przy użyciu przycisku na głównym pasku narzędzi. "
+"Wybranie odpowiedniej opcji powyżej spowoduje połączenie widoku w pasku "
+"bocznym razem z innymi widokami."
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Domyślnie widok \"Informacje\" jest dostępny przez ikonę na "
-"głównym pasku narzędziowym. Po zaznaczeniu powyższej opcji, zostanie "
-"onumieszczony na pasku bocznym, tak jak inne widoki.</i>"
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Styl:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "Pozycja:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "Pokazuj tylko ikony, bez tekstu"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "Użyj ikon monochromatycznych"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "Automatycznie ukryj"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "Okładki:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "Pokaż obrazy artystów"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr "Sortuj albumy przy użyciu roku"
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> W trakcie poszukiwania obrazów artystów, Cantata będzie "
-"próbowała znaleźć pliki o nazwie artist.jpg, artist.png, 'Artist'.jpg, or "
-"'Artist'.png,\n"
-"wewnątrz katalogu z obecnym utworem, albo w katalogu nadrzędnym. Jeśli żaden "
-"obraz nie zostanie znaleziony, to Cantata spróbuje pobrać go z sieci.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "Pokaż obrazy artystów"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "Sortuj albumy:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr "Sortuj:"
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "Zwiń albumy przy uruchomieniu"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "Inne widoki"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "Styl widoku katalogów:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr "Katalogi:"
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "Styl widoku strumieni:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr "Strumienie:"
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "Styl widoku serwisów on-line:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr "Online:"
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "Styl widoku urządzeń:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Urządzenia:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr "Styl widoku wyszukiwania:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Szukaj:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "Automatycznie rozwijaj obecny album"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "Przewiń do obecnego utworu"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr "Pytaj przed czyszczeniem"
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr "Osobna akcja (i skrót) dla wyszukiwania w kolejce"
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "Okładka obecnego albumu"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr "Pasek narzędzi"
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr "Pokazuj przycisk stop"
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr "Pokazuj okładkę obecnego utworu"
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr "Pokazuj ocenę utworu"
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "Zewnętrzne"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "Pokazuj wyskakujące okienka przy zmianie utworu"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr "Pokarz ikonę w tacce systemowej"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Minimalizuj do tacki systemowej przy zamykaniu"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr "Przy uruchomieniu"
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr "Pokaż główne okno"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr "Ukryj główne okno"
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr "Przywróć poprzedni stan"
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "Ogólne"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
-"Umieść albumy z tylko jednym utworem w grupie \"Various Artists/Single "
-"Tracks\""
+"Umieść albumy z tylko jednym utworem w grupie \"Various Artists/Single Tracks"
+"\""
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr "Grupuj pojedyncze utwory"
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
"Do grupowania albumów użyj tagu \"Kompozytor\" zamiast tagów \"Artysta\" lub "
"\"Artysta albumu\"."
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr "Grupuj albumy na podstawie kompozytora"
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5480,44 +5562,38 @@ msgid ""
"to 'Metal'."
msgstr ""
"<p>Przy dodawaniu artysty lub albumu do kolejki odtwarzania, edycji tagów "
-"itp. dodawaj tylko utwory które pasują do wybranego gatunku oraz do filtru.<"
-"/p><p>np. dla albumu z 10 utworami, w którym tylko 5 ma gatunek \"Metal\", "
+"itp. dodawaj tylko utwory które pasują do wybranego gatunku oraz do filtru.</"
+"p><p>np. dla albumu z 10 utworami, w którym tylko 5 ma gatunek \"Metal\", "
"tylko te utwory zostaną dodane, jeśli filtr gatunków ustawiony jest na "
"\"Metal\"."
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr "Działaj tylko na utworach, które pasują do filtru."
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr "Pobierz brakujące okładki z Last.fm"
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr "Zapisz przeskalowane okładki w pamięci podręcznej"
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr "Pokazuj akcję usuwania w menu kontekstowym"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr "Wymuś aktywację elementów przy pojedynczym kliknięciu"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5525,168 +5601,177 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-"<p>To ustawienie wpłynie na interfejst w następujący sposób:\n"
-"<ul><li>Przyciski odtwarzania i kontroli będą 33% szersze</li><li>Widoki będą "
-"przesuwane przez przeciągnięcie</li><li>Aby przeciągnąć elementy trzeba "
+"<p>To ustawienie wpłynie na interfejs w następujący sposób:\n"
+"<ul><li>Przyciski odtwarzania i kontroli będą 33% szersze</li><li>Widoki "
+"będą przesuwane przez przeciągnięcie</li><li>Aby przeciągnąć elementy trzeba "
"kliknąć/dotknąć lewy górny róg</li><li>Paski przewijania będą szerokie tylko "
"na kilka pikseli</li><li>Akcje (np. \"Dodaj do kolejki odtwarzania) będą "
"zawsze widoczne (nie tylko po najechaniu na nie kursorem)</li><li>Wejścia "
"numeryczne będą miały przyciski + i − obok pola tekstowego</li></ul></p>"
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr "Interfejs dotykowy"
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
-msgstr "Pokazuj przycisk stop w pasku narzędzi"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr "Pokazuj dymki z informacją utworu"
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
-msgstr "Pokazuj okładkę obecnego utworu w pasku narzędziowym"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr "Obsługa wyświetlaczy retina"
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "Język:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
msgstr ""
-"<i><b>UWAGA:</b> Zmiana opcji 'Wymuś aktywację elementów przy pojedynczym "
-"kliknięciu' wymaga restartu Cantaty.</i>"
+"Zmiana ustawienia 'Wymuś aktywację elementów przy pojedynczym kliknięciu' "
+"wymaga restartu Cantaty."
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
+msgstr "Zmiana ustawienia języka wymaga restartu Cantaty."
+
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
-msgstr "<i><b>UWAGA:</b> Zmiana ustawienia jeżyka wymaga restartu Cantaty.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
+msgstr "Zmiana ustawienia 'Interfejs dotykowy' wymaga restartu Cantaty."
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Uwaga:</b> Zmiana ustawienia \"interfejs dotykowy\" wymaga restartu "
-"Cantaty.</i>"
+"Włączenie obsługi wyświetlaczy retina spowoduje użycie bardziej wyrazistych "
+"ikon na wyświetlaczach retina, ale może doprowadzić do mniej wyrazistego "
+"wyświetlania ikon na wyświetlaczach nie-retina. Zmiana tego ustawienia "
+"wymaga restartu Cantaty."
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[Dynamiczne]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr "Wyjdź z pełnego ekranu"
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "Wycisz przy zatrzymaniu:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Zatrzymaj odtwarzanie przy wyjściu"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr "Powstrzymaj przejście w stan wstrzymania podczas odtwarzania"
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>UWAGA:</b> Przy przyciśnięciu i przytrzymaniu przycisku stop otwarte "
+"Jeśli przycisk stop zostanie wciśnięty i przytrzymany, to wyświetlone "
"zostanie menu pozwalające na wybór, czy odtwarzanie ma zostać zatrzymane "
-"natychmiast, czy po obecnym utworze.</i>"
+"teraz, czy po obecnym utworze. (Wyświetlanie przycisku stop możliwe jest "
+"przez użycie odpowiedniej opcji w sekcji Interfejs/Pasek narzędzi)"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "Wyjście"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "Przenikanie między utworami:"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr "s"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "Replay gain:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "O ReplayGain:"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr "Użyj poniższych pól wyboru aby kontrolować aktywne wyjścia."
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "Kolekcja:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "Nazwa pliku okładki:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5701,155 +5786,156 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "URL strumienia HTTP:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
-msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Ustawienie 'Katalog z muzyką' służy do poszukiwania okładek "
-"(albo wartość podana powyżej, albo <code>cover.jpg / cover.png</code> jeśli "
-"jej nie sprecyzowano). Jeśli posiadasz prawa zapisu do tego katalogu (i "
-"podkatalogów), to Cantata będzie zapisywała wszystkie pobrane okładki do "
-"odpowiednich katalogów.</i>"
-
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
-msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Opcja 'URL strumienia HTTP' używana jest wyłącznie wtedy, "
-"gdy wyjściem MPD jest strumień HTTP, a Cantata ma mieć możliwość jego "
-"odtwarzania.</i>"
-
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
-msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
-msgstr ""
-"<i><b>NOTE:</b> Przy zmianie ustawienia \"Katalog z muzyką\" konieczne jest "
-"ręczne uaktualnienie bazy danych z muzyką. Może to zostać wykonane przez "
-"użycie przycisku \"Odśwież bazę danych\" w widoku \"Artyści\" lub \"Albumy\"."
-"</i>"
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
+msgid ""
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
+msgstr ""
+"Ustawienie 'Katalog z muzyką' używane jest w celu wyszukiwania okładek (przy "
+"użyciu wartości podanej powyżej, albo jako pliki o nazwie <code>cover.jpg / "
+"cover.png</code>, jeśli nie ustawiono żadnej wartości). Jeżeli użytkownik ma "
+"uprawnienia do zapisywania w danym katalogu (i jego podkatalogach), to "
+"program Cantata zapisze pobrane okładki w odpowiednich katalogach albumu."
+
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
+msgid ""
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
+msgstr ""
+"'URL strumienia HTTP' używany jest jedynie jeśli MPD skonfigurowany jest z "
+"wyjściem do strumienia HTTP a Cantata ma odtwarzać ten strumień."
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>NOTE:</b> Jeśli nie ustawiono nazwy pliku dla okładki, Cantata użyje "
-"domyślnej nazwy <code>cover</code> </i>"
+"Jeśli ustawienie 'Katalog z muzyką' zostanie zmienione, należy ręcznie "
+"uaktualnić bazę danych muzyki. Można to zrobić używając akcji 'Odśwież bazę "
+"danych' w widokach 'Artyści' lub 'Albumy'."
+
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
+msgid ""
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
+msgstr ""
+"Jeśli nie ustawiono wartości dla nazwy pliku okładki, Cantata użyje "
+"domyślnej wartości <code>cover</code>"
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "Interfejs sieciowy:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> MPD zazwyczaj odtwarza tylko utwory zapisane w jego "
-"katalogach. Cantata zawiera minimalistyczny serwer HTTP, który może być "
-"użyty do przesyłania innych plików do MPD. Ta opcja działa jedynie gdy "
-"uruchomiony jest program Cantata. <br/><br/>\n"
-"<b>UWAGA:</b> Przy wyborze 'Lokalny loopback' w polu 'Interfejs sieciowy', "
-"to MPD <b>musi</b> też być na tym komputerze.</i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+"MPD zazwyczaj odtwarza jedynie utwory znajdujące się w jego katalogu. "
+"Cantata zawiera jednak minimalistyczny serwer HTTP który może być używany do "
+"udostępniania innych plików serwerowi MPD. Ta funkcja działa jedynie wtedy, "
+"gdy program Cantata jest uruchomiony."
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
+"Jeżeli 'Interfejs sieciowy' ustawiony jest na 'Lokalny loopback', to MPD "
+"<b>musi</b> również być na tym samym komputerze."
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "Tryb:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "HTTP Proxy"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "SOCKS Proxy"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr "Użyj poniższych pól wyboru aby skonfigurować listę aktywnych serwisów."
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr "Scrobbluj przy użyciu:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "Stan:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "Login"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr "Scrobbluj utwory"
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr "Pokazuj przycisk \"polub\""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5863,143 +5949,157 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "Konto premium"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "Typ strumienia:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "Wygaśnięcie sesji:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-"<i><b>UWAGA:</b> Te ustawienia odnoszą się do Digitally Imported, JazzRadio."
-"com, RockRadio.com, oraz Sky.fm.</i>"
+"Te ustawienia odnoszą się do Digitally Imported, JazzRadio.com, RockRadio."
+"com oraz Sky.fm"
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
-"<i><b>UWAGA:</b> Po wpisaniu szczegółów konta wyświetlony zostanie status "
-"'DI' pod listą strumieni. Jest to wskaźnik tego, czy jest się zalogowanym, "
-"czy nie.</i>"
+"Po wpisaniu szczegółów konta, element statusu 'DI' pojawi się poniżej listy "
+"strumieni. Pokazuje on, czy użytkownik jest zalogowany."
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
"Użyj poniższych pól wyboru aby skonfigurować listę aktywnych dostawców."
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr "Konfiguruj dostawcę"
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr "Instaluj"
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
-msgstr ""
-"<i><b>UWAGA:</b> Wbudowane kategorie wyświetlone są kursywą i nie mogą "
-"zostać usunięte.</i>"
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "Szukaj:"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
+msgstr "Wbudowane kategorie wyświetlane są kursywą i nie mogą zostać usunięte."
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "Skrót dla zaznaczonej akcji"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "Domyślny:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "Własny:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "Artysta albumu:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "Numer utworu:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "Numer płyty:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr "Ocena:"
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr "<i>(Various)</i>"
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
+msgid ""
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+"Kilka gatunków powinno być oddzielonych średnikiem (np. 'Rock;Hard Rock')"
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
-"<i><b>UWAGA</b> Gatunki należy oddzielać od siebie średnikiem (np. 'Rock;Hard "
-"Rock')</i>"
+"Oceny przechowywane są w zewnętrznej bazie danych i <b>nie</b> w pliku "
+"utworu."
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "Obecna nazwa"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "Nowa nazwa"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr "Oceny zostaną utracone jeśli nazwa pliku zostanie zmieniona."
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Piotr Wicijowski"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "piotr[dot]wicijowski[at]gmail[dot]com"
@@ -6050,7 +6150,7 @@ msgstr "Przerwać skanowanie plików?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "Przerwij"
@@ -6060,11 +6160,11 @@ msgstr "Przerwać czytanie istniejących tagów?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"Skanować <b>wszystkie</b> utwory?<br><br><i>UWAGA: Wszystkie utwory "
-"posiadają istniejące tagi ReplayGain.</i>"
+"Skanować <b>wszystkie</b> utwory?<br/><br/><i>Wszystkie utwory mają "
+"już istniejące tagi ReplayGain.</i>"
#: replaygain/rgdialog.cpp:263
msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
@@ -6087,17 +6187,17 @@ msgstr "Skanowanie utworów..."
msgid "Reading existing tags..."
msgstr "Czytanie istniejących tagów..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr "%1 (Uszkodzone tagi?)"
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "Uaktualnianie tagów następujących utworów nie powiodło się:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "Urządzenie nie jest podłączone."
@@ -6121,63 +6221,63 @@ msgstr "Oryginał: %1 dB"
msgid "Original: %1"
msgstr "Oryginał: %1"
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "Usunąć zaznaczone utwory z listy?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "Usuń utwory"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr "Nieprawidłowy serwis"
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr "Nieprawidłowa metoda"
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr "Uwierzytelnianie nie powiodło się"
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr "Nieprawidłowy format"
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr "Nieprawidłowe parametry"
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr "Podano nieprawidłowy zasób"
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr "Operacja nie powiodła się"
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr "Nieprawidłowy klucz sesji"
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr "Nieprawidłowy klucz API"
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr "Serwis jest offline"
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr "Last.fm jest obecnie zajęty, proszę spróbować za kilka minut."
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr "Przekroczono limit prób."
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr "%1 błąd: %2"
@@ -6189,33 +6289,33 @@ msgstr "%1: Polubiono obecny utwór"
msgid "%1: Love Current Track"
msgstr "%1: Polub obecny utwór"
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr "%1 (przez MPD)"
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-"<i><b>UWAGA:</b> Jeśli używany jest scrobbler oznaczony jako '(przez MPD)' "
-"(na przykład %1), to musi on być już uruchomiony. Cantata może oznaczać "
-"utwory jako \"Ulubione\" przy użyciu takiego scrobblera i nie może "
-"włączać/wyłączać scrobblowania.</i>"
+"Jeśli użyty jest scrobbler oznaczony jako '(przy użyciu MPD)' (na przykład "
+"%1), to musi on być już uruchomiony i działający. Cantata może jedynie "
+"'Polubić' utwory przy jego pomocy, ale nie może wyłączyć lub włączyć "
+"scrobblowania."
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr "Uwierzytelnianie..."
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr "Uwierzytelniono"
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6245,27 +6345,27 @@ msgstr "AAC 128k"
msgid "Logout"
msgstr "Wyloguj"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "URL:"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "Tylko dodaj do kolejki odtwarzania, nie zapisuj"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Dodaj do kolejki odtwarzania i zapisz w ulubionych"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "Dodaj strumień"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "Edytuj strumień"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>BŁAD:</b> Niewłaściwy protokół</i>"
@@ -6311,39 +6411,39 @@ msgid "Installing/updating %1"
msgstr "Instalowanie/aktualizowanie %1"
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
-msgstr "Instalowanie nie powiodło się <b>%1</b>"
+msgid "Failed to install '%1'"
+msgstr "Instalacja '%1' nie powiodła się"
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
-msgstr "Pobieranie nie powiodło się <b>%1</b>"
+msgid "Failed to download '%1'"
+msgstr "Pobieranie '%1' nie powiodło się"
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
-msgstr "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr "Zainstalować/zaktualizować zaznaczonych dostawców strumieni?"
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
-msgstr "Zainstalować następujące?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr "Zainstalować zaznaczonych dostawców strumieni?"
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
-msgstr "Zaktualizować następujące?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr "Zaktualizować zaznaczonych dostawców strumieni?"
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr "Instaluj/aktualizuj"
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr "Przerwać instalację/aktualizację?"
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr "Pobieranie %1"
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr "Zaktualizuj wszystkich dostawców"
@@ -6359,196 +6459,202 @@ msgstr "Eksportuj ulubione strumienie"
msgid "Add New Stream To Favorites"
msgstr "Dodaj nowy strumień do ulubionych"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Digitally Imported"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|strumienie XML"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "Importuj strumienie"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "Strumienie XML (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|Strumienie XML"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "Eksportuj strumienie"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr "Strumienie XML (*.xml.gz)"
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "Nie powiodło się utworzenie <b>%1</b>!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr "Tworzenie '%1' nie powiodło się!"
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "Strumień już istnieje!<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr "Strumień '%1' już istnieje!"
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "Strumień o nazwie <b>%1</b> już istnieje!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr "Strumień o nazwie '%1' już istnieje!"
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "Dodano zakładkę"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "Już w zakładkach"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Już w ulubionych"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "Przeładować <b>%1</b> strumieni(e)?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr "Wczytać ponownie '%1' strumieni?"
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "Czy na pewno usunąć zakładkę <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr "Czy na pewno usunąć zakładkę do '%1'?"
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "Czy na pewno usunąć wszystkie <b>%1</b> zakładek?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr "Czy na pewno usunąć '%1' zakładek?"
# czy tutaj również nie powinna być liczba mnoga?
# 1 zaznaczony strumień
# 2-4 zaznaczone strumienie
# 5+ zaznaczonych strumieni (jak teraz)
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "Czy jesteś pewien, że chcesz usunąć %1 zaznaczonych strumieni?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "Czy na pewno usunąć <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "Czy na pewno usunąć '%1'?"
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "Szukaj %1:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "Dodano \"%1\" do ulubionych"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr "Z pliku..."
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr "Pobierz..."
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.streams|Strumienie Cantata"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr "Instaluj strumienie"
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "Strumienie Cantata (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Kategoria o nazwie <b>%1</b> już istnieje!<br/>Nadpisać?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
+"Kategoria o nazwie '%1' już istnieje!\n"
+"\n"
+"Nadpisać?"
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
-msgstr "Otwieranie pliku pakietu nie powiodło się"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
+msgstr "Otwieranie pliku pakietu nie powiodło się."
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr "Niepoprawny format pliku!"
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr "Tworzenie katalogu kategorii strumieni nie powiodło się!"
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr "Zapisanie listy strumieni nie powiodło się!"
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr "Usunięcie katalogu strumieni nie powiodło się!"
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "&Ok"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "&Anuluj"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "&Tak"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "&Nie"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "&Odrzuć"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "Zapi&sz"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "&Zastosuj"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "Zam&knij"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "Nad&pisz"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "&Resetuj"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "&Kontynuuj"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "&Skasuj"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "&Stop"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "&Usuń"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "&Poprzedni"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "&Następny"
@@ -6560,14 +6666,32 @@ msgstr "Hasło"
msgid "Please enter password:"
msgstr "Proszę podać hasło:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr "Zamknij"
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "Ostrzeżenie"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "Pytanie"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr "&Okno"
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr "Minimalizuj"
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr "Przybliż"
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "Wybierz katalog:"
@@ -6576,60 +6700,99 @@ msgstr "Wybierz katalog:"
msgid "Select File"
msgstr "Wybierz plik"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 kB"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MB"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 GB"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "1 dzień %2"
msgstr[1] "%1 dni %2"
msgstr[2] "%1 dni %2"
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Tagi"
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr "Ustaw tag 'Artysta Albumu' na podstawie tagu 'Artysta'"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr "Wczytaj oceny z pliku"
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr "Zapisz oceny do pliku"
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "Wszystkie utwory"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
"Czy zastosować obejście dla 'Various Artists' we <b>wszystkich</b> utworach?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>Spowoduje to ustawienie tagów 'ArtystaAlbumu' oraz 'Artysta' na wartość "
+"\"Various Artists\", zaś tagu 'Tytuł' na \"ArtystaUtworu - TytułUtworu\"</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
"Czy cofnąć obejście dla 'Various Artists' we <b>wszystkich</b> utworach?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "Cofnij obejście dla 'Various Artists'"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>W przypadku, gdy tag 'ArtystaAlbumu' jest taki sam jak 'Artysta' oraz tag "
+"'Tytuł' jest formatu \"ArtystaUtworu - TytułUtworu\", to tag 'Artysta' "
+"zostanie pobrany z tagu 'Tytuł' a sam 'Tytuł' zostanie przywrócony do "
+"wartości \"TytułUtworu\". Dla przykładu: <br/><br/> Jeśli 'Tytuł' to "
+"\"Wibble - Wobble\", wtedy 'Artysta' zostanie ustawiony na \"Wibble\" "
+"natomiast 'Title' będzie miał wartość \"Wobble\"</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6637,74 +6800,164 @@ msgstr ""
"Czy ustawić tag 'Artystę Albumu' na podstawie tagu 'Artysta' (jeśli 'Artysta "
"Albumu' jest pusty) dla <b>wszystkich</b> utworów?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr ""
"Czy ustawić tag 'Artystę Albumu' na podstawie tagu 'Artysta' (jeśli 'Artysta "
"Albumu' jest pusty)?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "Artysta Albumu na podstawie Artysty"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"Czy ustawić pierwszą dużą literę tagów 'Title', 'Artist', 'Album artist', "
-"oraz 'Album' we <b>wszystkich</b> utworach?"
+"Ustawić dużą pierwszą literę pól tekstowych (np. 'Tytuł', 'Artysta', itp.) "
+"<b>wszystkich</b> utworów?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+"Ustawić dużą pierwszą literę pól tekstowych (np. 'Tytuł', 'Artysta', itp.)?"
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "Zwiększ wartość numeru każdego utworu o:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr "Odczytać oceny wszystkich utworów z plików muzycznych?"
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr "Odczytać ocenę z pliku muzycznego?"
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr "Oceny"
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr "Odczytaj oceny"
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr "Odczytaj ocenę"
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr "Odczytaj i uaktualnij oceny z następujących utworów:"
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr "Nie wszystkie utwory zostały odczytane z MPD!"
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+"Oceny utworów nie są przechowywane w plikach utworów, ale w bazie danych "
+"'sticker' serwera MPD. W celu zapisania ocen do plików, Cantata musi "
+"odczytać je najpierw z MPD."
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr "Oceny utworów nie zostały odczytane z MPD!"
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr "Zapisać oceny dla wszystkich utworów do plików muzycznych?"
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr "Zapisać ocenę do pliku muzycznego?"
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr "Zapisz oceny"
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr "Zapisz ocenę"
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr "Zapisywanie ocen nie powiodło się dla następujących utworów:"
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr "Zapisywanie oceny do pliku muzycznego nie powiodło się!"
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "Wszystkie utwory [zmodyfikowano]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [zmodyfikowano]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr "Czy również zmienić nazwy plików tak, aby pasowały do tagów?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "Zmień nazwy plików"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "Przerwać zmianę nazw plików?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "Plik źródłowy nie istnieje!<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr "Plik źródłowy nie istnieje!"
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "Docelowy plik już istnieje!<br/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr "Plik docelowy już istnieje!"
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "Tworzenie katalogu docelowego nie powiodło się!<br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr "Tworzenie katalogu docelowego nie powiodło się!"
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "Nie powiodła się zmiana nazwy z %1 na %2"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr "Zmiana nazwy pliku z '%1' na '%2' nie powiodła się"
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
+"Oceny utworów nie są przechowywane w plikach utworów, ale w bazie danych "
+"'sticker' serwera MPD.\n"
+"\n"
+"Jeśli nazwa pliku zostanie zmieniona (albo nazwa folderu, który zawiera ten "
+"plik), to ocena związana z utworem zostanie utracona."
+
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(Strumień)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\"><b>Kompozytor:</b></td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr "<tr><td align=\"right\"><b>Wykonawca:</b></td><td>%1</td></tr>"
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6722,7 +6975,7 @@ msgstr "Filtruj według gatunku"
msgid "All Genres"
msgstr "Wszystkie gatunki"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "Idź wstecz"
@@ -6730,15 +6983,19 @@ msgstr "Idź wstecz"
msgid "Menu"
msgstr "Menu"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr "<i><b>UWAGA:</b> %1</i>"
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "Usuń z kolejki odtwarzania"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "Szukaj..."
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "Zamknij pasek wyszukiwania"
@@ -6752,21 +7009,27 @@ msgstr "<b>NIE</b> zalogowano do %1"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
-"<p>Brak dostępu do plików utworów!<br/><br/>Proszę sprawdzić ustawienia "
-"Cantaty \"Katalog z muzyką\" oraz ustawienie MPD \"music_directory\".</p>"
+"Dostęp do plików utworów nie powiódł się!\n"
+"\n"
+"Proszę sprawdzić poprawność ustawień \"Katalog z muzyką\" w programie "
+"Cantata oraz \"music_directory\" w MPD."
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-"<p>Brak dostępu do plików utworów!<br/><br/>Proszę sprawdzić, czy urządzenie "
-"jest nadal podłączone.</p>"
+"Dostęp do plików utworów nie powiódł się!\n"
+"\n"
+"Proszę sprawdzić czy urządzenie nadal jest podłączone."
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr "Rozciągnij kolumny aby dopasować do okna"
@@ -6902,6 +7165,795 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr "Dostępne aktualizacje: %1"
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "Nie ma wystarczająco miejsca na urządzeniu docelowym.\n"
+#~ "Zaznaczone utwory zajmują %1, jednak pozostało jedynie %2 miejsca.\n"
+#~ "Aby utwory mogły zostać skopiowane, będą musiały zostać skonwertowane do "
+#~ "plików o mniejszych rozmiarach."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "W lokalizacji docelowej nie ma wystarczająco dużo miejsca.\n"
+#~ "Zaznaczone utwory zajmują %1, jednak pozostało jedynie %2 miejsca."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Urządzenie docelowe nie zostało skonfigurowane.<br/>Czy kontynuować z "
+#~ "domyślnymi ustawieniami?</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Urządzenie źródłowe nie zostało skonfigurowane.<br/>Czy kontynuować z "
+#~ "domyślnymi ustawieniami?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "Duża pierwsza litera w tagach 'Title', 'Artist', 'Album artist', oraz "
+#~ "'Album'"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>Jaki rodzaj odświeżenia ma zostać wykonany?<ul><li>Częściowy - tylko "
+#~ "nowe utwory zostaną przeskanowane <i>(szybki)</i></li><li>Pełny - "
+#~ "Wszystkie utwory zostaną przeskanowane <i>(wolny)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Czy jesteś pewien, że chcesz usunąć zaznaczone utwory?\n"
+#~ "Ta operacja nie może zostać cofnięta."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "Czy na pewno zapomnieć <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "Czy na pewno wysunąć płytę audio <b>%1 - %2</b>?"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "Czy na pewno rozłączyć się z <b>%1</b>?"
+
+#~ msgid ""
+#~ "<p>The following variables will be replaced with their corresponding "
+#~ "meaning for each track name.</p>"
+#~ msgstr ""
+#~ "<p>Następujące zmienne zostaną zastąpione ich wartościami dla każdego "
+#~ "pliku.</p>"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "Urządzenie zdalne o nazwie \"%1\" już istnieje!\n"
+#~ "Proszę wybrać inną nazwę"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Czy jesteś pewien, że chcesz usunąć zaznaczone reguły?\n"
+#~ "Ta operacja nie może zostać cofnięta."
+
+#~ msgid ""
+#~ "<p>Cantata will query your library using all of the rules listed. The "
+#~ "list of <i>Include</i> rules will be used to build a set of songs that "
+#~ "can be used. The list of <i>Exclude</i> rules will be used to build a set "
+#~ "of songs that cannot be used. If there are no <i>Include</i> rules, "
+#~ "Cantata will assume that all songs (bar those from <i>Exclude</i>) can be "
+#~ "used. <br/>e.g. to have Cantata look for 'Rock songs by Wibble OR songs "
+#~ "by Various Artists', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> To have Cantata look for 'Songs by Wibble but not from "
+#~ "album Abc', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After the set of "
+#~ "usable songs has been created, Cantata will randomly select songs to keep "
+#~ "the play queue filled with 10 entries.</p>"
+#~ msgstr ""
+#~ "<p>Cantata przeszuka bibliotekę używając wszystkich przypisanych reguł. "
+#~ "Lista reguł <i>Zawiera</i> zostanie użyta do zbudowania zbioru utworów, "
+#~ "które mogą zostać użyte. Lista reguł <i>Nie zawiera</i> zostanie użyta do "
+#~ "zbudowania zbioru utworów, które nie będą użyte. Jeśli nie ma reguł typu "
+#~ "<i>Zawiera</i> to Cantata zakłada, że wszystkie utwory (oprócz pasujących "
+#~ "do reguł <i>Nie zawiera</i>) mogą zostać użyte. <br/>Dla przykładu, aby "
+#~ "Cantata szukała 'Rockowych utworów w wykonaniu Wibble ALBO utworów w "
+#~ "wykonaniu Various Artists', wymagane będą następujące reguły: "
+#~ "<ul><li>Zawiera ArtystaAlbumu=Wibble Gatunek=Rock</li><li>Zawiera "
+#~ "ArtystaAlbumu=Various Artists</li></ul> aby Cantata szukała 'Utworów w "
+#~ "wykonaniu Wibble ale nie z albumu Abc', wymagane będą następujące reguły:"
+#~ "<ul><li>Zawiera ArtystaAlbumu=Wibble</li><li>Nie zawiera Album=Abc</li></"
+#~ "ul>Po utworzeniu zbioru utworów pasujących do reguł, Cantata losowo "
+#~ "będzie wybierać z niej utwory tak, aby kolejka odtwarzania była "
+#~ "wypełniona 10 elementami.</p>"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "Zestaw reguł o nazwie '%1' już istnieje!\n"
+#~ "Nadpisać?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>Czy usunąć wszystkie z wymienionych?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "Ustawienie okładki nie powiodło się!\n"
+#~ "Nie można pobrać do pliku tymczasowego!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "Ustawienie okładki nie powiodło się!\n"
+#~ "Nie można wykonać kopii!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "Failed to set cover!\n"
+#~ "Nie można zrobić kopii zapasowej oryginału!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "Ustawienie okładki nie powiodło się!\n"
+#~ "Nie można skopiować pliku do '%1'!"
+
+#~ msgid "Medium"
+#~ msgstr "Średnie"
+
+#~ msgid "Extra Large"
+#~ msgstr "Bardzo duże"
+
+#~ msgid "Icon/List"
+#~ msgstr "Ikony/Lista"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "Edytuj tagi utworów"
+
+#~ msgid ""
+#~ "Podcasts are currently being downloaded\n"
+#~ "\n"
+#~ "Quiting now will abort all downloads."
+#~ msgstr ""
+#~ "Trwa pobieranie podcastów\n"
+#~ "\n"
+#~ "Zamknięcie programu spowodowałoby przerwanie wszystkich pobrań."
+
+#~ msgid "Abort downloads and quit"
+#~ msgstr "Anuluj pobieranie i zakończ"
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "<b>%1</b> jest używane do przechowywania ulubionych strumieni, należy "
+#~ "wybrać inną nazwę."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr ""
+#~ "Playlista o nazwie <b>%1</b> już istnieje!<br/>Dodać do tej playlisty?"
+
+#~ msgid "Can only edit tags of songs within MPD's music collection."
+#~ msgstr ""
+#~ "Można edytować tagi jedynie utworów znajdujących się w kolekcji muzyki "
+#~ "MPD."
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>ReplayGain jest propozycją standardu opublikowaną w 2001, której celem "
+#~ "jest normalizacja odczuwanej głośności komputerowych formatów audio "
+#~ "takich jak MP3 lub Ogg Vorbis. Działa na podstawie utworu/albumu i jest "
+#~ "obsługiwany przez rosnącą liczbę odtwarzaczy.</p><p>Następujące "
+#~ "ustawienia ReplayGain mogą zostać użyte: <ul><li><i>Brak</i> - ReplayGain "
+#~ "nie jest stosowany.</li><li><i>Utwór</i> - Głośność jest dostosowywana na "
+#~ "podstawie tagu ReplayGain utworu.</li><li><i>Album</i> - Głośność jest "
+#~ "dostosowywana na podstawie tagu ReplayGain albumu.</"
+#~ "li><li><i>Automatycznie</i> - Głośność jest dostosowywana na podstawie "
+#~ "tagu ReplayGain utworu gdy kolejność odtwarzania jest losowa. W "
+#~ "przeciwnym wypadku użyty jest tag albumu.</li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Czy jesteś pewien, że chcesz usunąć zaznaczone playlisty?\n"
+#~ "Ta operacja nie może zostać cofnięta."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Playlista o nazwie <b>%1</b> już istnieje!<br/>Nadpisać?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "Do jakiego rodzaju kolekcji program ma się połączyć?<br/"
+#~ "><ul><li>Standardowa - kolekcja muzyczna może być współdzielona, jest na "
+#~ "innej maszynie lub jest już skonfigurowana</li><li>Podstawowa - kolekcja "
+#~ "muzyki nie jest współdzielona z innymi i Cantata skonfiguruje i będzie "
+#~ "kontrolować instancję MPD</li></ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "Usunąć <b>%1</b>?"
+
+#~ msgid "Multi-Media Keys"
+#~ msgstr "Klawisze multimedialne"
+
+#~ msgid "Do not use media keys to control Cantata"
+#~ msgstr "Nie używaj klawiszy multimedialnych do kontrolowania Cantaty"
+
+#~ msgid "Use media keys to control Cantata"
+#~ msgstr "Użyj klawiszy multimedialnych do kontrolowania Cantaty"
+
+#~ msgid ""
+#~ "Use media keys, as configured in desktop settings, to control Cantata"
+#~ msgstr ""
+#~ "Użyj klawiszy multimedialnych do kontrolowania Cantaty, zgodnie z "
+#~ "ustawieniami pulpitu"
+
+#~ msgid ""
+#~ "Use media keys, as configured in GNOME/Unity settings, to control Cantata"
+#~ msgstr ""
+#~ "Użyj klawiszy multimedialnych do kontrolowania Cantaty, zgodnie z "
+#~ "ustawieniami GNOME/Unity"
+
+#~ msgid "Add Albums In Random Order"
+#~ msgstr "Dodaj albumy w losowej kolejności"
+
+#~ msgid "Edit Tags"
+#~ msgstr "Edytuj tagi"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(Priorytet: %1)</b>"
+
+#~ msgid "Unsubscribe from <b>%1</b>?"
+#~ msgstr "Usunąć subskrypcję <b>%1</b>?"
+
+#~ msgid "Refresh episode listing from <b>%1</b>?"
+#~ msgstr "Odświeżyć listę podcastów z <b>%1</b>?"
+
+#~ msgid "All selected podcasts have already been downloaded!"
+#~ msgstr "Wszystkie zaznaczone podcasty zostały już pobrane!"
+
+#~ msgid "Do you wish to download the following podcast episode?"
+#~ msgstr "Czy pobrać następujący odcinek podcastu?"
+
+#~ msgid "Do you wish to download the following podcast episodes?"
+#~ msgstr "Czy pobrać następujące odcinki podcastu?"
+
+#~ msgid "All selected downloaded podcast episodes have already been deleted!"
+#~ msgstr "Wszystkie zaznaczone odcinki zostały już usunięte?"
+
+#~ msgid ""
+#~ "Do you wish to delete the downloaded file of the following podcast "
+#~ "episode?"
+#~ msgstr "Czy usunąć pobrany plik następującego odcinka podcastu?"
+
+#~ msgid ""
+#~ "Do you wish to the delete downloaded files of the following podcast "
+#~ "episodes?"
+#~ msgstr "Czy usunąć pobrane pliki następujących odcinków podcastu?"
+
+#~ msgid "Automatically download new episodes"
+#~ msgstr "Automatycznie pobieraj odcinki"
+
+#~ msgid ""
+#~ "Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
+#~ "all three."
+#~ msgstr ""
+#~ "Pokazuj wyłącznie \"Artystę\", \"Album\" lub \"Tekst\", nawet jeśli jest "
+#~ "wystarczająco miejsca na pokazanie wszystkich trzech."
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Cantata nie wyświetla pełnych stron Wikipedii (z "
+#~ "obrazami, linkami itp.). Zamiast tego wyświetlana jest okrojona wersja. "
+#~ "Okrojenie nie jest zawsze w 100% prawidłowe, dlatego Cantata może "
+#~ "wyświetlać tylko podstawowy wstęp każdego artykułu. W przypadku wybrania "
+#~ "wyświetlania pełnego artykułu mogą pojawiać się błędy parsowania. Wtedy "
+#~ "też trzeba usunąć wszystkie artykuły z pamięci podręcznej (używając "
+#~ "strony 'Pamięć podręczna').<i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Połączono z serwerem Mopidy (wymagane ręczne "
+#~ "odświeżenie).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Te ustawienia są poprawne i edytowalne gdy urządzenie "
+#~ "jest podłączone.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "Ignoruj 'The' w nazwach artystów"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Te ustawienia są edytowalne gdy urządzenie nie jest "
+#~ "podłączone.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Jeśli hasło zostanie wpisane w to pole, to będzie ono "
+#~ "przechowywane w postaci <b>niezaszyfrowanej</b> w pliku konfiguracyjnym "
+#~ "Cantaty. Aby Cantata za każdym razem pytała o hasło przed dostępem do "
+#~ "zasobu, należy ustawić hasło na '-'</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Z powodu sposobu działania sshfs, odpowiednia aplikacja "
+#~ "ssh-askpass (ksshaskpass, ssh-askpass-gnome, itp.) jest wymagana do "
+#~ "podawania hasła.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> To okno dialogowe służy jedynie do dodawania zdalnych "
+#~ "urządzeń (np. za pomocą Samba) oraz do uzyskiwania dostępu do lokalnie "
+#~ "zamontowanych katalogów. Normalne odtwarzacze muzyczne, podłączane przy "
+#~ "użyciu USB, Cantata wyświetli automatycznie gdy zostaną podłączone.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA</b> Należy wpisać tylko wartości dla tych tagów, które mają "
+#~ "zostać przeszukane. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA</b> Dla gatunków, należy użyć gwiazdki * aby wybierać wiele "
+#~ "gatunków np. 'rock*' wyszuka 'Hard Rock' oraz 'Rock and Roll'. </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
+#~ "backdrops, within the music folder, and you do not have write access to "
+#~ "this folder, then Cantata will revert to saving the files in your "
+#~ "personal cache folder.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Jeżeli wybrano opcję aby Cantata przechowywała okładki, "
+#~ "teksty oraz tła w katalogu muzyki, a użytkownik nie ma wystarczających "
+#~ "uprawnień do pisania w tym katalogu, to Cantata będzie przechowywać te "
+#~ "dane w osobistym katalogu pamięci podręcznej.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
+#~ "Tracks')</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Cantata może zapisać tła i obrazy artystów w katalogu z "
+#~ "muzyką jeżeli ta ma hierarchię o głębokości 2 poziomów (tzn. 'Artysta/"
+#~ "Album/Utwory')</i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata zaawansowanym i przyjaznym dla użytkownika "
+#~ "klientem dla serwera Music Player Daemon (MPD). MPD jest aplikacją "
+#~ "działającą w tle, która pozwala na odtwarzanie muzyki.</p><p>W celu "
+#~ "uzyskania informacji na temat MPD prosimy o odwiedzenie strony <a href="
+#~ "\"http://www.musicpd.org\"><span style=\" text-decoration: underline; "
+#~ "color:#0000ff;\">http://www.musicpd.org</span></a></p><p>Ten 'kreator "
+#~ "konfiguracji' pomoże przy podstawowych ustawieniach potrzebnych do "
+#~ "poprawnego działania programu Cantata.</p></body></html>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music. MPD may be started either system-wide, or on a per-"
+#~ "user basis. Please select how you would like to have Cantata initially "
+#~ "connect to (or startup) MPD:</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata zaawansowanym i przyjaznym dla użytkownika "
+#~ "klientem dla serwera Music Player Daemon (MPD). MPD jest aplikacją "
+#~ "działającą w tle, która pozwala na odtwarzanie muzyki. MPD może zostać "
+#~ "uruchomione dla całego systemu lub dla każdego użytkownika. Proszę wybrać "
+#~ "sposób, w jaki Cantata ma łączyć się z MPD podczas uruchamiania:</p></"
+#~ "body></html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
+#~ "lyrics, etc. If you're MPD instance is on a remote host, you may set this "
+#~ "to a HTTP URL.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Ustawienie 'Katalog z muzyką' jest używane do "
+#~ "wyszukiwania okładek, tekstów, itp. Jeżeli używana jest instancja MPD na "
+#~ "zdalnym hoście, to można użyć adresu URL w postaci HTTP.</i>"
+
+# Polskie zasady pisowni wymagają, aby kropkę stawiać za nawiasem
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Przy używaniu gniazda lokalnego konieczne jest "
+#~ "ustawienie pełnej absolutnej ścieżki do gniazda. (Numer portu nie jest "
+#~ "wymagany).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, "
+#~ "within the music folder, and you do not have write access to this folder, "
+#~ "then Cantata will revert to saving the files in your personal cache "
+#~ "folder. However, for streams, if you do not have write access, then you "
+#~ "will only be able to view (and play) the streams stored in the music "
+#~ "folder, and not add (or edit) any streams. If you elect not to store "
+#~ "streams within the music folder, then these will be saved in your local "
+#~ "config folder - and will only be accessible to yourself.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Jeśli w ustawieniach Cantaty wybrana zostanie opcja "
+#~ "zapisu okładek lub tekstów w katalogu muzyki, a program nie ma dostępu "
+#~ "lub możliwości zapisu do tego katalogu, wtedy Cantata powróci do "
+#~ "zapisywania tych plików w osobistym katalogu pamięci podręcznej. "
+#~ "Jakkolwiek, w przypadku strumieni, przy braku możliwości zapisu możliwe "
+#~ "jest jedynie przeglądanie i odtwarzanie strumieni zapisanych w katalogu "
+#~ "muzyki, jednak nie ma możliwości dodawania lub edycji strumieni. Jeśli "
+#~ "nie wybrano opcji zapisu strumieni w katalogu muzyki, wtedy będą one "
+#~ "zapisywane w lokalnym katalogu konfiguracji i będą dostępne tylko dla "
+#~ "obecnego użytkownika.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata can only save backdrops and artist images within "
+#~ "the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/"
+#~ "Tracks'.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Cantata może zapisać tła i obrazy artystów w katalogu z "
+#~ "muzyką jeżeli ta ma hierarchię o głębokości 2 poziomów tzn. 'Artysta/"
+#~ "Album/Utwory'.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
+#~ "currently cannot upload files to external HTTP servers. Therefore, the "
+#~ "above settings should be left un-checked.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> 'Katalog muzyki' został ustawiony na adres HTTP i "
+#~ "Cantata obecnie nie potrafi wysyłać plików do zewnętrznych serwerów HTTP. "
+#~ "Dlatego powyższe ustawienie powinno zostać odznaczone.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the play queue appears to the side of the "
+#~ "other views. If you enable the option above, then it will be merged into "
+#~ "the sidebar as per other views.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Domyślnie kolejka odtwarzania wyświetlana jest z boku "
+#~ "innych widoków. Przy zaznaczeniu powyższej opcji, zostanie ona włączona "
+#~ "do panelu bocznego jako jeden z pozostałych widoków.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
+#~ "accessible by pressing its icon in the main toolbar. If you enable the "
+#~ "option above, then it will be merged into the sidebar as per other views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Domyślnie widok \"Informacje\" jest dostępny przez ikonę "
+#~ "na głównym pasku narzędziowym. Po zaznaczeniu powyższej opcji, zostanie "
+#~ "onumieszczony na pasku bocznym, tak jak inne widoki.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "Okładki:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> W trakcie poszukiwania obrazów artystów, Cantata będzie "
+#~ "próbowała znaleźć pliki o nazwie artist.jpg, artist.png, 'Artist'.jpg, or "
+#~ "'Artist'.png,\n"
+#~ "wewnątrz katalogu z obecnym utworem, albo w katalogu nadrzędnym. Jeśli "
+#~ "żaden obraz nie zostanie znaleziony, to Cantata spróbuje pobrać go z "
+#~ "sieci.</i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "Sortuj albumy:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "Styl widoku katalogów:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "Styl widoku strumieni:"
+
+#~ msgid "Online view style:"
+#~ msgstr "Styl widoku serwisów on-line:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "Styl widoku urządzeń:"
+
+#~ msgid "Search view style:"
+#~ msgstr "Styl widoku wyszukiwania:"
+
+#~ msgid "Cache scaled covers"
+#~ msgstr "Zapisz przeskalowane okładki w pamięci podręcznej"
+
+#~ msgid ""
+#~ "<p>This will change Cantata's interface as detailed:\n"
+#~ "<ul><li>Playback, and control, buttons will be 33% wider</li><li>Views "
+#~ "will be 'flickable'</li><li>To drag items, you will need to 'touch' the "
+#~ "top-left corner</li><li>Scrollbars will only be a few pixels wide</"
+#~ "li><li>Actions (e.g. 'Add To Play Queue') will always be visible (not "
+#~ "just when item is under mouse)</li><li>Spin buttons with have + and - "
+#~ "buttons at the side of the text field</li></ul></p>"
+#~ msgstr ""
+#~ "<p>To ustawienie wpłynie na interfejst w następujący sposób:\n"
+#~ "<ul><li>Przyciski odtwarzania i kontroli będą 33% szersze</li><li>Widoki "
+#~ "będą przesuwane przez przeciągnięcie</li><li>Aby przeciągnąć elementy "
+#~ "trzeba kliknąć/dotknąć lewy górny róg</li><li>Paski przewijania będą "
+#~ "szerokie tylko na kilka pikseli</li><li>Akcje (np. \"Dodaj do kolejki "
+#~ "odtwarzania) będą zawsze widoczne (nie tylko po najechaniu na nie "
+#~ "kursorem)</li><li>Wejścia numeryczne będą miały przyciski + i − obok pola "
+#~ "tekstowego</li></ul></p>"
+
+#~ msgid "Show stop button in toolbar"
+#~ msgstr "Pokazuj przycisk stop w pasku narzędzi"
+
+#~ msgid "Show cover of current track in toolbar"
+#~ msgstr "Pokazuj okładkę obecnego utworu w pasku narzędziowym"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Zmiana opcji 'Wymuś aktywację elementów przy pojedynczym "
+#~ "kliknięciu' wymaga restartu Cantaty.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Zmiana ustawienia jeżyka wymaga restartu Cantaty.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
+#~ "start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Uwaga:</b> Zmiana ustawienia \"interfejs dotykowy\" wymaga restartu "
+#~ "Cantaty.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Przy przyciśnięciu i przytrzymaniu przycisku stop "
+#~ "otwarte zostanie menu pozwalające na wybór, czy odtwarzanie ma zostać "
+#~ "zatrzymane natychmiast, czy po obecnym utworze.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Ustawienie 'Katalog z muzyką' służy do poszukiwania "
+#~ "okładek (albo wartość podana powyżej, albo <code>cover.jpg / cover.png</"
+#~ "code> jeśli jej nie sprecyzowano). Jeśli posiadasz prawa zapisu do tego "
+#~ "katalogu (i podkatalogów), to Cantata będzie zapisywała wszystkie pobrane "
+#~ "okładki do odpowiednich katalogów.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD "
+#~ "configured to output to a HTTP stream, and you wish Cantata to be able to "
+#~ "play that stream.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Opcja 'URL strumienia HTTP' używana jest wyłącznie "
+#~ "wtedy, gdy wyjściem MPD jest strumień HTTP, a Cantata ma mieć możliwość "
+#~ "jego odtwarzania.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>NOTE:</b> Przy zmianie ustawienia \"Katalog z muzyką\" konieczne "
+#~ "jest ręczne uaktualnienie bazy danych z muzyką. Może to zostać wykonane "
+#~ "przez użycie przycisku \"Odśwież bazę danych\" w widoku \"Artyści\" lub "
+#~ "\"Albumy\".</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>NOTE:</b> Jeśli nie ustawiono nazwy pliku dla okładki, Cantata "
+#~ "użyje domyślnej nazwy <code>cover</code> </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> MPD zazwyczaj odtwarza tylko utwory zapisane w jego "
+#~ "katalogach. Cantata zawiera minimalistyczny serwer HTTP, który może być "
+#~ "użyty do przesyłania innych plików do MPD. Ta opcja działa jedynie gdy "
+#~ "uruchomiony jest program Cantata. <br/><br/>\n"
+#~ "<b>UWAGA:</b> Przy wyborze 'Lokalny loopback' w polu 'Interfejs "
+#~ "sieciowy', to MPD <b>musi</b> też być na tym komputerze.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio."
+#~ "com, RockRadio.com, and Sky.fm</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Te ustawienia odnoszą się do Digitally Imported, "
+#~ "JazzRadio.com, RockRadio.com, oraz Sky.fm.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter account details, then a 'DI' status item "
+#~ "will appear under the list of streams. This will indicate if you are "
+#~ "logged in or not</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Po wpisaniu szczegółów konta wyświetlony zostanie status "
+#~ "'DI' pod listą strumieni. Jest to wskaźnik tego, czy jest się "
+#~ "zalogowanym, czy nie.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot "
+#~ "be removed.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Wbudowane kategorie wyświetlone są kursywą i nie mogą "
+#~ "zostać usunięte.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
+#~ "'Rock;Hard Rock')</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA</b> Gatunki należy oddzielać od siebie średnikiem (np. 'Rock;"
+#~ "Hard Rock')</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "Skanować <b>wszystkie</b> utwory?<br><br><i>UWAGA: Wszystkie utwory "
+#~ "posiadają istniejące tagi ReplayGain.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via "
+#~ "MPD)' (such as %1), then you will need to have this already started and "
+#~ "running. Cantata can only 'Love' tracks via this, and cannot enable/"
+#~ "disable scrobbling.</i>"
+#~ msgstr ""
+#~ "<i><b>UWAGA:</b> Jeśli używany jest scrobbler oznaczony jako '(przez "
+#~ "MPD)' (na przykład %1), to musi on być już uruchomiony. Cantata może "
+#~ "oznaczać utwory jako \"Ulubione\" przy użyciu takiego scrobblera i nie "
+#~ "może włączać/wyłączać scrobblowania.</i>"
+
+#~ msgid "Failed to install <b>%1</b>"
+#~ msgstr "Instalowanie nie powiodło się <b>%1</b>"
+
+#~ msgid "Failed to download <b>%1</b>"
+#~ msgstr "Pobieranie nie powiodło się <b>%1</b>"
+
+#~ msgid "ListenLive"
+#~ msgstr "ListenLive"
+
+#~ msgid "Install the following?"
+#~ msgstr "Zainstalować następujące?"
+
+#~ msgid "Update the following?"
+#~ msgstr "Zaktualizować następujące?"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "Nie powiodło się utworzenie <b>%1</b>!"
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "Strumień już istnieje!<br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "Strumień o nazwie <b>%1</b> już istnieje!"
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "Przeładować <b>%1</b> strumieni(e)?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "Czy na pewno usunąć zakładkę <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "Czy na pewno usunąć wszystkie <b>%1</b> zakładek?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "Czy na pewno usunąć <b>%1</b>?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Kategoria o nazwie <b>%1</b> już istnieje!<br/>Nadpisać?"
+
+#~ msgid "Failed top open package file"
+#~ msgstr "Otwieranie pliku pakietu nie powiodło się"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "Czy ustawić pierwszą dużą literę tagów 'Title', 'Artist', 'Album artist', "
+#~ "oraz 'Album' we <b>wszystkich</b> utworach?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "Plik źródłowy nie istnieje!<br/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "Docelowy plik już istnieje!<br/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "Tworzenie katalogu docelowego nie powiodło się!<br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "Nie powiodła się zmiana nazwy z %1 na %2"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music "
+#~ "folder\" setting, and MPD's \"music_directory\" setting.</p>"
+#~ msgstr ""
+#~ "<p>Brak dostępu do plików utworów!<br/><br/>Proszę sprawdzić ustawienia "
+#~ "Cantaty \"Katalog z muzyką\" oraz ustawienie MPD \"music_directory\".</p>"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check that the device is "
+#~ "still attached.</p>"
+#~ msgstr ""
+#~ "<p>Brak dostępu do plików utworów!<br/><br/>Proszę sprawdzić, czy "
+#~ "urządzenie jest nadal podłączone.</p>"
+
#~ msgid "TextLabel"
#~ msgstr "TextLabel"
@@ -7388,9 +8440,6 @@ msgstr "Dostępne aktualizacje: %1"
#~ msgid " seconds"
#~ msgstr " sekund"
-#~ msgid "Devices:"
-#~ msgstr "Urządzenia:"
-
#~ msgid "Current URL:"
#~ msgstr "Obecny URL:"
@@ -7501,9 +8550,6 @@ msgstr "Dostępne aktualizacje: %1"
#~ msgid "Disc %1"
#~ msgstr "Płyta %1"
-#~ msgid "Are you sure you wish to forget '%1'?"
-#~ msgstr "Czy na pewno zapomnieć '%1'?"
-
#~ msgid "Biography"
#~ msgstr "Biografia"
@@ -7598,9 +8644,6 @@ msgstr "Dostępne aktualizacje: %1"
#~ msgid "Online Music"
#~ msgstr "Muzyka on-line"
-#~ msgid "Are you sure you wish to remove '%1'?"
-#~ msgstr "Czy na pewno usunąć '%1'?"
-
#~ msgid "Are you sure you wish to unload '%1'?"
#~ msgstr "Czy na pewno wyłączyć '%1'?"
diff --git a/po/ru.po b/po/ru.po
index cf87a52..c7d94fb 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: 2014-07-06 19:55+0300\n"
"Last-Translator: sema1011 <sema19689 at gmail.com>\n"
"Language-Team: Russian <kde-russian at lists.kde.ru>\n"
@@ -22,10 +22,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr "Обновить сведения об альбоме"
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "Альбом"
@@ -36,32 +36,33 @@ msgstr "Альбом"
msgid "Tracks"
msgstr "Дорожки"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr "Обновить сведения об исполнителе"
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "Исполнитель"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "Альбомы"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Ссылки"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "Похожие исполнители"
@@ -69,28 +70,28 @@ msgstr "Похожие исполнители"
msgid "Lyrics Providers"
msgstr "Источники текстов"
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr "Языки Wikipedia"
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr "Другое"
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr "Перенастроить отступ"
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr "&Артист"
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr "&Альбом"
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr "&Трек"
@@ -120,16 +121,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "Название:"
@@ -137,17 +138,17 @@ msgstr "Название:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "Исполнитель:"
@@ -163,38 +164,39 @@ msgstr "Сайты для поиска текстов песен"
msgid "Song Information"
msgstr "Информация о песне"
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "Изображения (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr ""
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr "%1%"
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr ""
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "Слова песни"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "Инфо"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "Теги"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr ""
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -216,14 +218,14 @@ msgstr "Удалить файл со словами песни"
msgid "Refresh Track Information"
msgstr "Обновление информации о треках"
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "Отмена"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "Трек"
@@ -236,7 +238,7 @@ msgid ""
msgstr ""
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr "Обновить"
@@ -268,39 +270,39 @@ msgstr "Удалить файл со словами песни?"
msgid "Delete File"
msgstr "Удалить файл"
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr "Исполнитель альбома"
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr "Автор музыки"
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr "Поэт-песенник"
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr "Дирижер"
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr "Ремиксер"
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr "Субтитры"
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr "Номер трека"
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr "Номер диска"
@@ -312,102 +314,119 @@ msgstr "Номер диска"
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "Жанр"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "Дата"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr "Исходная дата"
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr "Комментарий"
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr "Copyright"
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr "Лейбл"
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr "Номер по каталогу"
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr "Сортировать название"
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr "Сортировать артист"
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr "Сортировать исполнитель альбома"
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr "Сортировать альбом"
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr ""
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "Кодировщик"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr "Настроение"
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr "Медиа"
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "Битрейт"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr "Частота дискретизации"
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr "Каналы"
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr "Пометка времени"
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr "Исполнитель (%1)"
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr ""
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr ""
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr ""
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr "Исполнитель"
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "Год"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr ""
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr "Загрузка слов песни с %1"
@@ -457,16 +476,16 @@ msgstr "Cantata проигрывает трек"
msgid "Songs To Be Copied"
msgstr "Песни, которые нужно скопировать"
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>НЕДОПУСТИМО</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(если отличается)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -475,339 +494,324 @@ msgid ""
"refresh Mopidy's database, and restart Cantata for any changes to be active."
msgstr ""
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr "Исполнители:%1, альбомы:%2, песни:%3"
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "%1 свободно"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "Локальная музыкальная библиотека"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "Аудио-CD"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-"На целевом устройстве недостаточно места.\n"
-"Выбранным песням необходимо %1, но доступно всего %2.\n"
-"Чтобы иметь возможность скопировать эти песни, их необходимо перекодировать "
-"в файлы меньшего размера."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"На целевом устройстве недостаточно места.\n"
-"Выбранным песням необходимо %1, но доступно всего %2."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "Копировать песни"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "Удалить песни"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Целевое устройство не настроено.<br/>Продолжить с настройками по "
-"умолчанию?</p>"
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr "Не настроено"
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr "Использовать параметры по умолчанию"
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
msgstr ""
-"<p>Устройство-источник не настроено.<br/>Продолжить с настройками по "
-"умолчанию?</p>"
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr "Точно остановить?"
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "Остановить"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "Устройство было удалено."
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "Устройство не подключено."
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "Устройство занято?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "Устройство было изменено?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "Очищение неиспользуемых папок"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr "Рассчитать ReplayGain для скопированных с диска треков?"
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
-msgstr "ReplyGain"
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
+msgstr "ReplayGain"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr "Рассчитать"
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr "Имя конечного файла уже существует!"
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr "Песня уже существует!"
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr "Песня не существует!"
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
msgstr ""
"Не удалось создать папку!<br/>Пожалуйста, проверьте достаточно ли у вас прав."
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr "Исходного файла больше не существует?"
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr "Не удается скопировать."
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr "Не удается удалить."
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr "Не подключен к устройству."
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr "Выбранный кодек не доступен."
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr "Ошибка транскодирования."
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
msgstr ""
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr "Не удается прочитать исходный файл."
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr "Не удается записать файл назначения."
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr "Нет места на устройстве."
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr "Не удалось обновить метаданные."
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr "Не удалось загрузить трек."
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr "Не удалось заблокировать устройство."
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "Свойства локальной музыкальной библиотеки"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "Ошибка"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "Пропустить"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "Авто-пропуск"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "Повторить"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "Альбом:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "Трек:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr "Исходный файл:"
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr "Конечный файл:"
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr "Файл:"
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "Вычисление..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr "%1 (примерно)"
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr "Оставшееся время:"
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "Сохранение кеша"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "Применить обходное решение «несколько исполнителей»"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "Откатить обходное решение «несколько исполнителей»"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "Перевести в верхний режим"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "Настроить номера треков"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "Инструменты"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "Применить обходное решение «несколько исполнителей»?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>Эта настройка установит значения «Исполнитель альбома» и «Исполнитель» на "
-"«Несколько исполнителей» и значение «Название» на \"TrackArtist - TrackTitle"
-"\"</i>"
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "Откатить обходное решение «несколько исполнителей»"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr ""
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-"<i>Там, где значение «Исполнитель альбома» равно значению «Исполнитель», и "
-"название имеет формат \"TrackArtist - TrackTitle\", значение «Исполнитель» "
-"будет получаться из «Названия», а само значение «Название» будет равно "
-"названию композиции, т.е. <br/><br/>Скажем, если «Название» имеет формат "
-"\"Wibble - Wobble\", тогда «Исполнитель» будет иметь значение «Wibble», а "
-"«Название» — «Wobble»</i>"
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr "Откатить"
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
msgstr ""
-"Первая буква в значениях «Название», «Исполнитель», «Исполнитель альбома» и "
-"«Альбом» будет заглавной."
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "Настроить номера треков по:"
@@ -855,8 +859,8 @@ msgstr "Найдено несколько совпадений. Выберите
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "Название"
@@ -978,75 +982,76 @@ msgstr "Синхронизировать"
msgid "Forget Device"
msgstr "Исключить устройство"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "Добавить устройство"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "Произвести поиск подробной информациидля альбома и трека?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "Обновить"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "Через CDDB"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "Через MusicBrainz"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
msgstr ""
-"<p>Какой тип обновления необходимо выполнить?<ul><li>Частичное — сканируются "
-"только новые песни<i>(быстрое)</i></li><li>Полное — все песни сканируются "
-"повторно<i>(медленное)</i></li></ul></p>"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr ""
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
+msgstr ""
+
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "Частично"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "Полностью"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Точно удалить выбранные песни?\n"
-"Эту операцию нельзя будет отменить."
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr "Точно исключить <b>%1</b>?"
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr ""
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
-msgstr "Точно извлечь аудио- CD <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
+msgstr ""
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr "Извлечь"
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
-msgstr "Точно отключить <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
+msgstr ""
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "Отключить"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "Сначала необходимо закрыть другие диалоги."
@@ -1160,7 +1165,7 @@ msgstr ""
"с</b> могут приводить к неудовлетворительному качеству. Значения больше "
"<b>205 кбит/с</b> обычно излишни."
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1286,7 +1291,7 @@ msgstr ""
"только для музыкальных плееров компании Apple и плееров, не поддерживающих "
"формат FLAC."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1421,13 +1426,11 @@ msgstr "Дэнс"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-"<p>Следующие переменные будут заменены соответствующими названиями для "
-"каждого трека.</p>"
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
@@ -1435,53 +1438,52 @@ msgstr ""
"<tr><th><em>Переменная</em></th><th><em>Кнопка</em></th><th><em>Описание</"
"em></th></tr>"
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "Обновление..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "Чтение кеша"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr "%1 %2%"
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "Подключение к устройству..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "Устройства не обнаружены"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "Подключено к устройству"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "Отключено от устройства"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "Обновление папок..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "Обновление файлов..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "Обновление треков..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "Не подключено"
@@ -1489,7 +1491,7 @@ msgstr "Не подключено"
msgid "%1 (Disc %2)"
msgstr "%1 (диск %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "Совпадений в MusicBrainz не найдено."
@@ -1497,17 +1499,16 @@ msgstr "Совпадений в MusicBrainz не найдено."
msgid "Connection"
msgstr "Соединение"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "Музыкальная библиотека"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"Удалённое устройство с именем «%1» уже существует.\n"
-"Выберите другое имя."
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1587,20 +1588,20 @@ msgstr "Ёмкость неизвестна"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "Поиск"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr "Отметить элементы"
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr "Сбросить отмеченные элементы"
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr "Ничего не выбрано"
@@ -1644,7 +1645,7 @@ msgstr "Недопустимое имя файла. (%1)"
msgid "Failed to save %1."
msgstr "Не удалось сохранить %1"
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "Сбой удаления файла правил (%1)"
@@ -1676,66 +1677,70 @@ msgstr "Неверные аргументы."
msgid "Unknown method called."
msgstr "Неизвестный называемый метод."
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr "Неизвестная ошибка"
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "Запустить динамический плейлист"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "Остановить динамический режим"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
msgstr "Для работы динамического режима необходимо установить «perl»."
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "Сбой нахождения файла правил — %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "Сбой удаления предыдущего файла правил — %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "Сбой установки файла правил — %1 -> %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr "Dynamizer был завершён"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "Сохранение правила"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "Удаление правила"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "Ожидание ответа на предыдущую команду (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr "Не удалось сохранить %1. (%2)"
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "Сбой проверки состояния dynamizer. (%1)"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "Сбой установки текущих динамических правил (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1756,27 +1761,26 @@ msgstr "Удалить динамические правила"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Точно удалить выбранные правила?\n"
-"Эту операцию нельзя будет отменить."
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "Динамическое правило"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "Добавить"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr ""
"<i><b>ОШИБКА</b>: значение «с года» должно быть меньше значения «до года»</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1807,77 +1811,68 @@ msgstr " (Точное)"
msgid "Dynamic Rules"
msgstr "Динамические правила"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-"<p>Cantata будет опрашивать вашу библиотеку, используя все перечисленные "
-"правила.Список правил <i>Включить</i> будет применяться для создания списка "
-"песен, которыеможно использовать. Список правил <i>Исключить</i> будет "
-"применяться для создания списка песен, которые нельзя использовать. Если "
-"правил <i>Включить</i> не существует, Cantata будет использовать все песни "
-"(включая песни из правил <i>Исключить</i>).<br/>То есть, если вам нужно "
-"найти песни в стиле «Rock» исполнителя Петров ИЛИ нескольких исполнителей, "
-"то правило будет таким: <ul><li>Включить AlbumArtist=Петров Genre=Rock</"
-"li><li>Включить AlbumArtist=Несколько исполнителей</li></ul> Чтобы заставить "
-"Cantata искать песни исполнителя Иванов, не входящие в альбом АБВ, вам "
-"понадобится следующее правило: <ul><li>Включить AlbumArtist=Иванов</"
-"li><li>Исключить Album=АБВ</li></ul>После того, как набор используемых песен "
-"будет создан, Cantata сделает случайную подборку песен, чтобы в очереди на "
-"воспроизведение было заполнено 10 позиций.</p>"
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "Не удалось сохранить %1"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-"Набор правил с именем «%1» уже существует.\n"
-"Перезаписать?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr "Перезаписать правила"
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "Сохранение %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr "Удаление..."
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "Имя"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "Количество элементов"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "Используемое пространство"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr "Всего использовано места на диске: %1"
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1886,67 +1881,67 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "Обложки"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr "Масштабированные обложки"
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr "Художественное оформление"
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "Сведения об исполнителе"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr "Сведения об альбоме"
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr "Сведения об треке"
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr "Каталог потоков"
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr "Jamendo"
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr "Magnatune"
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr "Каталоги подкастов"
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr ""
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "Удалить всё"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "Удалить все «%1» объектов?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "Удалить элементы кеша"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>Удалить всё из следующего?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr ""
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1957,7 +1952,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1966,71 +1961,70 @@ msgid ""
"%2 x %3"
msgstr ""
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr "Текущая обложка"
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr "CoverArt Archive"
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "Изображение"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "Загружается..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "Изображение (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
"Для этого артиста изображение уже существует, и файл не доступен для записи."
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
"Для этого альбома обложка уже существует, и файл не доступен для записи."
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr "'%1' Изображение исполнителя"
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr ""
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-"Сбой настройки обложки\n"
-"Не удалось сохранить во временный файл."
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "Сбой загрузки изображения."
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "Загрузить локальную обложку"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "Файл уже в списке."
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "Сбой чтения изображения"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "Экран"
@@ -2042,36 +2036,33 @@ msgstr "Экран"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "Удалить"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-"Сбой настройки обложки\n"
-"Не удалось создать копию"
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-"Сбой настройки обложки\n"
-"Не удалось создать резервную копию оригинала"
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-"Сбой настройки обложки\n"
-"Не удалось скопировать файл в «%1»"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr "Идёт поиск..."
@@ -2087,257 +2078,199 @@ msgstr "Соединение установлено"
msgid "Connection Failed"
msgstr "Сбой подключения"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr "Альбом, Артист, Год"
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr "Альбом, Год, Артист"
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr "Артист, Альбом, Год"
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr "Артист, Год, Альбом"
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr "Год, Альбом, Артист"
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr "Год, Артист, Альбом"
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "Нет"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "Маленький"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "Средний"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "Большой"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "Очень большой"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr "Основные дерево (Без иконок)"
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "Простое дерево"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "Подробное дерево"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "Отсортированные альбомы"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "Список"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "Значок/список"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr ""
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "Таблица"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "Проиграть очередь"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "Исполнители"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "Папки"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "Плейлисты"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr "Динамический Плейлист"
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr "Потоки (например радиостанции)"
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr "Онлайн сервисы - Jamendo, Maganatune, SoundCloud и Подкаст"
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr "Устройства - UMS, MTP (например Android) и AudioCDs"
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr "Поиск (через MPD)"
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr "Информация - текущая информация о песне (исполнитель, альбом и текст)"
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "Стиль:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "Большой"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "Маленький"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr "Панель вкладок"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr "Слева"
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr "Справа"
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr "Сверху"
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr "Снизу"
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr ""
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr "Системный"
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr "Cantata"
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "Клиент KDE для MPD"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr "© 2011-2014 Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Крейг Драммонд"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "Сопровождающий"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Пётр Вичиёвски (Piotr Wicijowski)"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "Улучшения интерфейса"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Сандер Кноппер (Sander Knopper)"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "Автор QtMPC"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Рёленд Доума (Roeland Douma)"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Дэниэль Селинджер (Daniel Selinger)"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Армин Волленд (Armin Walland)"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr "FanArt.tv"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
@@ -2345,114 +2278,119 @@ msgstr ""
"Художественное оформление контекстного вида (не забудьте выложить свой фан-"
"арт на музыкальные темы на сайте fanart.tv)."
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr "Wikipedia"
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr "Метаданные контекстного вида."
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr "Last.fm"
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "Адрес URL"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "Настроить Cantata..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr "Настройки"
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "Выход"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "О программе Cantata..."
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "Показать окно"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "Сведения о сервере..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "Обновить базу данных"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "Подключиться"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr "Коллекция"
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "Выводы"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "Остановить после трека"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "Добавить в сохраняемый плейлист"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "Обрезать"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "Добавить URL потока"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "Очистить"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr "Центр по текущей дорожке"
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "Расширенный интерфейс"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr "Показать инфо текущей песни"
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "Полный экран"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "Случайно"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "Повтор"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "Одиночный"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
@@ -2460,117 +2398,125 @@ msgstr ""
"«Одиночный» режим: воспроизведение останавливается после текущей песни, или, "
"в случае активного режима «Повтор», текущая песня повторяется"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "Поглощение"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
msgstr ""
"Режим «Поглощение»: песня удаляется из очереди после того, как была проиграна"
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr ""
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "Настроить приоритет"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "Воспроизводить поток"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "Найти в библиотеке"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "Редактировать теги"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "Развернуть всё"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "Свернуть всё"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr "Удалить все песни"
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr "Очистить состояние «New» для Исполнителей и Альбомов"
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "Динамический"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "Потоки"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "Онлайн"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "Устройства"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "Инфо"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr "Показать меню"
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr "&Музыка"
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr "&Редактировать"
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr "&Вид"
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr "&Очередь"
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "&Настройки"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "&Помощь"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr ""
"Не удалось найти песен, подходящих под правила динамического плейлиста."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "Подключение к %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr "Обновить базу данных MPD?"
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "О программе Cantata"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2581,7 +2527,7 @@ msgstr ""
"Drummond<br/>Выходит на условиях лицензии <a href=\"http://www.gnu.org/"
"licenses/gpl.html\">GPLv3</a>"
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
@@ -2589,7 +2535,7 @@ msgstr ""
"На базе <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> — ©авторы QtMPC, "
"2007-2010<br/>"
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
@@ -2598,7 +2544,7 @@ msgstr ""
"Художественное оформление контекстного вида предоставлено сайтом <a href="
"\"http://www.fanart.tv\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
@@ -2607,7 +2553,7 @@ msgstr ""
"Метаданные контекстного вида предоставлены сайтами <a href=\"http://www."
"wikipedia.org\">Wikipedia</a> и <a href=\"http://www.last.fm\">Last.fm</a>."
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
@@ -2615,21 +2561,30 @@ msgstr ""
"Вы можете выкладывать ваши творческие работы на темы музыкального фан-арта "
"на сайт <a href=\"http://www.fanart.tv\">FanArt.tv</a>"
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
+msgstr ""
+
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
+msgstr ""
+
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
msgstr ""
-"В настоящее время происходит загрузка подкастов\n"
-"\n"
-"Выход из программы отменит все загрузки."
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
-msgstr "Прервать загрузки и выйти"
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr ""
+
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "Сведения о сервере"
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2643,7 +2598,7 @@ msgstr ""
"td></tr><tr><td align=\"right\">Обработчики: </td><td>%6</td></"
"tr><tr><td align=\"right\">Тэги: </td><td>%7</td></tr>"
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2657,77 +2612,96 @@ msgstr ""
"tr><tr><td align=\"right\">Продолжительность: </td><td>%4</td></"
"tr><tr><td align=\"right\">Обновление: </td><td>%5</td></tr>"
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "Сведения о сервере"
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr "Cantata (%1)"
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr "MPD выдал следующую ошибку: %1"
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr "Воспроизведение остановлено"
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr "Удалить все песни из очереди?"
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "Приоритет"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "Введите приоритет (0..255):"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "Имя плейлиста"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "Введите имя плейлиста:"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-"<b>%1</b> используется для хранения любимых потоков, выберите другое имя."
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
-msgstr "Плейлист с именем <b>%1</b> уже существует<br/>Добавить к нему?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
+msgstr ""
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "Существующие плейлисты"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr "URL-адрес потока"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr "Введите URL-адрес потока:"
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr "Недопустимый или неподдерживаемый, URL-адрес!"
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr "Можно редактировать теги песен только в музыкальной коллекции MPD."
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "Нет"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr "Авто"
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
@@ -2735,9 +2709,9 @@ msgstr ""
"<i>Подключено к %1<br/>Элементы ниже относятся к текущей подключённой "
"коллекции MPD.</i>"
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
@@ -2745,31 +2719,21 @@ msgstr ""
"<i>Не подключено.<br/>Элементы ниже нельзя изменять, т.к. Cantata не "
"подключена к MPD.</i>"
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
-msgstr ""
-"<p>Replay Gain — это стандарт, предложенный в 2001 году для выравнивания "
-"уровня громкости компьютерных аудио-форматов, таких, как MP3 и Ogg Vorbis. "
-"Он функционирует на базе принципа трек/альбом, и на сегодня поддерживается "
-"большим числом плееров.</p><p>Для ReplayGain можно использовать следующие "
-"настройки: <ul><li><i>Нет</i> — ReplayGain не используется</li><li><i>Трек</"
-"i> — громкость будет настроена с использованием тегов ReplayGain данного "
-"трека</li><li><i>Альбом</i> — громкость будет настроена с использованием "
-"тегов ReplayGain данного альбома</li><li><i>Авто</i> — в случае случайного "
-"режима воспроизведения громкость будет настроена с использованием тегов "
-"ReplayGain данного трека, иначе — используются теги альбома.</li></ul></p>"
-
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+"li></ul>"
+msgstr ""
+
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "Переименовывать"
@@ -2777,35 +2741,37 @@ msgstr "Переименовывать"
msgid "Remove Duplicates"
msgstr "Удаление дубликатов"
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"Точно удалить выбранный плейлист?\n"
-"Эту операцию нельзя будет отменить."
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr "Удалить плейлист"
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Плейлист с именем <b>%1</b> уже существует.<br/>Перезаписать?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr "Перезаписать плейлист"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "Переименовать плейлист"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "Новое имя плейлиста:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr "Не может добавить песни из '%1' в '%2'"
@@ -2889,113 +2855,117 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr "Настройки коллекции"
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "Воспроизведение"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "Настройки воспроизведения"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "Файлы"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "Настройки файлов"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "Интерфейс"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "Настройки интерфейса"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr "Настройки потоков"
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr "Источники в сети"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr "Контекст"
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr "Настройки внешнего вида контекста"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr "Скробблинг"
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr "Параметры скробблинга"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "Сервер HTTP"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "Настройки сервера HTTP"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "Настройки аудио-CD"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr "Прокси"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "Настройки прокси"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "Комбинации клавиш"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "Настройки комбинаций клавиш"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "Кеш"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "Кешированные элементы"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr ""
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "Настройка"
@@ -3003,60 +2973,64 @@ msgstr "Настройка"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr "Автор музыки:"
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr "Исполнитель:"
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "Жанр:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr "Комментарий:"
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr "Дата:"
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr ""
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr "Любые:"
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr "Треки не найдены."
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
@@ -3064,336 +3038,313 @@ msgstr ""
"<i> Эта папка также будет использоваться для хранения музыкальных файлов, "
"переносимых с/на устройства.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "Хост:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr ""
+
+#: gui/serversettings.cpp:240
+msgid ""
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
+msgstr ""
+
+#: gui/serversettings.cpp:241
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
msgstr ""
-"К какому типу коллекции вы хотите подключиться?<br/><ul><li>Стандартный — "
-"коллекцию можно сделать общим ресурсом, она находится на другой машине или "
-"уже настроена</li><li>Базовый — коллекция не является общим ресурсом, и "
-"Cantata настроит и будет управлятьэкземпляром MPD.</li></ul>"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr "Добавить коллекцию"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr "Стандартный"
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr "Базовый"
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
-msgstr "Удалить <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
+msgstr ""
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr "Удалить"
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr "Новая коллекция %1"
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "По умолчанию"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr "Мультимедиа-клавиши"
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr "Не использовать мультимедиа-клавиши для управления Cantata"
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr "Использовать мультимедиа-клавиши для управления Cantata"
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-"Использовать мультимедиа-клавиши для управления Cantata, согласно настройкам "
-"рабочего стола"
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-"Использовать мультимедиа-клавиши для управления Cantata, согласно настройкам "
-"GNOME/Unity"
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr "Настроить..."
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "Предыдущий трек"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "Следующий трек"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "Воспр./Пауза"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "Остановить после текущего трека"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "Увеличить громкость"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "Уменьшить громкость"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "Сохранить как"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "Добавить в очередь воспроизведения"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr "Добавить альбомы в случайном порядке"
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "Заменить очередь воспроизведения"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "Добавить с приоритетом"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "Высший приоритет (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "Высокий приоритет (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "Средний приоритет (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "Низкий приоритет (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "Приоритет по умолчанию (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "Пользовательское значение приоритета..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "Добавить в плейлист"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "Систематизировать файлы"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "Редактировать теги"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "ReplayGain"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr ""
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr "Копировать песни на устройство"
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr "Указать изображение"
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr "Поиск"
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "Проигрывается"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr "Локальная петля (%1)"
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr "Проводное (%1)"
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr "Беспроводное (%1)"
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr "Первый активный интерфейс"
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr ""
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr ""
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%1 исполняет %2"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Cue Sheet"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "Плейлист"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "Настройка устройства"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "Обновить устройство"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "Подключить устройство"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "Отключить устройство"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "Редактировать подробности CD"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "Нет подключённых устройств"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr "Вход не выполнен"
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr "Вход выполнен"
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr "Нет подписок"
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr "У вас нет активных подписок"
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr "Вход выполнен (истекает: %1)"
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr "Время сеанса истекло"
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "Аудио-файл"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "Отдельные треки"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr "Настройка сервиса"
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr "Обновить сервис"
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr "Добавить подписку"
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr "Удалить подписку"
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr "Обновить подписку"
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr "Последний поисковый запрос:%1"
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "Не загружено"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr "Искать треки через поиск"
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr "(Идёт загрузка: %1%)"
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr ""
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr "%1 (%2)"
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "Новый плейлист..."
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr "Смарт-плейлист"
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "Длина"
@@ -3401,6 +3352,10 @@ msgstr "Длина"
msgid "Disc"
msgstr "Диск"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr ""
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr "Отменить"
@@ -3423,85 +3378,81 @@ msgstr "Сортировать по"
msgid "Album Artist"
msgstr "Исполнитель альбома"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(Приоритет: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr "Загрузка..."
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr "Закладки"
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr "TuneIn"
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr "IceCast"
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr "ShoutCast"
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr "Dirble"
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr "Избранное"
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr "Категория закладки"
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr "Добавить поток в Избранное"
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr "Настройка потоков"
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "Неизвестно"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr "«%1»"
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr "«%1» (%2:%3)"
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "Сбой подключения к %1"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr ""
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "Сбой подключения к %1 — неправильный пароль"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "Сбой передачи команды для %1 — нет подключения"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr "Сбой загрузки. Проверьте права на чтение для пользователя «mpd»."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
@@ -3509,27 +3460,27 @@ msgstr ""
"Сбой загрузки. MPD может проигрывать локальные файлы только при подключении "
"к локальному сокету."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "Сбой передачи команды. Отключено от %1."
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "Сбой переименования <b>%1</b> в <b>%2</b>"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "Сбой сохранения <b>%1</b>"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr "Нельзя добавлять фрагменты файла cue sheet в плейлист."
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr "Нельзя добавлять плейлист к другому плейлисту."
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
@@ -3537,15 +3488,11 @@ msgstr ""
msgid "Personal"
msgstr "Частный"
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "Неизвестно"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "Несколько исполнителей"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3559,12 +3506,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr ""
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr ""
@@ -3597,19 +3544,19 @@ msgstr "Ogg"
msgid "Streaming format:"
msgstr "Формат потока:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "Потоковая передача"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr "MP3 128k"
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr "MP3 VBR"
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr "WAV"
@@ -3619,85 +3566,85 @@ msgstr "Настройки Magnatune"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "Пользователь:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "Пароль:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr "Членство:"
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "Загрузки:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "Идёт загрузка"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "Обновление экрана"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "Сортировка треков"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr "Обработка ответа"
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "Сбой обработки"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "Сбой загрузки"
@@ -3713,131 +3660,135 @@ msgstr "Загрузить эпизоды подкаста"
msgid "Delete Downloaded Podcast Episodes"
msgstr "Удалить загруженные эпизоды подкаста"
-#: online/onlineservicespage.cpp:299
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
+msgstr ""
+
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr ""
+
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
+msgstr ""
+
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
+msgstr "Настроить..."
+
+#: online/onlineservicespage.cpp:322
msgctxt "Search ServiceName:"
msgid "Search %1:"
msgstr "Поиск %1:"
-#: online/onlineservicespage.cpp:437
+#: online/onlineservicespage.cpp:467
msgid "Re-download music listing for %1?"
msgstr "Повторно загрузить список музыки для %1?"
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
msgid "Re-download"
msgstr "Загрузить снова"
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
-msgstr "Отменить подписку для <b>%1</b>?"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
+msgstr ""
-#: online/onlineservicespage.cpp:544
+#: online/onlineservicespage.cpp:574
msgid "Refresh all podcast listings?"
msgstr "Обновить список всех подкастов?"
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
-msgstr "Обновить список эпизодов для <b>%1</b>?"
-
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
-msgstr "Все выбранные подкасты были уже загружены."
-
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
-msgstr "Загрузить следующий эпизод подкаста?"
-
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
-msgstr "Загрузить следующие эпизоды подкаста?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
+msgstr ""
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr "Загрузить выбранные эпизоды подкаста?"
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
-msgstr "Все выбранные загруженные эпизоды подкаста уже были удалены."
-
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:648
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
-msgstr "Удалить загруженный файл следующего эпизода подкаста?"
-
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
-msgstr "Удалить загруженные файлы следующих эпизодов подкаста?"
+"Cancel podcast episode downloads (both current and any that are queued)?"
+msgstr ""
-#: online/onlineservicespage.cpp:699
+#: online/onlineservicespage.cpp:685
msgid ""
"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr "Удалить загруженные файлы выбранного эпизода подкаста?"
-#: online/podcastsearchdialog.cpp:253
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
+msgstr ""
+
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
+msgstr ""
+
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr "RSS:"
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr "Сайт:"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr "Подробности подкаста"
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr "Выбрать подкаст для показа подробностей"
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr "Введите поисковый запрос…"
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr "Сбой получения подкаста с %1"
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr "При выполнении обработки ответа от %1 возникла ошибка"
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr "Не удалось загрузить содержимое каталога"
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr "Не удалось проанализировать содержимое каталога"
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr "URL"
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr "Введите URL-адрес подкаста..."
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr ""
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr ""
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr "Недопустимый URL."
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr "Не удалось загрузить подкаст!"
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr "Не удалось проанализировать подкаст."
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
@@ -3845,61 +3796,61 @@ msgstr ""
"Cantata поддерживает только аудио-подкасты! URL-адрес содержит только видео "
"подкасты."
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr "Подписаться"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr "Введите URL-адрес"
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr "Ручной URL-адрес подкаста "
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr "Искать %1"
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr "Поиск подкастов на %1"
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr "Добавить подкаст подписку"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr "Просмотреть %1"
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr "Просмотреть %1 подкастов"
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr "Подписка добавлена"
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr "Вы уже подписаны на этот подкаст"
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr "Подкасты"
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
"Cantata поддерживает только аудио-подкасты, а %1 содержит только видео-"
"подкасты."
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr "Сбой обработки %1"
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr "Не удалось загрузить %1"
@@ -3911,59 +3862,77 @@ msgstr "Проверить наличие новых эпизодов:"
msgid "Download episodes to:"
msgstr "Загрузить эпизоды в:"
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
-msgstr "Автоматически загружать новые эпизоды"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
+msgstr ""
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr "Настройки подкастов"
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr "Вручную"
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr "Каждые 15 минут"
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr "Каждые 30 минут"
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr "Каждый час"
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr "Каждые 2 часа"
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr "Каждые 6 часов"
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr "Каждые 12 часов"
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr "Каждый день"
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr "Каждую неделю"
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr ""
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr "Фоновое изображение"
@@ -3975,61 +3944,61 @@ msgstr "Изображение исполнителя"
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr "Пользовательское изображение:"
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr "Размытие:"
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr "10px"
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr "Непрозрачность:"
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr "40%"
@@ -4054,7 +4023,7 @@ msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " мс"
@@ -4083,8 +4052,8 @@ msgstr "Всегда сворачиваться в одну область"
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
#. i18n: file: context/othersettings.ui:213
@@ -4093,25 +4062,17 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr "Показывать только основной текст wikipedia"
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
-msgstr ""
-"<i><b>ВНИМАНИЕ:</b> Cantata не показывает страницы wikipedia полностью (с "
-"изображениями, ссылками и т.п), показывается только усечённая версия. Эта "
-"версия не всегда получается аккуратно на все 100%, поэтому, по умолчанию, "
-"Cantata показывает только базовое введение для каждой статьи. Если выбрать "
-"показ страницы полностью, то возможны ошибки обработки. Также будет "
-"необходимо удалить любую текущую кешированную статью (на страничке «Кеш»).</"
-"i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
+msgstr ""
#. i18n: file: context/togglelist.ui:17
#. i18n: ectx: property (text), widget (QLabel, label_2)
@@ -4168,21 +4129,20 @@ msgid "To copy:"
msgstr "Копировать:"
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
msgstr ""
#. i18n: file: devices/albumdetails.ui:26
@@ -4193,13 +4153,13 @@ msgstr "Подробности альбома"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "Год:"
@@ -4264,172 +4224,169 @@ msgid "Never skip on read error"
msgstr "Никогда не пропускать при ошибке чтения"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> данные настройки действуют и могут редактироваться "
-"только при подключённом устройстве.</i>"
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "Имя:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "Папка с музыкой:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "Скопировать обложки альбома как:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "Максимальный размер обложки:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "Громкость по умолчанию:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr "Автоматически сканировать музыку при подключении"
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr "Использование кэша"
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "Имена файлов:"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "Схема имени файла:"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr "безопасный VFAT "
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr "Использовать только символы ASCII"
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr "Заменить пробелы на подчеркивания"
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
-msgstr "Игнорировать 'The' в именах исполнителей"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
+msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "Перекодирование"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4551,176 +4508,159 @@ msgid "The genre of the album."
msgstr "Жанр альбома."
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> Эти настройки можно изменять только при отключённом "
-"устройстве.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "Тип:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "Параметры"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "Порт:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "Пользователь:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "Домен:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "Общий ресурс:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> введённый здесь пароль будет "
-"храниться<b>незашифрованным</b> в файле настроек Cantata. Для того, чтобы "
-"Cantata запрашивала пароль перед доступом к общему ресурсу, укажите пароль "
-"'-'</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "Имя сервиса:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "Папка:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "Дополнительные параметры:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> исходя из принципа работы sshfs, для ввода пароля вам "
-"потребуется подходящее приложение на базе ssh-askpass (ksshaskpass, ssh-"
-"askpass-gnome, и т.п.).</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> с помощью этого диалога можно добавить только удалённые "
-"устройства (например, через Samba) или получить доступ к локально "
-"смонтированным папкам. Для обычных медиа-плееров, подключённых по USB, "
-"Cantata автоматически покажет устройство сразу после его подключения.</i>"
#. i18n: file: dynamic/dynamicpage.ui:26
#. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel)
@@ -4740,39 +4680,51 @@ msgstr "Имя динамических правил"
msgid "Edit"
msgstr "Изменить"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "О правилах"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr "Включить песни, отвечающие следующему условию:"
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr "Исключить песни, отвечающие следующему условию:"
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "Найти похожих исполнителей:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "Исполнитель альбома:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "От года:"
@@ -4784,169 +4736,154 @@ msgstr "От года:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "Любой"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "До года:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "Точное совпадение"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
msgstr ""
-"<i><b>ВНИМАНИЕ</b> вводить значения только для тегов, по которым должен "
-"производиться поиск.</i>"
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
-"<i><b>ВНИМАНИЕ</b> Чтобы указать несколько жанров заканчивайте строку "
-"астериском (знак «*»). Например, 'rock*' будет соответствовать и 'Hard Rock' "
-"и 'Rock and Roll'. </i>"
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr "Добавить локальный файл"
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr ""
"Сохранять скачанные обложки и изображения исполнителей, в папку с музыкой"
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "Сохранять загруженные тексты песен в папке с музыкой"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr "Сохранять загруженный фон/оформление в папке с музыкой"
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "Первый запуск программы Cantata"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "Добро пожаловать в программу Cantata!"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
-"<html><head/><body><p>Cantata — это многофункциональный и дружественный к "
-"пользователю клиент Music Player Daemon (MPD). MPD — это фоновое приложение, "
-"которое можно использовать для проигрывания музыки. </p><p>За подробной "
-"информацией по MPD обращайтесь на его официальный сайт: <a href=\"http://www."
-"musicpd.org\"><span style=\" text-decoration: underline; color:#0000ff;"
-"\">http://www.musicpd.org</span></a>.</p><p>Этот помощник проведёт вас по "
-"базовым настройкам программы Cantata, необходимым для её правильной работы.</"
-"p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr ""
"<html><head/><body><p>Добро пожаловать в программу Cantata!</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
-"<html><head/><body><p>Cantata — это многофункциональный и дружественный к "
-"пользователю клиент Music Player Daemon (MPD). MPD — это фоновое приложение, "
-"которое можно использовать для проигрывания музыки. MPD можно запускать как "
-"общесистемно, так и отдельно для каждого пользователя. Выберите, как Cantata "
-"должна подключаться к MPD при запуске:</p></body></html>"
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr "Стандартная серверная многопользовательская настройка"
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4962,13 +4899,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr "Базовая настройка для одного пользователя"
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4979,7 +4916,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4995,13 +4932,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "Подробности соединения"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
@@ -5010,64 +4947,61 @@ msgstr ""
"Введите необходимые детали и нажмите кнопку «Подключиться» для проверки "
"соединения."
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "Хост (или локальный сокет):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> при использовании локального сокета необходимо указать "
-"полный абсолютный путь к нему. (Номер порта не требуется).</i>"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr "Папка с музыкой"
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr "Выбрать папку, в которой хранится ваша музыкальная коллекция."
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr "Обложки, тексты и потоки."
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -5075,55 +5009,32 @@ msgid ""
"folders.</p>"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-"<i><b>ВНИМАНИЕ:</b> если Cantata настроена на сохранение обложек или текстов "
-"песен в папке с музыкой, а у вас нет доступа на запись в эту папку, то в "
-"этом случае Cantata будет сохранять файлы в вашей персональной папке для "
-"кеша. Тем не менее, если речь идёт о потоках, то при отсутствии доступа на "
-"запись, вы сможете только просматривать и проигрывать потоки, сохранённые в "
-"папке с музыкой, но не добавлять их и не редактировать. Если вы не указывали "
-"сохранять потоки в папку с музыкой, тогда они будут сохраняться вв вашей "
-"локальной папке с настройками, и будут доступны только вам.</i>"
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
-msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
+msgid ""
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr "Готово!"
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
@@ -5133,9 +5044,20 @@ msgstr ""
"использовано для настройки внешнего вида Cantata, а также для добавления "
"дополнительных хостов MPD и т.д."
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -5152,265 +5074,298 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr "Боковая панель"
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr "Вид"
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr ""
"Используйте флажки ниже, чтобы настроить список активных представлений."
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "Стиль:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr "Позиция:"
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr "Показывать только значки"
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr "Использовать монохромные значки"
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr "Автоматически скрывать"
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "Обложки:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr "Показать изображения артиста"
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr "Сортировать альбомы по годам"
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
-msgstr ""
-"<i><b>ПРИМЕЧАНИЕ:..</b> При поиске фотографий исполнителей, Cantata будет "
-"искать или artist.jpg, artist.png, 'Artist'.jpg, или 'Artist'.png, \n"
-" в папке текущего трека или в пределах своей родительской папки. Если "
-"изображение не найдено, Cantata попытается загрузить его.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
+msgstr "Показать изображения артиста"
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "Сортировать альбомы:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr "Изначально альбомы свернуты"
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "Другие типы просмотра"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "Тип просмотра папки:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "Тип просмотра потоков:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "Тип он-лайн просмотра:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "Тип просмотра устройств:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr "Устройства:"
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr "Поиск стиля просмотра:"
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "Поиск:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr "Автоматически раскрывать текущий альбом"
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr "Прокручивать список до текущего трека"
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr "Запрос перед удалением"
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr "Текущая обложка альбома"
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "Внешнее"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr "Показать всплывающие сообщения при смене дорожек"
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr "Показывать значок в области уведомлений"
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr "Минимизировать в область уведомлений при закрытии"
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr "При запуске"
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr "Показать главное окно"
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr "Скрыть главное окно"
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr "Восстановить прежнее состояние"
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "Общее"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
"Разместить альбомы только с одной дорожкой в разделе 'Несколько исполнители/"
"Отдельные треки'"
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr "Группировать альбомы по композитору"
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5419,39 +5374,33 @@ msgid ""
"to 'Metal'."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr "Действовать только на песнях, которые проходят фильтрацию"
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr "Получить недостающие обложки из Last.fm"
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr "Кэш масштабированных обложек"
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr "Показать действие удаления в контекстных меню"
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr "Включать одним щелчком"
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5459,163 +5408,160 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr "Сделать интерфейс более дружественным"
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
-msgstr "Показать кнопку остановки в панели инструментов"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
-msgstr "Показывать обложку текущего трека в панели инструментов"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr "Язык:"
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> настройка «Принудительно включить выделение элементов по "
-"одному щелчку» потребует перезапуска программы Cantata.</i>"
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Примечание:</b> При изменении языка потребуется перезапустить Cantata."
-"</i>"
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-"<i><b>Примечание:</b> Изменение параметра «дружественный интерфейс» требует "
-"перезапуска Cantata.</i>"
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[Динамический]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr "Выход из полноэкранного режима"
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "Затухание при остановке:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "Остановить воспроизведение при выходе из программы"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr "Блокировать активацию ждущего режима во время проигрывания"
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> если нажать и удерживать кнопку «стоп», то будет "
-"показано меню, где можно выбрать, остановить ли воспроизведение сейчас или "
-"после окончания текущей композиции.</i>"
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "Вывод"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr "Затухания между треками:"
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr " s"
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "Replay gain:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr "Информация о replay gain"
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr "Используйте флажки ниже, чтобы контролировать активные выходы."
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr "Коллекция:"
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "Имя файла обложки:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5630,154 +5576,138 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr "Адрес потока HTTP:"
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> Настройка «папка с музыкой» используется для поиска "
-"обложек (введите значение, указанное выше или <code>cover.jpg / cover.png</"
-"code> при пустом значении). Если у вас также есть рекурсивные права на "
-"запись в эту папку, то Cantata будет сохранять все загружаемые обложки в "
-"соответствующую папку альбома.</i>"
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> параметр «адрес потока HTTP» можно использовать, только "
-"если вывод MPD настроен на HTTP-поток, и вам нужно, чтобы Cantata умела его "
-"проигрывать.</i>"
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> если настройка «папка с музыкой» была изменена, то вам "
-"необходимо вручную обновить базу данных. Это можно сделать, нажав кнопку "
-"«Обновить базу данных» в режиме «Исполнитель» или «Альбом».</i>"
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> если значение для имени файла обложки не указано, то "
-"Cantata будет использовать имя по умолчанию: <code>cover</code> </i>"
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr "Сетевой интерфейс:"
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
-msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
-msgstr ""
-"<i><b>ВНИМАНИЕ:</b> как правило, MPD проигрывает только песни, расположенные "
-"в папках MPD. Для возможности проигрывания других файлов Cantata может "
-"использовать свой мини-HTTP-сервер, но сервер работает только когда запущена "
-"Cantata.<br/><br/>\n"
-"<b>ВНИМАНИЕ:</b> если в качестве сетевого интерфейса выбрана «локальная "
-"петля», тогда MPD также <b>должен</b> присутствовать на данной машине.</i>"
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
+msgid ""
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
+msgstr ""
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr "Режим:"
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "HTTP-прокси"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "SOCKS прокси"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr "Используйте флажки ниже, чтобы настроить список активных служб."
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr "Скробблить с помощью:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr "Статус:"
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr "Логин"
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr "Скробблить треки"
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr "Показывать кнопку \"Love\""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5791,142 +5721,149 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr "Учётная запись Premium"
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr "Тип потока:"
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr "Сеанс истекает:"
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> Эти настройки применимы для Digitally Imported, "
-"JazzRadio.com, RockRadio.com и Sky.fm</i>"
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> При выборе настроек учётной записи, под списком потоков "
-"будет показан значок-индикатор авторизации ('DI'), изменяющийся в "
-"зависимости от того, был ли выполнен вход или нет.</i>"
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr "Используйте флажки ниже для настройки списка активных поставщиков."
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr "Настроить источник"
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr "Установить"
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
-"<i><b>ВНИМАНИЕ:</b> встроенные категории показываются курсивом, и их удалить "
-"нельзя.</i>"
-
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "Поиск:"
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "Горячие клавиши для выбранного действия"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "По умолчанию:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "Пользовательский:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "Исполнитель альбома:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "Номер трека:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "Номер диска:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr ""
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
msgstr ""
-"<i><b>К сведению</b> несколько жанров должны быть разделены через точку с "
-"запятой (например 'Rock;Hard Rock')</i>"
-#. i18n: file: tags/trackorganiser.ui:115
-#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
+msgid ""
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
+msgstr ""
+
+#. i18n: file: tags/trackorganiser.ui:115
+#. i18n: ectx: property (text), widget (QTreeWidget, files)
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "Исходное название"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "Новое название"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr ""
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Юлия Дронова"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "juliette.tux at gmail.com"
@@ -5977,7 +5914,7 @@ msgstr "Прервать сканирование треков?"
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr "Прервать"
@@ -5987,11 +5924,9 @@ msgstr "Прервать чтение существующих тегов?"
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
-"Сканировать <b>все</b> треки?<br><br><i>ВНИМАНИЕ: у всех треков уже есть "
-"теги ReplyGain.</i>"
#: replaygain/rgdialog.cpp:263
msgid "Do you wish to scan all tracks, or only tracks without existing tags?"
@@ -6013,17 +5948,17 @@ msgstr "Сканирование треков..."
msgid "Reading existing tags..."
msgstr "Чтение существующих треков..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr "%1 (испорченные теги?)"
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "Сбой обновления тегов для следующих треков:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "Устройство не подключено"
@@ -6047,64 +5982,64 @@ msgstr "Оригинал: %1 дБ"
msgid "Original: %1"
msgstr "Оригинал: %1"
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr "Удалить выбранные треки из списка?"
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr "Удалить треки"
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr "Недопустимая служба"
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr "Недопустимый метод"
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr "Ошибка аутентификации"
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr "Недопустимый формат"
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr "Недопустимые параметры"
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr "Недопустимый ресурс"
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr "Ошибка операции"
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr "Недействительный ключ сеанса"
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr "Недопустимый ключ API"
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr "Сервис недоступен"
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
"Last.fm в настоящее время занят, повторите попытку через несколько минут"
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr "Превышено ограничение скорости"
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr "%1 ошибка: %2"
@@ -6116,29 +6051,29 @@ msgstr ""
msgid "%1: Love Current Track"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr "%1 (через MPD)"
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr "Вход..."
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr "Вход выполнен"
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -6168,27 +6103,27 @@ msgstr "AAC 128к"
msgid "Logout"
msgstr "Выйти"
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr "URL:"
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr "Только добавить в очередь, не проигрывать"
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr "Добавить в очередь и сохранить в Избранном"
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "Добавить поток"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "Редактировать поток"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>ОШИБКА:</b> недопустимый протокол</i>"
@@ -6233,39 +6168,39 @@ msgid "Installing/updating %1"
msgstr ""
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
+msgid "Failed to install '%1'"
msgstr ""
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
+msgid "Failed to download '%1'"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
-msgstr "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
-msgstr "Установить следующие?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
-msgstr "Обновить следующие?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
+msgstr ""
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr "Установка/Обновление"
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr "Прервать установку/обновление?"
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr "Обновление всех обновляемых поставщиков"
@@ -6281,192 +6216,195 @@ msgstr "Экспортировать избранные потоки"
msgid "Add New Stream To Favorites"
msgstr "Добавить новый поток в Избранное"
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr "Digitally Imported"
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr "*.xml *.xml.gz *.cantata|потоки XML"
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "Импортировать потоки"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr "Потоки XML (*.xml *.xml.gz *.cantata)"
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr "*.xml|потоки XML"
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "Экспортировать потоки"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr ""
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "Сбой создания <b>%1</b>"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr ""
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "Поток уже существует:<br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "Поток с именем <b>%1</b> уже существует."
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr "Закладка добавлена"
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr "Уже в закладках"
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr "Уже в Избранном"
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
-msgstr "Обновить <b>%1</b> потоков?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
+msgstr ""
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
-msgstr "Точно удалить закладку для <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
+msgstr ""
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
-msgstr "Точно удалить все <b>%1</b> закладок?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
+msgstr ""
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "Точно удалить все %1 выбранных потоков?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "Точно удалить <b>%1</b>?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr ""
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr "Поиск %1:"
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr "Добавлено '%1' в избранное"
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr "Из файла..."
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr ""
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr "*.streams|потоки Cantata"
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr "Установить потоки"
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr "потоки Cantata (*.streams)"
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "Категория <b>%1</b> уже существует.<br/>Перезаписать?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
msgstr ""
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr "Недопустимый формат файла"
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr "Не удалось создать папку для категории потока"
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr "Не удалось сохранить список потоков"
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr "Не удалось удалить папку с потоками."
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr "&Ok"
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr "&Отмена"
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr "&Да"
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr "&Нет"
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr "&Отклонить"
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr "&Сохранить"
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr "&Применить"
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr "&Закрыть"
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr "&Заменить"
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr "&Сбросить"
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr "&Продолжить"
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr "&Удалить"
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr "&Остановить"
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr "&Удалить"
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr "&Предыдущее"
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr "&Далее"
@@ -6478,14 +6416,32 @@ msgstr "Пароль"
msgid "Please enter password:"
msgstr "Введите пароль:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr ""
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "Предупреждение"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "Вопрос"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr ""
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr ""
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr ""
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "Выбрать папку"
@@ -6494,35 +6450,35 @@ msgstr "Выбрать папку"
msgid "Select File"
msgstr "Выбрать файл"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 Б"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr "%1 кБ"
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MБ"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 ГБ"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 КиБ"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 МиБ"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 ГиБ"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "%1 день %2"
@@ -6530,25 +6486,65 @@ msgstr[1] "%1 дня %2"
msgstr[2] "%1 дней %2"
msgstr[3] "%1 день %2"
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "Теги"
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr "Взять значение «Исполнитель альбома» из значения «Исполнитель»"
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr ""
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr ""
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "Все треки"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr ""
"Применить обходное решение «несколько исполнителей» для <b>всех</b> треков?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>Эта настройка установит значения «Исполнитель альбома» и «Исполнитель» на "
+"«Несколько исполнителей» и значение «Название» на \"TrackArtist - TrackTitle"
+"\"</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr ""
"Откатить обходное решение «несколько исполнителей» для <b>всех</b> треков?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "Откатить обходное решение «несколько исполнителей»"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+"<i>Там, где значение «Исполнитель альбома» равно значению «Исполнитель», и "
+"название имеет формат \"TrackArtist - TrackTitle\", значение «Исполнитель» "
+"будет получаться из «Названия», а само значение «Название» будет равно "
+"названию композиции, т.е. <br/><br/>Скажем, если «Название» имеет формат "
+"\"Wibble - Wobble\", тогда «Исполнитель» будет иметь значение «Wibble», а "
+"«Название» — «Wobble»</i>"
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
@@ -6556,74 +6552,153 @@ msgstr ""
"Установить значение «Исполнитель альбома» из значения «Исполнитель» (при "
"пустом значении «Исполнитель альбома») для <b>всех</b> треков?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr ""
"Установить значение «Исполнитель альбома» из значения «Исполнитель» (при "
"пустом значении «Исполнитель альбома») ?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr "Исполнитель альбома как Исполнитель"
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
msgstr ""
-"Менять первую букву в значениях «Название», «Исполнитель», «Исполнитель "
-"альбома» и «Альбом» на заглавную?"
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "Настроить значение номера каждого трека по:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr ""
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "Все треки [изменено]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [изменено]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr "Переименовать также и файлы песен, для соответствия тегам?"
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr "Переименовать файлы"
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr "Прервать переименование файлов?"
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
-msgstr "Исходный файл не существует.<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
+msgstr ""
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "Конечный файл уже существует <br/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr ""
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "Сбой создания папки назначения. <br/>%1"
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr ""
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "Сбой переименования %1 в %2"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr ""
+
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(Поток)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr "<tr><td align=\"right\"><b>Автор музыки:</b></td><td>%1</td></tr>"
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr ""
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6641,7 +6716,7 @@ msgstr "Фильтр по жанру"
msgid "All Genres"
msgstr "Все жанры"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr "Назад"
@@ -6649,15 +6724,19 @@ msgstr "Назад"
msgid "Menu"
msgstr "Меню"
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr ""
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "Удалить из очереди"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr "Поиск..."
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr "Закрыть панель поиска"
@@ -6671,21 +6750,20 @@ msgstr "%1: вход <b>НЕ</b> выполнен"
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
-"<p>Нет доступа к файлам!<br/><br/>Проверьте настройки «папки с музыкой» "
-"программы Cantata и настройки «каталога с музыкой» сервера MPD.</p>"
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-"<p>Нет доступа к файлам!<br/><br/>Убедитесь, что устройство всё ещё "
-"подключено.</p>"
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr "Растянуть столбцы по размеру окна"
@@ -6821,6 +6899,669 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr ""
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "На целевом устройстве недостаточно места.\n"
+#~ "Выбранным песням необходимо %1, но доступно всего %2.\n"
+#~ "Чтобы иметь возможность скопировать эти песни, их необходимо "
+#~ "перекодировать в файлы меньшего размера."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "На целевом устройстве недостаточно места.\n"
+#~ "Выбранным песням необходимо %1, но доступно всего %2."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Целевое устройство не настроено.<br/>Продолжить с настройками по "
+#~ "умолчанию?</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr ""
+#~ "<p>Устройство-источник не настроено.<br/>Продолжить с настройками по "
+#~ "умолчанию?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr ""
+#~ "Первая буква в значениях «Название», «Исполнитель», «Исполнитель альбома» "
+#~ "и «Альбом» будет заглавной."
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>Какой тип обновления необходимо выполнить?<ul><li>Частичное — "
+#~ "сканируются только новые песни<i>(быстрое)</i></li><li>Полное — все песни "
+#~ "сканируются повторно<i>(медленное)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to delete the selected songs?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Точно удалить выбранные песни?\n"
+#~ "Эту операцию нельзя будет отменить."
+
+#~ msgid "Are you sure you wish to forget <b>%1</b>?"
+#~ msgstr "Точно исключить <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#~ msgstr "Точно извлечь аудио- CD <b>%1 - %2</b>?"
+
+#~ msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#~ msgstr "Точно отключить <b>%1</b>?"
+
+#~ msgid ""
+#~ "<p>The following variables will be replaced with their corresponding "
+#~ "meaning for each track name.</p>"
+#~ msgstr ""
+#~ "<p>Следующие переменные будут заменены соответствующими названиями для "
+#~ "каждого трека.</p>"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "Удалённое устройство с именем «%1» уже существует.\n"
+#~ "Выберите другое имя."
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected rules?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Точно удалить выбранные правила?\n"
+#~ "Эту операцию нельзя будет отменить."
+
+#~ msgid ""
+#~ "<p>Cantata will query your library using all of the rules listed. The "
+#~ "list of <i>Include</i> rules will be used to build a set of songs that "
+#~ "can be used. The list of <i>Exclude</i> rules will be used to build a set "
+#~ "of songs that cannot be used. If there are no <i>Include</i> rules, "
+#~ "Cantata will assume that all songs (bar those from <i>Exclude</i>) can be "
+#~ "used. <br/>e.g. to have Cantata look for 'Rock songs by Wibble OR songs "
+#~ "by Various Artists', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble Genre=Rock</li><li>Include AlbumArtist=Various "
+#~ "Artists</li></ul> To have Cantata look for 'Songs by Wibble but not from "
+#~ "album Abc', you would need the following: <ul><li>Include "
+#~ "AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After the set of "
+#~ "usable songs has been created, Cantata will randomly select songs to keep "
+#~ "the play queue filled with 10 entries.</p>"
+#~ msgstr ""
+#~ "<p>Cantata будет опрашивать вашу библиотеку, используя все перечисленные "
+#~ "правила.Список правил <i>Включить</i> будет применяться для создания "
+#~ "списка песен, которыеможно использовать. Список правил <i>Исключить</i> "
+#~ "будет применяться для создания списка песен, которые нельзя использовать. "
+#~ "Если правил <i>Включить</i> не существует, Cantata будет использовать все "
+#~ "песни (включая песни из правил <i>Исключить</i>).<br/>То есть, если вам "
+#~ "нужно найти песни в стиле «Rock» исполнителя Петров ИЛИ нескольких "
+#~ "исполнителей, то правило будет таким: <ul><li>Включить AlbumArtist=Петров "
+#~ "Genre=Rock</li><li>Включить AlbumArtist=Несколько исполнителей</li></ul> "
+#~ "Чтобы заставить Cantata искать песни исполнителя Иванов, не входящие в "
+#~ "альбом АБВ, вам понадобится следующее правило: <ul><li>Включить "
+#~ "AlbumArtist=Иванов</li><li>Исключить Album=АБВ</li></ul>После того, как "
+#~ "набор используемых песен будет создан, Cantata сделает случайную подборку "
+#~ "песен, чтобы в очереди на воспроизведение было заполнено 10 позиций.</p>"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "Набор правил с именем «%1» уже существует.\n"
+#~ "Перезаписать?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>Удалить всё из следующего?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "Сбой настройки обложки\n"
+#~ "Не удалось сохранить во временный файл."
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "Сбой настройки обложки\n"
+#~ "Не удалось создать копию"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "Сбой настройки обложки\n"
+#~ "Не удалось создать резервную копию оригинала"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "Сбой настройки обложки\n"
+#~ "Не удалось скопировать файл в «%1»"
+
+#~ msgid "Medium"
+#~ msgstr "Средний"
+
+#~ msgid "Extra Large"
+#~ msgstr "Очень большой"
+
+#~ msgid "Icon/List"
+#~ msgstr "Значок/список"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "Редактировать теги"
+
+#~ msgid ""
+#~ "Podcasts are currently being downloaded\n"
+#~ "\n"
+#~ "Quiting now will abort all downloads."
+#~ msgstr ""
+#~ "В настоящее время происходит загрузка подкастов\n"
+#~ "\n"
+#~ "Выход из программы отменит все загрузки."
+
+#~ msgid "Abort downloads and quit"
+#~ msgstr "Прервать загрузки и выйти"
+
+#~ msgid ""
+#~ "<b>%1</b> is used to store favorite streams, please choose another name."
+#~ msgstr ""
+#~ "<b>%1</b> используется для хранения любимых потоков, выберите другое имя."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr "Плейлист с именем <b>%1</b> уже существует<br/>Добавить к нему?"
+
+#~ msgid "Can only edit tags of songs within MPD's music collection."
+#~ msgstr "Можно редактировать теги песен только в музыкальной коллекции MPD."
+
+#~ msgid ""
+#~ "<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+#~ "perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. "
+#~ "It works on a track/album basis, and is now supported in a growing number "
+#~ "of players.</p><p>The following ReplayGain settings may be used:"
+#~ "<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
+#~ "Volume will be adjusted using the track's ReplayGain tags.</"
+#~ "li><li><i>Album</i> - Volume will be adjusted using the albums's "
+#~ "ReplayGain tags.</li><li><i>Auto</i> - Volume will be adjusted using the "
+#~ "track's ReplayGain tags if random play is activated, otherwise the "
+#~ "album's tags will be used.</li></ul></p>"
+#~ msgstr ""
+#~ "<p>Replay Gain — это стандарт, предложенный в 2001 году для выравнивания "
+#~ "уровня громкости компьютерных аудио-форматов, таких, как MP3 и Ogg "
+#~ "Vorbis. Он функционирует на базе принципа трек/альбом, и на сегодня "
+#~ "поддерживается большим числом плееров.</p><p>Для ReplayGain можно "
+#~ "использовать следующие настройки: <ul><li><i>Нет</i> — ReplayGain не "
+#~ "используется</li><li><i>Трек</i> — громкость будет настроена с "
+#~ "использованием тегов ReplayGain данного трека</li><li><i>Альбом</i> — "
+#~ "громкость будет настроена с использованием тегов ReplayGain данного "
+#~ "альбома</li><li><i>Авто</i> — в случае случайного режима воспроизведения "
+#~ "громкость будет настроена с использованием тегов ReplayGain данного "
+#~ "трека, иначе — используются теги альбома.</li></ul></p>"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "Точно удалить выбранный плейлист?\n"
+#~ "Эту операцию нельзя будет отменить."
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Плейлист с именем <b>%1</b> уже существует.<br/>Перезаписать?"
+
+#~ msgid ""
+#~ "Which type of collection do you wish to connect to?<br/><ul><li>Standard "
+#~ "- music collection may be shared, is on another machine, or is already "
+#~ "setup</li><li>Basic - music collection is not shared with others, and "
+#~ "Cantata will configure and control the MPD instance</li></ul>"
+#~ msgstr ""
+#~ "К какому типу коллекции вы хотите подключиться?<br/><ul><li>Стандартный — "
+#~ "коллекцию можно сделать общим ресурсом, она находится на другой машине "
+#~ "или уже настроена</li><li>Базовый — коллекция не является общим ресурсом, "
+#~ "и Cantata настроит и будет управлятьэкземпляром MPD.</li></ul>"
+
+#~ msgid "Delete <b>%1</b>?"
+#~ msgstr "Удалить <b>%1</b>?"
+
+#~ msgid "Multi-Media Keys"
+#~ msgstr "Мультимедиа-клавиши"
+
+#~ msgid "Do not use media keys to control Cantata"
+#~ msgstr "Не использовать мультимедиа-клавиши для управления Cantata"
+
+#~ msgid "Use media keys to control Cantata"
+#~ msgstr "Использовать мультимедиа-клавиши для управления Cantata"
+
+#~ msgid ""
+#~ "Use media keys, as configured in desktop settings, to control Cantata"
+#~ msgstr ""
+#~ "Использовать мультимедиа-клавиши для управления Cantata, согласно "
+#~ "настройкам рабочего стола"
+
+#~ msgid ""
+#~ "Use media keys, as configured in GNOME/Unity settings, to control Cantata"
+#~ msgstr ""
+#~ "Использовать мультимедиа-клавиши для управления Cantata, согласно "
+#~ "настройкам GNOME/Unity"
+
+#~ msgid "Add Albums In Random Order"
+#~ msgstr "Добавить альбомы в случайном порядке"
+
+#~ msgid "Edit Tags"
+#~ msgstr "Редактировать теги"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(Приоритет: %1)</b>"
+
+#~ msgid "Unsubscribe from <b>%1</b>?"
+#~ msgstr "Отменить подписку для <b>%1</b>?"
+
+#~ msgid "Refresh episode listing from <b>%1</b>?"
+#~ msgstr "Обновить список эпизодов для <b>%1</b>?"
+
+#~ msgid "All selected podcasts have already been downloaded!"
+#~ msgstr "Все выбранные подкасты были уже загружены."
+
+#~ msgid "Do you wish to download the following podcast episode?"
+#~ msgstr "Загрузить следующий эпизод подкаста?"
+
+#~ msgid "Do you wish to download the following podcast episodes?"
+#~ msgstr "Загрузить следующие эпизоды подкаста?"
+
+#~ msgid "All selected downloaded podcast episodes have already been deleted!"
+#~ msgstr "Все выбранные загруженные эпизоды подкаста уже были удалены."
+
+#~ msgid ""
+#~ "Do you wish to delete the downloaded file of the following podcast "
+#~ "episode?"
+#~ msgstr "Удалить загруженный файл следующего эпизода подкаста?"
+
+#~ msgid ""
+#~ "Do you wish to the delete downloaded files of the following podcast "
+#~ "episodes?"
+#~ msgstr "Удалить загруженные файлы следующих эпизодов подкаста?"
+
+#~ msgid "Automatically download new episodes"
+#~ msgstr "Автоматически загружать новые эпизоды"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with "
+#~ "images, links, etc), instead it shows a trimmed down version. This "
+#~ "trimming is not always 100% accurate, hence by default Cantata will only "
+#~ "show the basic introduction to each article. If you elect to show the "
+#~ "full article, then there may be parsing errors. You will also need to "
+#~ "remove any currently cached articles (using the 'Cache' page).</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> Cantata не показывает страницы wikipedia полностью (с "
+#~ "изображениями, ссылками и т.п), показывается только усечённая версия. Эта "
+#~ "версия не всегда получается аккуратно на все 100%, поэтому, по умолчанию, "
+#~ "Cantata показывает только базовое введение для каждой статьи. Если "
+#~ "выбрать показ страницы полностью, то возможны ошибки обработки. Также "
+#~ "будет необходимо удалить любую текущую кешированную статью (на страничке "
+#~ "«Кеш»).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only valid, and editable, when the "
+#~ "device is connected.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> данные настройки действуют и могут редактироваться "
+#~ "только при подключённом устройстве.</i>"
+
+#~ msgid "Ignore 'The' in artist names"
+#~ msgstr "Игнорировать 'The' в именах исполнителей"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings are only editable when the device is not "
+#~ "connected.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> Эти настройки можно изменять только при отключённом "
+#~ "устройстве.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter a password here, it will be stored "
+#~ "<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for "
+#~ "the password before accessing the share, set the password to '-'</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> введённый здесь пароль будет "
+#~ "храниться<b>незашифрованным</b> в файле настроек Cantata. Для того, чтобы "
+#~ "Cantata запрашивала пароль перед доступом к общему ресурсу, укажите "
+#~ "пароль '-'</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
+#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to "
+#~ "enter the password.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> исходя из принципа работы sshfs, для ввода пароля вам "
+#~ "потребуется подходящее приложение на базе ssh-askpass (ksshaskpass, ssh-"
+#~ "askpass-gnome, и т.п.).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
+#~ "Samba), or to access locally mounted folders. For normal media players, "
+#~ "attached via USB, Cantata will automatically display the device when it "
+#~ "is attached.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> с помощью этого диалога можно добавить только "
+#~ "удалённые устройства (например, через Samba) или получить доступ к "
+#~ "локально смонтированным папкам. Для обычных медиа-плееров, подключённых "
+#~ "по USB, Cantata автоматически покажет устройство сразу после его "
+#~ "подключения.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ</b> вводить значения только для тегов, по которым должен "
+#~ "производиться поиск.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> For genre, end string with an asterisk to match various "
+#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ</b> Чтобы указать несколько жанров заканчивайте строку "
+#~ "астериском (знак «*»). Например, 'rock*' будет соответствовать и 'Hard "
+#~ "Rock' и 'Rock and Roll'. </i>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music.</p><p>For more information on MPD itself, please "
+#~ "refer to the MPD website <a href=\"http://www.musicpd.org\"><span style="
+#~ "\" text-decoration: underline; color:#0000ff;\">http://www.musicpd.org</"
+#~ "span></a></p><p>This 'wizard' will guide you through the basic settings "
+#~ "required for Cantata to function correctly.</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata — это многофункциональный и дружественный к "
+#~ "пользователю клиент Music Player Daemon (MPD). MPD — это фоновое "
+#~ "приложение, которое можно использовать для проигрывания музыки. </p><p>За "
+#~ "подробной информацией по MPD обращайтесь на его официальный сайт: <a href="
+#~ "\"http://www.musicpd.org\"><span style=\" text-decoration: underline; "
+#~ "color:#0000ff;\">http://www.musicpd.org</span></a>.</p><p>Этот помощник "
+#~ "проведёт вас по базовым настройкам программы Cantata, необходимым для её "
+#~ "правильной работы.</p></body></html>"
+
+#~ msgid ""
+#~ "<html><head/><body><p>Cantata is a feature-rich and user friendly client "
+#~ "for Music Player Daemon (MPD). MPD is a background application that can "
+#~ "be used to play music. MPD may be started either system-wide, or on a per-"
+#~ "user basis. Please select how you would like to have Cantata initially "
+#~ "connect to (or startup) MPD:</p></body></html>"
+#~ msgstr ""
+#~ "<html><head/><body><p>Cantata — это многофункциональный и дружественный к "
+#~ "пользователю клиент Music Player Daemon (MPD). MPD — это фоновое "
+#~ "приложение, которое можно использовать для проигрывания музыки. MPD можно "
+#~ "запускать как общесистемно, так и отдельно для каждого пользователя. "
+#~ "Выберите, как Cantata должна подключаться к MPD при запуске:</p></body></"
+#~ "html>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> при использовании локального сокета необходимо "
+#~ "указать полный абсолютный путь к нему. (Номер порта не требуется).</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, "
+#~ "within the music folder, and you do not have write access to this folder, "
+#~ "then Cantata will revert to saving the files in your personal cache "
+#~ "folder. However, for streams, if you do not have write access, then you "
+#~ "will only be able to view (and play) the streams stored in the music "
+#~ "folder, and not add (or edit) any streams. If you elect not to store "
+#~ "streams within the music folder, then these will be saved in your local "
+#~ "config folder - and will only be accessible to yourself.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> если Cantata настроена на сохранение обложек или "
+#~ "текстов песен в папке с музыкой, а у вас нет доступа на запись в эту "
+#~ "папку, то в этом случае Cantata будет сохранять файлы в вашей "
+#~ "персональной папке для кеша. Тем не менее, если речь идёт о потоках, то "
+#~ "при отсутствии доступа на запись, вы сможете только просматривать и "
+#~ "проигрывать потоки, сохранённые в папке с музыкой, но не добавлять их и "
+#~ "не редактировать. Если вы не указывали сохранять потоки в папку с "
+#~ "музыкой, тогда они будут сохраняться вв вашей локальной папке с "
+#~ "настройками, и будут доступны только вам.</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "Обложки:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When looking for artist images, Cantata will look for "
+#~ "either artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
+#~ "within the folder of the current track, or within its parent folder. If "
+#~ "no image is found, Cantata will attempt to download one.</i>"
+#~ msgstr ""
+#~ "<i><b>ПРИМЕЧАНИЕ:..</b> При поиске фотографий исполнителей, Cantata будет "
+#~ "искать или artist.jpg, artist.png, 'Artist'.jpg, или 'Artist'.png, \n"
+#~ " в папке текущего трека или в пределах своей родительской папки. Если "
+#~ "изображение не найдено, Cantata попытается загрузить его.</i>"
+
+#~ msgid "Sort albums:"
+#~ msgstr "Сортировать альбомы:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "Тип просмотра папки:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "Тип просмотра потоков:"
+
+#~ msgid "Online view style:"
+#~ msgstr "Тип он-лайн просмотра:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "Тип просмотра устройств:"
+
+#~ msgid "Search view style:"
+#~ msgstr "Поиск стиля просмотра:"
+
+#~ msgid "Cache scaled covers"
+#~ msgstr "Кэш масштабированных обложек"
+
+#~ msgid "Show stop button in toolbar"
+#~ msgstr "Показать кнопку остановки в панели инструментов"
+
+#~ msgid "Show cover of current track in toolbar"
+#~ msgstr "Показывать обложку текущего трека в панели инструментов"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> настройка «Принудительно включить выделение элементов "
+#~ "по одному щелчку» потребует перезапуска программы Cantata.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the language setting will require a re-start of "
+#~ "Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Примечание:</b> При изменении языка потребуется перезапустить "
+#~ "Cantata.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
+#~ "start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>Примечание:</b> Изменение параметра «дружественный интерфейс» "
+#~ "требует перезапуска Cantata.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you press and hold the stop button, then a menu will "
+#~ "be shown allowing you to choose whether to stop playback now, or after "
+#~ "the current track.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> если нажать и удерживать кнопку «стоп», то будет "
+#~ "показано меню, где можно выбрать, остановить ли воспроизведение сейчас "
+#~ "или после окончания текущей композиции.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> Настройка «папка с музыкой» используется для поиска "
+#~ "обложек (введите значение, указанное выше или <code>cover.jpg / cover."
+#~ "png</code> при пустом значении). Если у вас также есть рекурсивные права "
+#~ "на запись в эту папку, то Cantata будет сохранять все загружаемые обложки "
+#~ "в соответствующую папку альбома.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD "
+#~ "configured to output to a HTTP stream, and you wish Cantata to be able to "
+#~ "play that stream.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> параметр «адрес потока HTTP» можно использовать, "
+#~ "только если вывод MPD настроен на HTTP-поток, и вам нужно, чтобы Cantata "
+#~ "умела его проигрывать.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will "
+#~ "need to manually update the music database. This can be performed by "
+#~ "pressing the 'Refresh Database' button in the 'Artists' or 'Albums' views."
+#~ "</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> если настройка «папка с музыкой» была изменена, то "
+#~ "вам необходимо вручную обновить базу данных. Это можно сделать, нажав "
+#~ "кнопку «Обновить базу данных» в режиме «Исполнитель» или «Альбом».</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then "
+#~ "Cantata will use a default of <code>cover</code> </i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> если значение для имени файла обложки не указано, "
+#~ "то Cantata будет использовать имя по умолчанию: <code>cover</code> </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
+#~ "folders. Cantata contains a minimal HTTP server that can be used to serve "
+#~ "other files to MPD. This, however, will only work whilst Cantata is "
+#~ "running.<br/><br/>\n"
+#~ "<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
+#~ "MPD <b>must</b> also be on this computer.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> как правило, MPD проигрывает только песни, "
+#~ "расположенные в папках MPD. Для возможности проигрывания других файлов "
+#~ "Cantata может использовать свой мини-HTTP-сервер, но сервер работает "
+#~ "только когда запущена Cantata.<br/><br/>\n"
+#~ "<b>ВНИМАНИЕ:</b> если в качестве сетевого интерфейса выбрана «локальная "
+#~ "петля», тогда MPD также <b>должен</b> присутствовать на данной машине.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio."
+#~ "com, RockRadio.com, and Sky.fm</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> Эти настройки применимы для Digitally Imported, "
+#~ "JazzRadio.com, RockRadio.com и Sky.fm</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> If you enter account details, then a 'DI' status item "
+#~ "will appear under the list of streams. This will indicate if you are "
+#~ "logged in or not</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> При выборе настроек учётной записи, под списком "
+#~ "потоков будет показан значок-индикатор авторизации ('DI'), изменяющийся в "
+#~ "зависимости от того, был ли выполнен вход или нет.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot "
+#~ "be removed.</i>"
+#~ msgstr ""
+#~ "<i><b>ВНИМАНИЕ:</b> встроенные категории показываются курсивом, и их "
+#~ "удалить нельзя.</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
+#~ "'Rock;Hard Rock')</i>"
+#~ msgstr ""
+#~ "<i><b>К сведению</b> несколько жанров должны быть разделены через точку с "
+#~ "запятой (например 'Rock;Hard Rock')</i>"
+
+#~ msgid ""
+#~ "Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing "
+#~ "ReplayGain tags.</i>"
+#~ msgstr ""
+#~ "Сканировать <b>все</b> треки?<br><br><i>ВНИМАНИЕ: у всех треков уже есть "
+#~ "теги ReplayGain.</i>"
+
+#~ msgid "ListenLive"
+#~ msgstr "ListenLive"
+
+#~ msgid "Install the following?"
+#~ msgstr "Установить следующие?"
+
+#~ msgid "Update the following?"
+#~ msgstr "Обновить следующие?"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "Сбой создания <b>%1</b>"
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "Поток уже существует:<br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "Поток с именем <b>%1</b> уже существует."
+
+#~ msgid "Reload <b>%1</b> streams?"
+#~ msgstr "Обновить <b>%1</b> потоков?"
+
+#~ msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#~ msgstr "Точно удалить закладку для <b>%1</b>?"
+
+#~ msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#~ msgstr "Точно удалить все <b>%1</b> закладок?"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "Точно удалить <b>%1</b>?"
+
+#~ msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "Категория <b>%1</b> уже существует.<br/>Перезаписать?"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "Менять первую букву в значениях «Название», «Исполнитель», «Исполнитель "
+#~ "альбома» и «Альбом» на заглавную?"
+
+#~ msgid "Source file does not exist!<br/>%1"
+#~ msgstr "Исходный файл не существует.<br/>%1"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "Конечный файл уже существует <br/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "Сбой создания папки назначения. <br/>%1"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "Сбой переименования %1 в %2"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music "
+#~ "folder\" setting, and MPD's \"music_directory\" setting.</p>"
+#~ msgstr ""
+#~ "<p>Нет доступа к файлам!<br/><br/>Проверьте настройки «папки с музыкой» "
+#~ "программы Cantata и настройки «каталога с музыкой» сервера MPD.</p>"
+
+#~ msgid ""
+#~ "<p>Cannot access song files!<br/><br/>Please check that the device is "
+#~ "still attached.</p>"
+#~ msgstr ""
+#~ "<p>Нет доступа к файлам!<br/><br/>Убедитесь, что устройство всё ещё "
+#~ "подключено.</p>"
+
#~ msgid "TextLabel"
#~ msgstr "TextLabel"
@@ -7247,9 +7988,6 @@ msgstr ""
#~ msgid " seconds"
#~ msgstr " секунд"
-#~ msgid "Devices:"
-#~ msgstr "Устройства:"
-
#~ msgid "Current URL:"
#~ msgstr "Текущий URL:"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 76afad4..ea8ba9e 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Cantata 0.9.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-03 19:59+0100\n"
+"POT-Creation-Date: 2014-10-30 17:51+0000\n"
"PO-Revision-Date: 2012-12-20 15:00+0800\n"
"Last-Translator: AI Corleone <xuejingedison at sina.com>\n"
"Language-Team: AI Corleone <xuejingedison at sina.com>\n"
@@ -19,10 +19,10 @@ msgstr ""
msgid "Refresh Album Information"
msgstr ""
-#: context/albumview.cpp:71 context/songview.cpp:501 context/songview.cpp:562
-#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:48
+#: context/albumview.cpp:71 context/songview.cpp:503 context/songview.cpp:580
+#: dynamic/dynamicrulesdialog.cpp:76 gui/playbacksettings.cpp:49
#: models/playqueuemodel.cpp:169 models/playqueuemodel.cpp:262
-#: replaygain/rgdialog.cpp:108
+#: mpd/song.cpp:522 replaygain/rgdialog.cpp:108
msgid "Album"
msgstr "专辑"
@@ -33,32 +33,33 @@ msgstr "专辑"
msgid "Tracks"
msgstr "音轨"
-#: context/artistview.cpp:85
+#: context/artistview.cpp:100
msgid "Refresh Artist Information"
msgstr ""
#. i18n: file: devices/albumdetails.ui:163
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/artistview.cpp:93 context/songview.cpp:495 context/songview.cpp:559
-#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:66
-#: models/playqueuemodel.cpp:168 models/playqueuemodel.cpp:260 po/rc.cpp:122
+#: context/artistview.cpp:108 context/songview.cpp:496
+#: context/songview.cpp:576 devices/cddbselectiondialog.cpp:47
+#: dynamic/dynamicrulesdialog.cpp:66 models/playqueuemodel.cpp:168
+#: models/playqueuemodel.cpp:260 mpd/song.cpp:516 po/rc.cpp:122
#: replaygain/rgdialog.cpp:107 rc.cpp:122
msgid "Artist"
msgstr "艺术家"
-#. i18n: file: gui/interfacesettings.ui:281
-#. i18n: ectx: attribute (title), widget (QWidget, tab_2)
-#: context/artistview.cpp:326 gui/interfacesettings.cpp:150
-#: gui/mainwindow.cpp:372 models/playqueuemodel.cpp:252 po/rc.cpp:591
-#: rc.cpp:591
+#. i18n: file: gui/interfacesettings.ui:183
+#. i18n: ectx: property (title), widget (QGroupBox, albumsViewGroupBox)
+#: context/artistview.cpp:341 gui/interfacesettings.cpp:146
+#: gui/mainwindow.cpp:391 models/playqueuemodel.cpp:252 po/rc.cpp:593
+#: rc.cpp:593
msgid "Albums"
msgstr "专辑"
-#: context/artistview.cpp:352
+#: context/artistview.cpp:367
msgid "Web Links"
msgstr "Web 链接"
-#: context/artistview.cpp:438
+#: context/artistview.cpp:454
msgid "Similar Artists"
msgstr "相似艺术家"
@@ -66,28 +67,28 @@ msgstr "相似艺术家"
msgid "Lyrics Providers"
msgstr ""
-#: context/contextsettings.cpp:37 gui/cachesettings.cpp:280
+#: context/contextsettings.cpp:37 gui/cachesettings.cpp:288
msgid "Wikipedia Languages"
msgstr ""
-#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1348
-#: models/streamsmodel.cpp:1355
+#: context/contextsettings.cpp:38 models/streamsmodel.cpp:1359
+#: models/streamsmodel.cpp:1366
msgid "Other"
msgstr ""
-#: context/contextwidget.cpp:209
+#: context/contextwidget.cpp:211
msgid "Reset Spacing"
msgstr ""
-#: context/contextwidget.cpp:367
+#: context/contextwidget.cpp:369
msgid "&Artist"
msgstr ""
-#: context/contextwidget.cpp:368
+#: context/contextwidget.cpp:370
msgid "Al&bum"
msgstr ""
-#: context/contextwidget.cpp:369
+#: context/contextwidget.cpp:371
msgid "&Track"
msgstr ""
@@ -110,16 +111,16 @@ msgstr ""
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
#. i18n: file: devices/albumdetails.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: dynamic/dynamicrule.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:38
+#. i18n: file: tags/tageditor.ui:54
#. i18n: ectx: property (text), widget (StateLabel, titleLabel)
-#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:237 po/rc.cpp:101
-#: po/rc.cpp:386 po/rc.cpp:977 rc.cpp:101 rc.cpp:386 rc.cpp:977
+#: context/lyricsdialog.cpp:61 gui/searchpage.cpp:235 po/rc.cpp:101
+#: po/rc.cpp:392 po/rc.cpp:993 rc.cpp:101 rc.cpp:392 rc.cpp:993
msgid "Title:"
msgstr "标题:"
@@ -127,17 +128,17 @@ msgstr "标题:"
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
#. i18n: file: devices/albumdetails.ui:37
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#. i18n: file: dynamic/dynamicrule.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: tags/tageditor.ui:51
+#. i18n: file: tags/tageditor.ui:67
#. i18n: ectx: property (text), widget (StateLabel, artistLabel)
-#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:817
-#: gui/searchpage.cpp:228 po/rc.cpp:95 po/rc.cpp:371 po/rc.cpp:980 rc.cpp:95
-#: rc.cpp:371 rc.cpp:980
+#: context/lyricsdialog.cpp:63 devices/actiondialog.cpp:815
+#: gui/searchpage.cpp:226 po/rc.cpp:95 po/rc.cpp:377 po/rc.cpp:996 rc.cpp:95
+#: rc.cpp:377 rc.cpp:996
msgid "Artist:"
msgstr "艺术家:"
@@ -153,38 +154,39 @@ msgstr "选择歌词搜索网站。"
msgid "Song Information"
msgstr ""
-#: context/othersettings.cpp:45 gui/coverdialog.cpp:863
-#: gui/interfacesettings.cpp:220
+#: context/othersettings.cpp:45 gui/coverdialog.cpp:864
+#: gui/interfacesettings.cpp:205
msgid "Images (*.png *.jpg)"
msgstr "图片 Images (*.png *.jpg)"
-#: context/othersettings.cpp:47 gui/interfacesettings.cpp:222
+#: context/othersettings.cpp:47 gui/interfacesettings.cpp:207
msgctxt "pixels"
msgid "10px"
msgstr ""
-#: context/othersettings.cpp:104 gui/interfacesettings.cpp:603
+#: context/othersettings.cpp:104 gui/interfacesettings.cpp:610
msgctxt "value%"
msgid "%1%"
msgstr ""
-#: context/othersettings.cpp:109 gui/interfacesettings.cpp:608
+#: context/othersettings.cpp:109 gui/interfacesettings.cpp:615
#, c-format
msgctxt "pixels"
msgid "%1px"
msgstr ""
-#: context/songview.cpp:124 gui/cachesettings.cpp:267
+#: context/songview.cpp:124 gui/cachesettings.cpp:275
msgid "Lyrics"
msgstr "歌词"
-#: context/songview.cpp:124 support/messagebox.h:65
+#: context/songview.cpp:124 support/messagebox.cpp:80
+#: support/messagebox.cpp:179 support/messagebox.h:70
msgid "Information"
msgstr "信息"
-#: context/songview.cpp:124 tags/tageditor.cpp:167
-msgid "Tags"
-msgstr "标签"
+#: context/songview.cpp:124
+msgid "Metadata"
+msgstr ""
#: context/songview.cpp:136
msgid "Scroll Lyrics"
@@ -206,14 +208,14 @@ msgstr "删除歌词文件"
msgid "Refresh Track Information"
msgstr ""
-#: context/songview.cpp:151 context/view.cpp:205 gui/mainwindow.cpp:296
-#: widgets/messageoverlay.cpp:45
+#: context/songview.cpp:151 context/view.cpp:136 gui/mainwindow.cpp:321
+#: widgets/messageoverlay.cpp:50
msgid "Cancel"
msgstr "取消"
#. i18n: file: devices/albumdetails.ui:158
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
-#: context/songview.cpp:166 gui/playbacksettings.cpp:47
+#: context/songview.cpp:166 gui/playbacksettings.cpp:48
#: models/playqueuemodel.cpp:170 po/rc.cpp:119 rc.cpp:119
msgid "Track"
msgstr "音轨"
@@ -226,7 +228,7 @@ msgid ""
msgstr ""
#: context/songview.cpp:185 context/wikipediasettings.cpp:94
-#: models/streamsmodel.cpp:552 online/podcastsearchdialog.cpp:404
+#: models/streamsmodel.cpp:554 online/podcastsearchdialog.cpp:410
msgid "Reload"
msgstr ""
@@ -258,39 +260,39 @@ msgstr "确定删除歌词?"
msgid "Delete File"
msgstr ""
-#: context/songview.cpp:494 context/songview.cpp:558
+#: context/songview.cpp:497 context/songview.cpp:577 mpd/song.cpp:518
msgid "Album artist"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:102
#. i18n: ectx: property (text), widget (QPushButton, composer)
-#: context/songview.cpp:496 context/songview.cpp:560
+#: context/songview.cpp:498 context/songview.cpp:578
#: dynamic/dynamicrulesdialog.cpp:72 models/playqueuemodel.cpp:176
-#: po/rc.cpp:224 rc.cpp:224
+#: mpd/song.cpp:520 po/rc.cpp:224 rc.cpp:224
msgid "Composer"
msgstr ""
-#: context/songview.cpp:498
+#: context/songview.cpp:500
msgid "Lyricist"
msgstr ""
-#: context/songview.cpp:499
+#: context/songview.cpp:501
msgid "Conductor"
msgstr ""
-#: context/songview.cpp:500
+#: context/songview.cpp:502
msgid "Remixer"
msgstr ""
-#: context/songview.cpp:502
+#: context/songview.cpp:504
msgid "Subtitle"
msgstr ""
-#: context/songview.cpp:503 context/songview.cpp:564
+#: context/songview.cpp:505 context/songview.cpp:581 mpd/song.cpp:524
msgid "Track number"
msgstr ""
-#: context/songview.cpp:504 context/songview.cpp:563
+#: context/songview.cpp:506 context/songview.cpp:582 mpd/song.cpp:527
msgid "Disc number"
msgstr ""
@@ -302,102 +304,119 @@ msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, genre)
#. i18n: file: dynamic/dynamicrule.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: context/songview.cpp:505 context/songview.cpp:565
+#: context/songview.cpp:507 context/songview.cpp:583
#: dynamic/dynamicrulesdialog.cpp:80 models/playqueuemodel.cpp:174
-#: models/playqueuemodel.cpp:263 po/rc.cpp:266 po/rc.cpp:389 rc.cpp:266
-#: rc.cpp:389
+#: models/playqueuemodel.cpp:263 mpd/song.cpp:529 po/rc.cpp:266 po/rc.cpp:395
+#: rc.cpp:266 rc.cpp:395
msgid "Genre"
msgstr "流派"
-#: context/songview.cpp:506 dynamic/dynamicrulesdialog.cpp:82
+#: context/songview.cpp:508 dynamic/dynamicrulesdialog.cpp:82
msgid "Date"
msgstr "日期"
-#: context/songview.cpp:507
+#: context/songview.cpp:509
msgid "Original date"
msgstr ""
-#: context/songview.cpp:508 context/songview.cpp:567
+#: context/songview.cpp:510 context/songview.cpp:585
#: dynamic/dynamicrulesdialog.cpp:74
msgid "Comment"
msgstr ""
-#: context/songview.cpp:509
+#: context/songview.cpp:511
msgid "Copyright"
msgstr ""
-#: context/songview.cpp:510
+#: context/songview.cpp:512
msgid "Label"
msgstr ""
-#: context/songview.cpp:511
+#: context/songview.cpp:513
msgid "Catalogue number"
msgstr ""
-#: context/songview.cpp:512
+#: context/songview.cpp:514
msgid "Title sort"
msgstr ""
-#: context/songview.cpp:513
+#: context/songview.cpp:515
msgid "Artist sort"
msgstr ""
-#: context/songview.cpp:514
+#: context/songview.cpp:516
msgid "Album artist sort"
msgstr ""
-#: context/songview.cpp:515
+#: context/songview.cpp:517
msgid "Album sort"
msgstr ""
-#: context/songview.cpp:516
+#: context/songview.cpp:518
msgid "Encoded by"
msgstr ""
-#: context/songview.cpp:517 devices/devicepropertieswidget.cpp:226
+#: context/songview.cpp:519 devices/devicepropertieswidget.cpp:226
msgid "Encoder"
msgstr "编码"
-#: context/songview.cpp:518
+#: context/songview.cpp:520
msgid "Mood"
msgstr ""
-#: context/songview.cpp:519
+#: context/songview.cpp:521
msgid "Media"
msgstr ""
-#: context/songview.cpp:520 devices/encoders.cpp:223 devices/encoders.cpp:320
+#: context/songview.cpp:522 context/songview.cpp:561 devices/encoders.cpp:223
+#: devices/encoders.cpp:320
msgid "Bitrate"
msgstr "比特率"
-#: context/songview.cpp:521
+#: context/songview.cpp:523 context/songview.cpp:564
msgid "Sample rate"
msgstr ""
-#: context/songview.cpp:522
+#: context/songview.cpp:524 context/songview.cpp:567
msgid "Channels"
msgstr ""
-#: context/songview.cpp:524
+#: context/songview.cpp:526
msgid "Tagging time"
msgstr ""
-#: context/songview.cpp:546
+#: context/songview.cpp:548
msgid "Performer (%1)"
msgstr ""
-#: context/songview.cpp:561 models/playqueuemodel.cpp:177
+#: context/songview.cpp:561
+msgid "%1 kb/s"
+msgstr ""
+
+#: context/songview.cpp:564
+msgid "%1 Hz"
+msgstr ""
+
+#: context/songview.cpp:571
+msgid "Bits"
+msgstr ""
+
+#: context/songview.cpp:579 models/playqueuemodel.cpp:177 mpd/song.cpp:521
msgid "Performer"
msgstr ""
#. i18n: file: devices/filenameschemedialog.ui:174
#. i18n: ectx: property (text), widget (QPushButton, year)
-#: context/songview.cpp:566 models/playqueuemodel.cpp:173
-#: models/playqueuemodel.cpp:264 po/rc.cpp:260 rc.cpp:260
+#: context/songview.cpp:584 models/playqueuemodel.cpp:173
+#: models/playqueuemodel.cpp:264 mpd/song.cpp:531 po/rc.cpp:260 rc.cpp:260
msgid "Year"
msgstr "年份"
-#: context/songview.cpp:817
+#: context/songview.cpp:621 context/songview.cpp:624
+msgid "Filename"
+msgstr ""
+
+#: context/songview.cpp:845
msgid "Fetching lyrics via %1"
msgstr ""
@@ -445,16 +464,16 @@ msgstr ""
msgid "Songs To Be Copied"
msgstr ""
-#: devices/actiondialog.cpp:153
+#: devices/actiondialog.cpp:151
msgid "<b>INVALID</b>"
msgstr "<b>无效</b>"
-#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170
+#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168
msgid "<i>(When different)</i>"
msgstr "<i>(当不同的时候)</i>"
-#: devices/actiondialog.cpp:199 tags/tageditor.cpp:808
-#: tags/trackorganiser.cpp:481
+#: devices/actiondialog.cpp:197 tags/tageditor.cpp:991
+#: tags/trackorganiser.cpp:483
msgid ""
"Cantata has detected that you are connected to a Mopidy server.\n"
"\n"
@@ -463,324 +482,323 @@ msgid ""
"refresh Mopidy's database, and restart Cantata for any changes to be active."
msgstr ""
-#: devices/actiondialog.cpp:225 devices/synccollectionwidget.cpp:274
+#: devices/actiondialog.cpp:223 devices/synccollectionwidget.cpp:273
msgid "Artists:%1, Albums:%2, Songs:%3"
msgstr ""
-#: devices/actiondialog.cpp:287 devices/mtpdevice.cpp:1685
+#: devices/actiondialog.cpp:285 devices/mtpdevice.cpp:1693
#: devices/remotefsdevice.cpp:536 devices/umsdevice.cpp:123
msgid "%1 free"
msgstr "剩余 %1"
-#: devices/actiondialog.cpp:300 devices/actiondialog.cpp:304
+#: devices/actiondialog.cpp:298 devices/actiondialog.cpp:302
msgid "Local Music Library"
msgstr "本地音乐库"
-#: devices/actiondialog.cpp:302 devices/albumdetailsdialog.cpp:104
-#: gui/preferencesdialog.cpp:118 widgets/groupedview.cpp:292
+#: devices/actiondialog.cpp:300 devices/albumdetailsdialog.cpp:104
+#: gui/preferencesdialog.cpp:117 widgets/groupedview.cpp:298
msgid "Audio CD"
msgstr "音乐 CD"
-#: devices/actiondialog.cpp:325
+#: devices/actiondialog.cpp:323
msgid ""
"There is insufficient space left on the destination device.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left.\n"
"The songs will need to be transcoded to a smaller filesize in order to be "
"successfully copied."
msgstr ""
-"设备剩余空间不足.\n"
-"歌曲需要 %1 但是设备中仅有 %2.\n"
-"歌曲需要转码成较小的文件大小才能复制."
-#: devices/actiondialog.cpp:332
+#: devices/actiondialog.cpp:330
msgid ""
"There is insufficient space left on the destination.\n"
+"\n"
"The selected songs consume %1, but there is only %2 left."
msgstr ""
-"设备剩余空间不足.\n"
-"歌曲需要 %1 但是设备中仅有 %2."
-#: devices/actiondialog.cpp:381
+#: devices/actiondialog.cpp:379
msgid "Copy Songs"
msgstr "复制歌曲"
-#: devices/actiondialog.cpp:381 devices/devicespage.cpp:499
-#: gui/albumspage.cpp:227 gui/folderpage.cpp:257 gui/librarypage.cpp:266
-#: gui/stdactions.cpp:77
+#: devices/actiondialog.cpp:379 devices/devicespage.cpp:495
+#: gui/albumspage.cpp:160 gui/folderpage.cpp:254 gui/librarypage.cpp:181
+#: gui/stdactions.cpp:72
msgid "Delete Songs"
msgstr "删除歌曲"
-#: devices/actiondialog.cpp:418
+#: devices/actiondialog.cpp:416
msgid ""
-"<p>You have not configured the destination device.<br/>Continue with the "
-"default settings?</p>"
-msgstr "<p>没有设置目标设备。<br/>使用默认设置然后继续?</p>"
+"You have not configured the destination device.\n"
+"\n"
+"Continue with the default settings?"
+msgstr ""
-#: devices/actiondialog.cpp:419 devices/actiondialog.cpp:423
+#: devices/actiondialog.cpp:417 devices/actiondialog.cpp:421
msgid "Not Configured"
msgstr ""
-#: devices/actiondialog.cpp:420 devices/actiondialog.cpp:424
+#: devices/actiondialog.cpp:418 devices/actiondialog.cpp:422
msgid "Use Defaults"
msgstr ""
-#: devices/actiondialog.cpp:422
+#: devices/actiondialog.cpp:420
msgid ""
-"<p>You have not configured the source device.<br/>Continue with the default "
-"settings?</p>"
-msgstr "<p>没有设置来源设备。<br/>使用默认设置然后继续?</p>"
+"You have not configured the source device.\n"
+"\n"
+"Continue with the default settings?"
+msgstr ""
-#: devices/actiondialog.cpp:484
+#: devices/actiondialog.cpp:482
msgid "Are you sure you wish to stop?"
msgstr ""
-#: devices/actiondialog.cpp:484 gui/stdactions.cpp:50
+#: devices/actiondialog.cpp:482 gui/stdactions.cpp:46
msgid "Stop"
msgstr "停止"
-#: devices/actiondialog.cpp:529 devices/syncdialog.cpp:182
-#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:971
-#: tags/trackorganiser.cpp:543
+#: devices/actiondialog.cpp:527 devices/syncdialog.cpp:182
+#: replaygain/rgdialog.cpp:441 tags/tageditor.cpp:1249
+#: tags/trackorganiser.cpp:552
msgid "Device has been removed!"
msgstr "设备已移除!"
-#: devices/actiondialog.cpp:531
+#: devices/actiondialog.cpp:529
msgid "Device is not connected!"
msgstr "设备未连接!"
-#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:195
-#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:981
-#: tags/trackorganiser.cpp:553
+#: devices/actiondialog.cpp:531 devices/syncdialog.cpp:195
+#: replaygain/rgdialog.cpp:451 tags/tageditor.cpp:1259
+#: tags/trackorganiser.cpp:562
msgid "Device is busy?"
msgstr "设备正忙?"
-#: devices/actiondialog.cpp:535 devices/syncdialog.cpp:187
+#: devices/actiondialog.cpp:533 devices/syncdialog.cpp:187
msgid "Device has been changed?"
msgstr "设备已改变?"
-#: devices/actiondialog.cpp:602
+#: devices/actiondialog.cpp:600
msgid "Clearing unused folders"
msgstr "清除不用的文件夹"
-#: devices/actiondialog.cpp:617
+#: devices/actiondialog.cpp:615
msgid "Calculate ReplayGain for ripped tracks?"
msgstr ""
-#: devices/actiondialog.cpp:617
-msgid "ReplyGain"
-msgstr ""
+#: devices/actiondialog.cpp:615 gui/stdactions.cpp:67
+#: replaygain/rgdialog.cpp:85
+msgid "ReplayGain"
+msgstr "播放增益"
-#: devices/actiondialog.cpp:618
+#: devices/actiondialog.cpp:616
msgid "Calculate"
msgstr ""
-#: devices/actiondialog.cpp:677
+#: devices/actiondialog.cpp:675
msgid "The destination filename already exists!"
msgstr ""
-#: devices/actiondialog.cpp:680
+#: devices/actiondialog.cpp:678
msgid "Song already exists!"
msgstr ""
-#: devices/actiondialog.cpp:683
+#: devices/actiondialog.cpp:681
msgid "Song does not exist!"
msgstr ""
-#: devices/actiondialog.cpp:686
+#: devices/actiondialog.cpp:684
msgid ""
"Failed to create destination folder!<br/>Please check you have sufficient "
"permissions."
msgstr ""
-#: devices/actiondialog.cpp:689
+#: devices/actiondialog.cpp:687
msgid "Source file no longer exists?"
msgstr ""
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to copy."
msgstr ""
-#: devices/actiondialog.cpp:692
+#: devices/actiondialog.cpp:690
msgid "Failed to delete."
msgstr ""
-#: devices/actiondialog.cpp:695
+#: devices/actiondialog.cpp:693
msgid "Not connected to device."
msgstr ""
-#: devices/actiondialog.cpp:698
+#: devices/actiondialog.cpp:696
msgid "Selected codec is not available."
msgstr ""
-#: devices/actiondialog.cpp:701
+#: devices/actiondialog.cpp:699
msgid "Transcoding failed."
msgstr ""
-#: devices/actiondialog.cpp:704
+#: devices/actiondialog.cpp:702
msgid ""
"Failed to create temporary file.<br/>(Required for transcoding to MTP "
"devices.)"
msgstr ""
-#: devices/actiondialog.cpp:707
+#: devices/actiondialog.cpp:705
msgid "Failed to read source file."
msgstr ""
-#: devices/actiondialog.cpp:710
+#: devices/actiondialog.cpp:708
msgid "Failed to write to destination file."
msgstr ""
-#: devices/actiondialog.cpp:713
+#: devices/actiondialog.cpp:711
msgid "No space left on device."
msgstr ""
-#: devices/actiondialog.cpp:716
+#: devices/actiondialog.cpp:714
msgid "Failed to update metadata."
msgstr ""
-#: devices/actiondialog.cpp:719
+#: devices/actiondialog.cpp:717
msgid "Failed to download track."
msgstr ""
-#: devices/actiondialog.cpp:722
+#: devices/actiondialog.cpp:720
msgid "Failed to lock device."
msgstr ""
-#: devices/actiondialog.cpp:751
+#: devices/actiondialog.cpp:749
msgid "Local Music Library Properties"
msgstr "本地音乐库属性"
-#: devices/actiondialog.cpp:793 devices/actiondialog.cpp:807
-#: support/messagebox.cpp:108 support/messagebox.cpp:114
-#: support/messagebox.h:62
+#: devices/actiondialog.cpp:791 devices/actiondialog.cpp:805
+#: support/messagebox.cpp:69 support/messagebox.cpp:158
+#: support/messagebox.cpp:164 support/messagebox.h:67
msgid "Error"
msgstr "错误"
-#: devices/actiondialog.cpp:797 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:795 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Skip"
msgstr "跳过"
-#: devices/actiondialog.cpp:798 tags/trackorganiser.cpp:279
-#: tags/trackorganiser.cpp:298 tags/trackorganiser.cpp:320
-#: tags/trackorganiser.cpp:341
+#: devices/actiondialog.cpp:796 tags/trackorganiser.cpp:281
+#: tags/trackorganiser.cpp:300 tags/trackorganiser.cpp:322
+#: tags/trackorganiser.cpp:343
msgid "Auto Skip"
msgstr "自动跳过"
-#: devices/actiondialog.cpp:802
+#: devices/actiondialog.cpp:800
msgid "Retry"
msgstr "重试"
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
#. i18n: file: dynamic/dynamicrule.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:90
+#. i18n: file: tags/tageditor.ui:106
#. i18n: ectx: property (text), widget (StateLabel, albumLabel)
-#: devices/actiondialog.cpp:818 gui/searchpage.cpp:236 po/rc.cpp:383
-#: po/rc.cpp:989 rc.cpp:383 rc.cpp:989
+#: devices/actiondialog.cpp:816 gui/searchpage.cpp:234 po/rc.cpp:389
+#: po/rc.cpp:1005 rc.cpp:389 rc.cpp:1005
msgid "Album:"
msgstr "专辑:"
-#. i18n: file: tags/tageditor.ui:25
+#. i18n: file: tags/tageditor.ui:34
#. i18n: ectx: property (text), widget (StateLabel, trackNameLabel)
-#: devices/actiondialog.cpp:819 po/rc.cpp:974 rc.cpp:974
+#: devices/actiondialog.cpp:817 po/rc.cpp:990 rc.cpp:990
msgid "Track:"
msgstr "音轨:"
-#: devices/actiondialog.cpp:823
+#: devices/actiondialog.cpp:821
msgid "Source file:"
msgstr ""
-#: devices/actiondialog.cpp:824
+#: devices/actiondialog.cpp:822
msgid "Destination file:"
msgstr ""
-#: devices/actiondialog.cpp:826 gui/searchpage.cpp:243
+#: devices/actiondialog.cpp:824 gui/searchpage.cpp:244
msgid "File:"
msgstr ""
-#: devices/actiondialog.cpp:832 gui/cachesettings.cpp:180
-#: gui/cachesettings.cpp:236
+#: devices/actiondialog.cpp:830 gui/cachesettings.cpp:186
+#: gui/cachesettings.cpp:242
msgid "Calculating..."
msgstr "计算中..."
-#: devices/actiondialog.cpp:839
+#: devices/actiondialog.cpp:837
msgctxt "time (Estimated)"
msgid "%1 (Estimated)"
msgstr ""
-#: devices/actiondialog.cpp:841
+#: devices/actiondialog.cpp:839
msgid "Time remaining:"
msgstr ""
-#: devices/actiondialog.cpp:865 devices/fsdevice.cpp:747
-#: online/onlineservice.cpp:138 online/onlineservice.cpp:164
+#: devices/actiondialog.cpp:864 devices/fsdevice.cpp:750
+#: online/onlineservice.cpp:140 online/onlineservice.cpp:166
msgid "Saving cache"
msgstr "正在保存缓存"
#: devices/albumdetailsdialog.cpp:139 devices/albumdetailsdialog.cpp:236
-#: tags/tageditor.cpp:178 tags/tageditor.cpp:462
+#: tags/tageditor.cpp:200 tags/tageditor.cpp:530
msgid "Apply \"Various Artists\" Workaround"
msgstr "使用\"多个艺术家\" 环境"
#: devices/albumdetailsdialog.cpp:140 devices/albumdetailsdialog.cpp:260
-#: tags/tageditor.cpp:179 tags/tageditor.cpp:507
+#: tags/tageditor.cpp:201 tags/tageditor.cpp:575
msgid "Revert \"Various Artists\" Workaround"
msgstr "恢复 \"多个艺术家\" 环境"
#: devices/albumdetailsdialog.cpp:141 devices/albumdetailsdialog.cpp:278
-#: tags/tageditor.cpp:181 tags/tageditor.cpp:588
+#: tags/tageditor.cpp:203 tags/tageditor.cpp:655
msgid "Capitalize"
msgstr "转为大写"
#: devices/albumdetailsdialog.cpp:142 devices/albumdetailsdialog.cpp:295
-#: tags/tageditor.cpp:182 tags/tageditor.cpp:617
+#: tags/tageditor.cpp:204 tags/tageditor.cpp:684
msgid "Adjust Track Numbers"
msgstr "调整音轨号"
-#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:176
+#: devices/albumdetailsdialog.cpp:144 tags/tageditor.cpp:198
msgid "Tools"
msgstr "工具"
-#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:458
+#: devices/albumdetailsdialog.cpp:232 tags/tageditor.cpp:526
msgid "Apply \"Various Artists\" workaround?"
msgstr "确定使用\"多个艺术家\" 环境?"
-#: devices/albumdetailsdialog.cpp:234 tags/tageditor.cpp:460
+#: devices/albumdetailsdialog.cpp:234
msgid ""
-"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
-"'Title' to \"TrackArtist - TrackTitle\"</i>"
+"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\""
msgstr ""
-"<i>'专辑艺人' 和 '艺术家'将被设置成 '多个艺术家','标题'将被设置为'音轨艺人 "
-"- 音轨标题'。</i>"
-#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500
-msgid "Revert \"Various Artists\" workaround"
-msgstr "恢复 \"多个艺术家\" 环境"
+#: devices/albumdetailsdialog.cpp:253
+msgid "Revert \"Various Artists\" workaround?"
+msgstr ""
-#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502
+#: devices/albumdetailsdialog.cpp:255
msgid ""
-"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
-"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
-"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
-"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
-"will be set to \"Wobble\"</i>"
+"Where the 'Album artist' is the same as 'Artist' and the 'Title' is of the "
+"format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' and "
+"'Title' itself will be set to just the title. e.g. \n"
+"If 'Title' is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" "
+"and 'Title' will be set to \"Wobble\""
msgstr ""
-#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:508
+#: devices/albumdetailsdialog.cpp:261 tags/tageditor.cpp:576
msgid "Revert"
msgstr ""
-#: devices/albumdetailsdialog.cpp:277 tags/tageditor.cpp:586
+#: devices/albumdetailsdialog.cpp:277
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and 'Album'"
-msgstr "'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写。"
+"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+"'Album'?"
+msgstr ""
-#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:618
+#: devices/albumdetailsdialog.cpp:295 tags/tageditor.cpp:685
msgid "Adjust track number by:"
msgstr "调整音轨号为:"
@@ -828,8 +846,8 @@ msgstr "发现多个匹配项目,请在下面选择合适的:"
#. i18n: file: devices/albumdetails.ui:168
#. i18n: ectx: property (text), widget (QTreeWidget, tracks)
#: devices/cddbselectiondialog.cpp:47 dynamic/dynamicrulesdialog.cpp:78
-#: models/playqueuemodel.cpp:167 po/rc.cpp:125 replaygain/rgdialog.cpp:109
-#: rc.cpp:125
+#: models/playqueuemodel.cpp:167 mpd/song.cpp:515 po/rc.cpp:125
+#: replaygain/rgdialog.cpp:109 rc.cpp:125
msgid "Title"
msgstr "标题"
@@ -935,72 +953,76 @@ msgstr "同步"
msgid "Forget Device"
msgstr "清除设备历史"
-#: devices/devicespage.cpp:110 devices/remotedevicepropertiesdialog.cpp:60
+#: devices/devicespage.cpp:106 devices/remotedevicepropertiesdialog.cpp:60
msgid "Add Device"
msgstr "添加设备"
-#: devices/devicespage.cpp:428 devices/devicespage.cpp:440
+#: devices/devicespage.cpp:422 devices/devicespage.cpp:434
msgid "Lookup album and track details?"
msgstr "查看专辑和音轨信息?"
-#: devices/devicespage.cpp:429 devices/devicespage.cpp:441
-#: devices/devicespage.cpp:451 gui/mainwindow.cpp:257
+#: devices/devicespage.cpp:423 devices/devicespage.cpp:435
+#: devices/devicespage.cpp:447 gui/mainwindow.cpp:264
msgid "Refresh"
msgstr "刷新"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via CDDB"
msgstr "通过 CDDB"
-#: devices/devicespage.cpp:429
+#: devices/devicespage.cpp:423
msgid "Via MusicBrainz"
msgstr "通过 MusicBrainz"
-#: devices/devicespage.cpp:448
-msgid ""
-"<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only new "
-"songs are scanned <i>(quick)</i></li><li>Full - All songs are rescanned "
-"<i>(slow)</i></li></ul></p>"
+#: devices/devicespage.cpp:444
+msgid "Which type of refresh do you wish to perform?"
+msgstr ""
+
+#: devices/devicespage.cpp:445
+msgid "Partial - Only new songs are scanned (quick)"
+msgstr ""
+
+#: devices/devicespage.cpp:446
+msgid "Full - All songs are rescanned (slow)"
msgstr ""
-"<p>你希望选择刷新哪一类?<ul><li>部分 - 仅扫描新增歌曲<i>(较快)</i></li><li>全"
-"部 - 扫描所有的歌曲<i>(较慢)</i></li></ul></p>"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Partial"
msgstr "部分"
-#: devices/devicespage.cpp:451
+#: devices/devicespage.cpp:447
msgid "Full"
msgstr "完全"
-#: devices/devicespage.cpp:498 gui/albumspage.cpp:226 gui/folderpage.cpp:256
-#: gui/librarypage.cpp:265
+#: devices/devicespage.cpp:494 gui/albumspage.cpp:159 gui/folderpage.cpp:253
+#: gui/librarypage.cpp:180
msgid ""
"Are you sure you wish to delete the selected songs?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: devices/devicespage.cpp:525
-msgid "Are you sure you wish to forget <b>%1</b>?"
-msgstr ""
+#: devices/devicespage.cpp:521
+msgid "Are you sure you wish to forget '%1'?"
+msgstr "确定要清除历史 '%1'?"
-#: devices/devicespage.cpp:544
-msgid "Are you sure you wish to eject Audio CD <b>%1 - %2</b>?"
+#: devices/devicespage.cpp:540
+msgid "Are you sure you wish to eject Audio CD '%1 - %2'?"
msgstr ""
-#: devices/devicespage.cpp:545
+#: devices/devicespage.cpp:541
msgid "Eject"
msgstr ""
-#: devices/devicespage.cpp:546
-msgid "Are you sure you wish to disconnect <b>%1</b>?"
+#: devices/devicespage.cpp:542
+msgid "Are you sure you wish to disconnect '%1'?"
msgstr ""
-#: devices/devicespage.cpp:547
+#: devices/devicespage.cpp:543
msgid "Disconnect"
msgstr "连接断开"
-#: devices/devicespage.cpp:566 gui/mainwindow.cpp:1175
+#: devices/devicespage.cpp:562 gui/mainwindow.cpp:1256
msgid "Please close other dialogs first."
msgstr "请先关闭其他对话框."
@@ -1080,7 +1102,7 @@ msgid ""
"anything above <b>205kb/s</b> is probably overkill."
msgstr ""
-#: devices/encoders.cpp:156 online/magnatuneservice.cpp:185
+#: devices/encoders.cpp:156 online/magnatuneservice.cpp:186
msgid "Ogg Vorbis"
msgstr "Ogg Vorbis"
@@ -1168,7 +1190,7 @@ msgstr ""
"%8B%A4>苹果无损格式 苹果无损格式</a> (ALAC) 是一种无损压缩的数字音乐格式.<br>"
"推荐在苹果播放器或者其他不支持 FLAC 的播放器上使用."
-#: devices/encoders.cpp:260 online/magnatuneservice.cpp:186
+#: devices/encoders.cpp:260 online/magnatuneservice.cpp:187
msgid "FLAC"
msgstr "FLAC"
@@ -1277,63 +1299,62 @@ msgstr "舞曲"
#: devices/filenameschemedialog.cpp:121
msgid ""
-"<p>The following variables will be replaced with their corresponding meaning "
-"for each track name.</p>"
+"The following variables will be replaced with their corresponding meaning "
+"for each track name."
msgstr ""
-#: devices/filenameschemedialog.cpp:123
+#: devices/filenameschemedialog.cpp:127
msgid ""
"<tr><th><em>Variable</em></th><th><em>Button</em></th><th><em>Description</"
"em></th></tr>"
msgstr ""
-#: devices/fsdevice.cpp:660 gui/albumspage.cpp:300 gui/folderpage.cpp:291
-#: gui/librarypage.cpp:423
+#: devices/fsdevice.cpp:662 widgets/itemview.cpp:1317
msgid "Updating..."
msgstr "更新..."
-#: devices/fsdevice.cpp:742 online/onlineservice.cpp:95
-#: online/onlineservice.cpp:159
+#: devices/fsdevice.cpp:745 online/onlineservice.cpp:97
+#: online/onlineservice.cpp:161
msgid "Reading cache"
msgstr "读取缓存"
-#: devices/fsdevice.cpp:754 online/onlineservice.cpp:371
+#: devices/fsdevice.cpp:757 online/onlineservice.cpp:377
msgctxt "Message percent"
msgid "%1 %2%"
msgstr ""
-#: devices/mtpdevice.cpp:156
+#: devices/mtpdevice.cpp:158
msgid "Connecting to device..."
msgstr "正在连接到设备 ..."
-#: devices/mtpdevice.cpp:158 devices/mtpdevice.cpp:205
+#: devices/mtpdevice.cpp:160 devices/mtpdevice.cpp:207
msgid "No devices found"
msgstr "没有发现设备"
-#: devices/mtpdevice.cpp:220
+#: devices/mtpdevice.cpp:222
msgid "Connected to device"
msgstr "连接到设备"
-#: devices/mtpdevice.cpp:233
+#: devices/mtpdevice.cpp:235
msgid "Disconnected from device"
msgstr "设备连接断开"
-#: devices/mtpdevice.cpp:306
+#: devices/mtpdevice.cpp:308
msgid "Updating folders..."
msgstr "更新文件夹..."
-#: devices/mtpdevice.cpp:325
+#: devices/mtpdevice.cpp:327
msgid "Updating files..."
msgstr "更新文件..."
-#: devices/mtpdevice.cpp:339 devices/remotefsdevice.cpp:426
+#: devices/mtpdevice.cpp:341 devices/remotefsdevice.cpp:426
#: devices/remotefsdevice.cpp:446
msgid "Updating tracks..."
msgstr "更新音轨..."
-#: devices/mtpdevice.cpp:1682 devices/remotefsdevice.cpp:529
+#: devices/mtpdevice.cpp:1690 devices/remotefsdevice.cpp:529
#: devices/umsdevice.cpp:120 gui/initialsettingswizard.cpp:57
-#: models/devicesmodel.cpp:142
+#: models/devicesmodel.cpp:148
msgid "Not Connected"
msgstr "未连接"
@@ -1341,7 +1362,7 @@ msgstr "未连接"
msgid "%1 (Disc %2)"
msgstr "%1 (碟 %2)"
-#: devices/musicbrainz.cpp:394
+#: devices/musicbrainz.cpp:388
msgid "No matches found in MusicBrainz"
msgstr "没有在 MusicBrainz 中找到匹配数据"
@@ -1349,17 +1370,16 @@ msgstr "没有在 MusicBrainz 中找到匹配数据"
msgid "Connection"
msgstr "连接"
-#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:262
+#: devices/remotedevicepropertiesdialog.cpp:52 gui/cachesettings.cpp:268
msgid "Music Library"
msgstr "音乐库"
#: devices/remotedevicepropertiesdialog.cpp:91
msgid ""
-"A remote device named \"%1\" already exists!\n"
-"Please choose a different name"
+"A remote device named '%1' already exists!\n"
+"\n"
+"Please choose a different name."
msgstr ""
-"已经有名为 \"%1\" 的远程设备!\n"
-"请选择其他名称"
#: devices/remotedevicepropertieswidget.cpp:52
msgid "Samba Share"
@@ -1436,20 +1456,20 @@ msgstr "容量未知"
#. i18n: file: gui/coverdialog.ui:23
#. i18n: ectx: property (text), widget (QPushButton, search)
-#: devices/synccollectionwidget.cpp:54 gui/mainwindow.cpp:430
-#: online/podcastsearchdialog.cpp:334 po/rc.cpp:416 rc.cpp:416
+#: devices/synccollectionwidget.cpp:53 gui/mainwindow.cpp:449
+#: online/podcastsearchdialog.cpp:337 po/rc.cpp:422 rc.cpp:422
msgid "Search"
msgstr "搜索"
-#: devices/synccollectionwidget.cpp:63
+#: devices/synccollectionwidget.cpp:62
msgid "Check Items"
msgstr ""
-#: devices/synccollectionwidget.cpp:65
+#: devices/synccollectionwidget.cpp:64
msgid "Uncheck Items"
msgstr ""
-#: devices/synccollectionwidget.cpp:272
+#: devices/synccollectionwidget.cpp:271
msgid "Nothing selected"
msgstr ""
@@ -1493,7 +1513,7 @@ msgstr ""
msgid "Failed to save %1."
msgstr ""
-#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:830 dynamic/dynamic.cpp:833
+#: dynamic/dynamic.cpp:81 dynamic/dynamic.cpp:853 dynamic/dynamic.cpp:856
msgid "Failed to delete rules file. (%1)"
msgstr "删除 (%1) 失败."
@@ -1525,66 +1545,70 @@ msgstr ""
msgid "Unknown method called."
msgstr ""
-#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:155
-#: models/digitallyimported.cpp:181 scrobbling/scrobbler.cpp:104
+#: dynamic/dynamic.cpp:91 models/digitallyimported.cpp:159
+#: models/digitallyimported.cpp:184 scrobbling/scrobbler.cpp:105
msgid "Unknown error"
msgstr ""
-#: dynamic/dynamic.cpp:164
+#: dynamic/dynamic.cpp:167
msgid "Start Dynamic Playlist"
msgstr "开始动态列表"
-#: dynamic/dynamic.cpp:165
+#: dynamic/dynamic.cpp:168
msgid "Stop Dynamic Mode"
msgstr "停止动态模式"
-#: dynamic/dynamic.cpp:334
+#: dynamic/dynamic.cpp:222
+msgid " - Rating: %1..%2"
+msgstr ""
+
+#: dynamic/dynamic.cpp:344
msgid ""
"You need to install \"perl\" on your system in order for Cantata's dynamic "
"mode to function."
msgstr ""
-#: dynamic/dynamic.cpp:341
+#: dynamic/dynamic.cpp:351
msgid "Failed to locate rules file - %1"
msgstr "无法加载配置 - %1"
-#: dynamic/dynamic.cpp:349
+#: dynamic/dynamic.cpp:359
msgid "Failed to remove previous rules file - %1"
msgstr "无法删除前一个配置 - %1"
-#: dynamic/dynamic.cpp:354
+#: dynamic/dynamic.cpp:364
msgid "Failed to install rules file - %1 -> %2"
msgstr "无法安装配置 - %1 到 %2"
-#: dynamic/dynamic.cpp:663
+#: dynamic/dynamic.cpp:686
msgid "Dynamizer has been terminated."
msgstr ""
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Saving rule"
msgstr "正在保存规则"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Deleting rule"
msgstr "删除规则"
-#: dynamic/dynamic.cpp:709
+#: dynamic/dynamic.cpp:732
msgid "Awaiting response for previous command. (%1)"
msgstr "等待响应前一个命令. (%1)"
-#: dynamic/dynamic.cpp:816
+#: dynamic/dynamic.cpp:839
msgid "Failed to save %1. (%2)"
msgstr ""
-#: dynamic/dynamic.cpp:840
+#: dynamic/dynamic.cpp:863
msgid "Failed to control dynamizer state. (%1)"
msgstr "设置动态 (%1) 失败"
-#: dynamic/dynamic.cpp:847
+#: dynamic/dynamic.cpp:870
msgid "Failed to set the current dynamic rules. (%1)"
msgstr "无法设置当前动态规则. (%1)"
-#: dynamic/dynamic.cpp:882
+#: dynamic/dynamic.cpp:905
msgid ""
"Communication with the remote dynamizer has been lost, reverting to local "
"mode."
@@ -1605,24 +1629,25 @@ msgstr "删除动态配置"
#: dynamic/dynamicpage.cpp:139
msgid ""
"Are you sure you wish to remove the selected rules?\n"
+"\n"
"This cannot be undone."
msgstr ""
-#: dynamic/dynamicruledialog.cpp:41
+#: dynamic/dynamicruledialog.cpp:40
msgid "Dynamic Rule"
msgstr "动态规则"
#. i18n: file: dynamic/dynamicrules.ui:53
#. i18n: ectx: property (text), widget (QPushButton, addBtn)
-#: dynamic/dynamicruledialog.cpp:149 po/rc.cpp:350 rc.cpp:350
+#: dynamic/dynamicruledialog.cpp:148 po/rc.cpp:350 rc.cpp:350
msgid "Add"
msgstr "添加"
-#: dynamic/dynamicruledialog.cpp:218
+#: dynamic/dynamicruledialog.cpp:217
msgid "<i><b>ERROR</b>: 'From Year' should be less than 'To Year'</i>"
msgstr "<i><b>错误</b>: 原有的年份应在更改后的年份之前</i>"
-#: dynamic/dynamicruledialog.cpp:221
+#: dynamic/dynamicruledialog.cpp:220
msgid ""
"<i><b>ERROR:</b> Date range is too large (can only be a maximum of %1 "
"years)</i>"
@@ -1652,63 +1677,68 @@ msgstr " (解压)"
msgid "Dynamic Rules"
msgstr "动态规则"
-#: dynamic/dynamicrulesdialog.cpp:292
+#: dynamic/dynamicrulesdialog.cpp:295
+msgid "About dynamic rules"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:297
msgid ""
"<p>Cantata will query your library using all of the rules listed. The list "
"of <i>Include</i> rules will be used to build a set of songs that can be "
"used. The list of <i>Exclude</i> rules will be used to build a set of songs "
"that cannot be used. If there are no <i>Include</i> rules, Cantata will "
-"assume that all songs (bar those from <i>Exclude</i>) can be used. <br/>e.g. "
-"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', "
-"you would need the following: <ul><li>Include AlbumArtist=Wibble Genre=Rock</"
-"li><li>Include AlbumArtist=Various Artists</li></ul> To have Cantata look "
-"for 'Songs by Wibble but not from album Abc', you would need the following: "
-"<ul><li>Include AlbumArtist=Wibble</li><li>Exclude Album=Abc</li></ul>After "
-"the set of usable songs has been created, Cantata will randomly select songs "
-"to keep the play queue filled with 10 entries.</p>"
-msgstr ""
-
-#: dynamic/dynamicrulesdialog.cpp:311
+"assume that all songs (bar those from <i>Exclude</i>) can be used.</p><p>e."
+"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various "
+"Artists', you would need the following: <ul><li>Include AlbumArtist=Wibble "
+"Genre=Rock</li><li>Include AlbumArtist=Various Artists</li></ul> To have "
+"Cantata look for 'Songs by Wibble but not from album Abc', you would need "
+"the following: <ul><li>Include AlbumArtist=Wibble</li><li>Exclude "
+"AlbumArtist=Wibble Album=Abc</li></ul>After the set of usable songs has been "
+"created, Cantata will randomly select songs to keep the play queue filled "
+"with 10 entries. If a range of ratings has been specified, then only songs "
+"with a rating within this range will be used.</p>"
+msgstr ""
+
+#: dynamic/dynamicrulesdialog.cpp:317
msgid "Failed to save %1"
msgstr "%1 保存失败"
-#: dynamic/dynamicrulesdialog.cpp:329
+#: dynamic/dynamicrulesdialog.cpp:335
msgid ""
"A set of rules named '%1' already exists!\n"
+"\n"
"Overwrite?"
msgstr ""
-"已经有名为 '%1' 的规则!\n"
-"覆盖吗?"
-#: dynamic/dynamicrulesdialog.cpp:330
+#: dynamic/dynamicrulesdialog.cpp:336
msgid "Overwrite Rules"
msgstr ""
-#: dynamic/dynamicrulesdialog.cpp:355
+#: dynamic/dynamicrulesdialog.cpp:365
msgid "Saving %1"
msgstr "正在保存 %1"
-#: gui/cachesettings.cpp:174
+#: gui/cachesettings.cpp:175
msgid "Deleting..."
msgstr ""
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Name"
msgstr "名称"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Item Count"
msgstr "计数"
-#: gui/cachesettings.cpp:197
+#: gui/cachesettings.cpp:203
msgid "Space Used"
msgstr "已用空间"
-#: gui/cachesettings.cpp:240
+#: gui/cachesettings.cpp:246
msgid "Total space used: %1"
msgstr ""
-#: gui/cachesettings.cpp:251
+#: gui/cachesettings.cpp:257
msgid ""
"Cantata caches a local copy of the music listing to speed up loading of the "
"library. Cantata might also have cached covers, lyrics, or artist images, if "
@@ -1717,67 +1747,67 @@ msgid ""
"save these items there). Below is a summary of Cantata's current cache usage."
msgstr ""
-#: gui/cachesettings.cpp:264
+#: gui/cachesettings.cpp:270
msgid "Covers"
msgstr "封面"
-#: gui/cachesettings.cpp:265
+#: gui/cachesettings.cpp:272
msgid "Scaled Covers"
msgstr ""
-#: gui/cachesettings.cpp:266
+#: gui/cachesettings.cpp:274
msgid "Backdrops"
msgstr ""
-#: gui/cachesettings.cpp:268
+#: gui/cachesettings.cpp:276
msgid "Artist Information"
msgstr "艺术家信息"
-#: gui/cachesettings.cpp:270
+#: gui/cachesettings.cpp:278
msgid "Album Information"
msgstr ""
-#: gui/cachesettings.cpp:271
+#: gui/cachesettings.cpp:279
msgid "Track Information"
msgstr ""
-#: gui/cachesettings.cpp:273
+#: gui/cachesettings.cpp:281
msgid "Stream Listings"
msgstr ""
-#: gui/cachesettings.cpp:276
+#: gui/cachesettings.cpp:284
msgid "Jamendo"
msgstr ""
-#: gui/cachesettings.cpp:277
+#: gui/cachesettings.cpp:285
msgid "Magnatune"
msgstr ""
-#: gui/cachesettings.cpp:278
+#: gui/cachesettings.cpp:286
msgid "Podcast Directories"
msgstr ""
-#: gui/cachesettings.cpp:281
+#: gui/cachesettings.cpp:289
msgid "Scrobble Tracks"
msgstr ""
-#: gui/cachesettings.cpp:288
+#: gui/cachesettings.cpp:296
msgid "Delete All"
msgstr "删除全部"
-#: gui/cachesettings.cpp:327
+#: gui/cachesettings.cpp:335
msgid "Delete all '%1' items?"
msgstr "确定所有 '%1' 的项目?"
-#: gui/cachesettings.cpp:328 gui/cachesettings.cpp:338
+#: gui/cachesettings.cpp:336 gui/cachesettings.cpp:348
msgid "Delete Cache Items"
msgstr "确定删除缓存?"
-#: gui/cachesettings.cpp:337
-msgid "<p>Delete all from the following?<ul>%1</ul></p>"
-msgstr "<p>删除下面所有的项目吗?<ul>%1</ul></p>"
+#: gui/cachesettings.cpp:347
+msgid "Delete items from all selected categories?"
+msgstr ""
-#: gui/coverdialog.cpp:124
+#: gui/coverdialog.cpp:127
msgctxt ""
"name\n"
"width x height (file size)"
@@ -1788,7 +1818,7 @@ msgstr ""
"%1\n"
"%2 x %3 (%4)"
-#: gui/coverdialog.cpp:126
+#: gui/coverdialog.cpp:129
msgctxt ""
"name\n"
"width x height"
@@ -1797,69 +1827,68 @@ msgid ""
"%2 x %3"
msgstr ""
-#: gui/coverdialog.cpp:162
+#: gui/coverdialog.cpp:165
msgid "Current Cover"
msgstr ""
-#: gui/coverdialog.cpp:211 gui/coverdialog.cpp:406
+#: gui/coverdialog.cpp:214 gui/coverdialog.cpp:409
msgid "CoverArt Archive"
msgstr ""
-#: gui/coverdialog.cpp:242
+#: gui/coverdialog.cpp:245
msgid "Image"
msgstr "图片"
-#: gui/coverdialog.cpp:245
+#: gui/coverdialog.cpp:248
msgid "Downloading..."
msgstr "正在下载..."
-#: gui/coverdialog.cpp:290 gui/coverdialog.cpp:325
+#: gui/coverdialog.cpp:293 gui/coverdialog.cpp:328
msgctxt "Image (width x height zoom%)"
msgid "Image (%1 x %2 %3%)"
msgstr "图片 (%1 x %2 %3%)"
-#: gui/coverdialog.cpp:436
+#: gui/coverdialog.cpp:439
msgid "An image already exists for this artist, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:437
+#: gui/coverdialog.cpp:440
msgid "A cover already exists for this album, and the file is not writeable."
msgstr ""
-#: gui/coverdialog.cpp:443
+#: gui/coverdialog.cpp:446
msgid "'%1' Artist Image"
msgstr ""
-#: gui/coverdialog.cpp:445
+#: gui/coverdialog.cpp:448
msgctxt "'Artist - Album' Album Cover"
msgid "'%1 - %2' Album Cover"
msgstr ""
-#: gui/coverdialog.cpp:574
+#: gui/coverdialog.cpp:576
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not download to temporary file!"
msgstr ""
-"设置封面失败!\n"
-"无法下载临时文件!"
-#: gui/coverdialog.cpp:608
+#: gui/coverdialog.cpp:610
msgid "Failed to download image!"
msgstr "下载图片失败!"
-#: gui/coverdialog.cpp:861 gui/coverdialog.cpp:863
+#: gui/coverdialog.cpp:862 gui/coverdialog.cpp:864
msgid "Load Local Cover"
msgstr "加载本地封面"
-#: gui/coverdialog.cpp:868
+#: gui/coverdialog.cpp:869
msgid "File is already in list!"
msgstr "文件已在列表中!"
-#: gui/coverdialog.cpp:872
+#: gui/coverdialog.cpp:873
msgid "Failed to read image!"
msgstr "读取图片失败!"
-#: gui/coverdialog.cpp:885
+#: gui/coverdialog.cpp:886
msgid "Display"
msgstr "显示"
@@ -1871,36 +1900,33 @@ msgstr "显示"
#. i18n: ectx: property (text), widget (QPushButton, removeBtn)
#. i18n: file: streams/streamssettings.ui:73
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
-#: gui/coverdialog.cpp:886 gui/stdactions.cpp:80 po/rc.cpp:356 po/rc.cpp:953
-#: rc.cpp:356 rc.cpp:953
+#: gui/coverdialog.cpp:887 gui/stdactions.cpp:75 po/rc.cpp:356 po/rc.cpp:969
+#: rc.cpp:356 rc.cpp:969
msgid "Remove"
msgstr "删除"
-#: gui/coverdialog.cpp:1319
+#: gui/coverdialog.cpp:1350
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not make copy!"
msgstr ""
-"设置封面失败!\n"
-"复制图片失败!"
-#: gui/coverdialog.cpp:1328
+#: gui/coverdialog.cpp:1359
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not backup original!"
msgstr ""
-"设置封面失败!\n"
-"备份原封面失败!"
-#: gui/coverdialog.cpp:1375
+#: gui/coverdialog.cpp:1406
msgid ""
"Failed to set cover!\n"
+"\n"
"Could not copy file to '%1'!"
msgstr ""
-"设置封面失败!\n"
-"无法文件复制到 '%1'!"
-#: gui/coverdialog.cpp:1433 models/onlineservicesmodel.cpp:160
+#: gui/coverdialog.cpp:1464 models/onlineservicesmodel.cpp:158
msgid "Searching..."
msgstr ""
@@ -1916,485 +1942,440 @@ msgstr ""
msgid "Connection Failed"
msgstr "连接失败"
-#: gui/interfacesettings.cpp:56
+#: gui/interfacesettings.cpp:58
msgid "Album, Artist, Year"
msgstr ""
-#: gui/interfacesettings.cpp:57
+#: gui/interfacesettings.cpp:59
msgid "Album, Year, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:58
+#: gui/interfacesettings.cpp:60
msgid "Artist, Album, Year"
msgstr ""
-#: gui/interfacesettings.cpp:59
+#: gui/interfacesettings.cpp:61
msgid "Artist, Year, Album"
msgstr ""
-#: gui/interfacesettings.cpp:60
+#: gui/interfacesettings.cpp:62
msgid "Year, Album, Artist"
msgstr ""
-#: gui/interfacesettings.cpp:61
+#: gui/interfacesettings.cpp:63
msgid "Year, Artist, Album"
msgstr ""
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#. i18n: file: context/othersettings.ui:32
-#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
-#. i18n: file: gui/interfacesettings.ui:494
-#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
-#. i18n: file: gui/playbacksettings.ui:51
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
-#. i18n: file: gui/playbacksettings.ui:144
-#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
-#. i18n: file: support/shortcutssettingswidget.ui:78
-#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
-#: gui/interfacesettings.cpp:66 gui/playbacksettings.cpp:46
-#: online/magnatuneservice.cpp:163 po/rc.cpp:6 po/rc.cpp:651 po/rc.cpp:771
-#: po/rc.cpp:795 po/rc.cpp:968 rc.cpp:6 rc.cpp:651 rc.cpp:771 rc.cpp:795
-#: rc.cpp:968
-msgid "None"
-msgstr "无"
-
-#: gui/interfacesettings.cpp:67 gui/interfacesettings.cpp:206
-msgid "Small"
-msgstr "小"
-
-#: gui/interfacesettings.cpp:68
-msgid "Medium"
-msgstr "中"
-
-#: gui/interfacesettings.cpp:69 gui/interfacesettings.cpp:205
-msgid "Large"
-msgstr "大"
-
#: gui/interfacesettings.cpp:70
-msgid "Extra Large"
-msgstr "非常大"
-
-#: gui/interfacesettings.cpp:77
msgid "Basic Tree (No Icons)"
msgstr ""
-#: gui/interfacesettings.cpp:78
+#: gui/interfacesettings.cpp:71
msgid "Simple Tree"
msgstr "简单树形"
-#: gui/interfacesettings.cpp:79
+#: gui/interfacesettings.cpp:72
msgid "Detailed Tree"
msgstr "详细信息"
-#: gui/interfacesettings.cpp:80
+#: gui/interfacesettings.cpp:73
msgid "Grouped Albums"
msgstr "分组专辑"
-#: gui/interfacesettings.cpp:81
+#: gui/interfacesettings.cpp:74
msgid "List"
msgstr "列表"
-#: gui/interfacesettings.cpp:82
-msgid "Icon/List"
-msgstr "图标/列表"
+#: gui/interfacesettings.cpp:75
+msgid "Grid"
+msgstr ""
-#: gui/interfacesettings.cpp:83
+#: gui/interfacesettings.cpp:76
msgid "Table"
msgstr "表单"
-#. i18n: file: gui/interfacesettings.ui:432
+#. i18n: file: gui/interfacesettings.ui:350
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
-#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:362 po/rc.cpp:630
-#: rc.cpp:630
+#: gui/interfacesettings.cpp:144 gui/mainwindow.cpp:381 po/rc.cpp:629
+#: rc.cpp:629
msgid "Play Queue"
msgstr "播放队列"
-#. i18n: file: gui/interfacesettings.ui:188
-#. i18n: ectx: attribute (title), widget (QWidget, tab)
-#: gui/interfacesettings.cpp:149 gui/mainwindow.cpp:367 po/rc.cpp:572
-#: rc.cpp:572
+#. i18n: file: gui/interfacesettings.ui:141
+#. i18n: ectx: property (title), widget (QGroupBox, artistsViewGroupBox)
+#: gui/interfacesettings.cpp:145 gui/mainwindow.cpp:386 po/rc.cpp:581
+#: rc.cpp:581
msgid "Artists"
msgstr "艺术家"
-#: gui/interfacesettings.cpp:151 gui/interfacesettings.cpp:182
-#: gui/mainwindow.cpp:378
+#: gui/interfacesettings.cpp:147 gui/mainwindow.cpp:397
msgid "Folders"
msgstr "文件夹"
-#. i18n: file: gui/interfacesettings.ui:330
-#. i18n: ectx: attribute (title), widget (QWidget, tab_6)
-#: gui/interfacesettings.cpp:152 gui/mainwindow.cpp:384 po/rc.cpp:603
-#: rc.cpp:603
+#. i18n: file: gui/interfacesettings.ui:224
+#. i18n: ectx: property (title), widget (QGroupBox, playlistsViewGroupBox)
+#: gui/interfacesettings.cpp:148 gui/mainwindow.cpp:403 po/rc.cpp:602
+#: rc.cpp:602
msgid "Playlists"
msgstr "播放列表"
-#: gui/interfacesettings.cpp:154
+#: gui/interfacesettings.cpp:150
msgid "Dynamic Playlists"
msgstr ""
-#: gui/interfacesettings.cpp:158
+#: gui/interfacesettings.cpp:154
msgid "Streams (e.g. Radio Stations)"
msgstr ""
-#: gui/interfacesettings.cpp:165
+#: gui/interfacesettings.cpp:161
msgid "Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"
msgstr ""
-#: gui/interfacesettings.cpp:172
+#: gui/interfacesettings.cpp:168
msgid "Devices - UMS, MTP (e.g. Android), and AudioCDs"
msgstr ""
-#: gui/interfacesettings.cpp:178
+#: gui/interfacesettings.cpp:174
msgid "Search (via MPD)"
msgstr ""
-#: gui/interfacesettings.cpp:179
+#: gui/interfacesettings.cpp:175
msgid "Info - Current song information (artist, album, and lyrics)"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#. i18n: file: gui/interfacesettings.ui:137
-#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
-#. i18n: file: gui/interfacesettings.ui:199
-#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: gui/interfacesettings.ui:290
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3a)
-#. i18n: file: gui/interfacesettings.ui:339
-#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: gui/interfacesettings.ui:441
-#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
-#: gui/interfacesettings.cpp:183 po/rc.cpp:557 po/rc.cpp:575 po/rc.cpp:594
-#: po/rc.cpp:606 po/rc.cpp:633 rc.cpp:557 rc.cpp:575 rc.cpp:594 rc.cpp:606
-#: rc.cpp:633
-msgid "Style:"
-msgstr "视图:"
+#: gui/interfacesettings.cpp:190
+msgid "Large"
+msgstr "大"
+
+#: gui/interfacesettings.cpp:191
+msgid "Small"
+msgstr "小"
-#: gui/interfacesettings.cpp:207
+#: gui/interfacesettings.cpp:192
msgid "Tab-bar"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Left"
msgstr ""
-#: gui/interfacesettings.cpp:208
+#: gui/interfacesettings.cpp:193
msgid "Right"
msgstr ""
-#: gui/interfacesettings.cpp:209
+#: gui/interfacesettings.cpp:194
msgid "Top"
msgstr ""
-#: gui/interfacesettings.cpp:210
+#: gui/interfacesettings.cpp:195
msgid "Bottom"
msgstr ""
-#: gui/interfacesettings.cpp:464
+#: gui/interfacesettings.cpp:232
+msgid "Notifications"
+msgstr ""
+
+#: gui/interfacesettings.cpp:492
msgid "System default"
msgstr ""
-#: gui/main.cpp:237 gui/mainwindow.cpp:1883 gui/trayitem.cpp:103
-#: gui/trayitem.cpp:105 gui/trayitem.cpp:140 gui/trayitem.cpp:200
-#: gui/trayitem.cpp:207 gui/trayitem.cpp:210 gui/trayitem.cpp:213
-#: gui/trayitem.cpp:226 gui/trayitem.cpp:228
+#: gui/main.cpp:267 gui/mainwindow.cpp:1914 gui/trayitem.cpp:128
+#: gui/trayitem.cpp:130 gui/trayitem.cpp:169 gui/trayitem.cpp:248
+#: gui/trayitem.cpp:255 gui/trayitem.cpp:261 gui/trayitem.cpp:274
+#: gui/trayitem.cpp:276
msgid "Cantata"
msgstr ""
-#: gui/main.cpp:238
+#: gui/main.cpp:268
msgid "A KDE client for MPD"
msgstr "KDE 下的 MPD 客户端"
-#: gui/main.cpp:240
+#: gui/main.cpp:270
msgid "© 2011-2014 Craig Drummond"
msgstr ""
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Craig Drummond"
msgstr "Craig Drummond"
-#: gui/main.cpp:244
+#: gui/main.cpp:274
msgid "Maintainer"
msgstr "维护者"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "Piotr Wicijowski"
msgstr "Piotr Wicijowski"
-#: gui/main.cpp:245
+#: gui/main.cpp:275
msgid "UI Improvements"
msgstr "界面优化"
-#: gui/main.cpp:246
+#: gui/main.cpp:276
msgid "Sander Knopper"
msgstr "Sander Knopper"
-#: gui/main.cpp:246 gui/main.cpp:247 gui/main.cpp:248 gui/main.cpp:249
+#: gui/main.cpp:276 gui/main.cpp:277 gui/main.cpp:278 gui/main.cpp:279
msgid "QtMPC author"
msgstr "QtMPC 作者"
-#: gui/main.cpp:247
+#: gui/main.cpp:277
msgid "Roeland Douma"
msgstr "Roeland Douma"
-#: gui/main.cpp:248
+#: gui/main.cpp:278
msgid "Daniel Selinger"
msgstr "Daniel Selinger"
-#: gui/main.cpp:249
+#: gui/main.cpp:279
msgid "Armin Walland"
msgstr "Armin Walland"
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid "FanArt.tv"
msgstr ""
-#: gui/main.cpp:250
+#: gui/main.cpp:280
msgid ""
"Context view backdrops (please consider uploading your own music fan-art to "
"fanart.tv)"
msgstr ""
-#: gui/main.cpp:251
+#: gui/main.cpp:281
msgid "Wikipedia"
msgstr ""
-#: gui/main.cpp:251 gui/main.cpp:252
+#: gui/main.cpp:281 gui/main.cpp:282
msgid "Context view metadata"
msgstr ""
-#: gui/main.cpp:252
+#: gui/main.cpp:282
msgid "Last.fm"
msgstr ""
-#: gui/main.cpp:256
+#: gui/main.cpp:286
msgid "URL to open"
msgstr "打开 URL"
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Configure Cantata..."
msgstr "设置 Cantata..."
-#: gui/mainwindow.cpp:236
+#: gui/mainwindow.cpp:243
msgid "Preferences"
msgstr ""
-#: gui/mainwindow.cpp:239
+#: gui/mainwindow.cpp:246
msgid "Quit"
msgstr "退出"
-#: gui/mainwindow.cpp:242
+#: gui/mainwindow.cpp:249
msgctxt "Qt-only"
msgid "About Cantata..."
msgstr "关于 Cantata..."
-#: gui/mainwindow.cpp:250
+#: gui/mainwindow.cpp:257
msgid "Show Window"
msgstr "显示窗口"
-#: gui/mainwindow.cpp:253
+#: gui/mainwindow.cpp:260
msgid "Server information..."
msgstr "服务器信息..."
-#: gui/mainwindow.cpp:256
+#: gui/mainwindow.cpp:263
msgid "Refresh Database"
msgstr "刷新数据"
-#. i18n: file: gui/initialsettingswizard.ui:481
+#: gui/mainwindow.cpp:265
+msgid "Full Refresh"
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:484
#. i18n: ectx: property (text), widget (QPushButton, connectButton)
-#: gui/mainwindow.cpp:259 po/rc.cpp:488 rc.cpp:488
+#: gui/mainwindow.cpp:267 po/rc.cpp:494 rc.cpp:494
msgid "Connect"
msgstr "连接"
-#: gui/mainwindow.cpp:260 gui/preferencesdialog.cpp:85
+#: gui/mainwindow.cpp:268 gui/preferencesdialog.cpp:84
msgid "Collection"
msgstr ""
-#: gui/mainwindow.cpp:261
+#: gui/mainwindow.cpp:269 gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1385
+#: gui/mainwindow.cpp:1391
msgid "Outputs"
msgstr "输出"
-#: gui/mainwindow.cpp:262 gui/stdactions.cpp:52
+#: gui/mainwindow.cpp:270 gui/stdactions.cpp:48
msgid "Stop After Track"
msgstr "音轨后停止"
-#: gui/mainwindow.cpp:263
+#: gui/mainwindow.cpp:280
msgid "Add To Stored Playlist"
msgstr "添加到已有列表"
-#: gui/mainwindow.cpp:264
+#: gui/mainwindow.cpp:281
msgid "Crop"
msgstr "裁减"
-#: gui/mainwindow.cpp:265
+#: gui/mainwindow.cpp:282
msgid "Add Stream URL"
msgstr "添加流媒体"
-#: gui/mainwindow.cpp:266
+#: gui/mainwindow.cpp:283
msgid "Clear"
msgstr "清除"
-#: gui/mainwindow.cpp:267
+#: gui/mainwindow.cpp:284
msgid "Center On Current Track"
msgstr ""
-#: gui/mainwindow.cpp:268
+#: gui/mainwindow.cpp:285
msgid "Expanded Interface"
msgstr "展开界面"
-#: gui/mainwindow.cpp:270
+#: gui/mainwindow.cpp:287
msgid "Show Current Song Information"
msgstr ""
-#: gui/mainwindow.cpp:273
+#: gui/mainwindow.cpp:290
msgid "Full Screen"
msgstr "全屏"
-#: gui/mainwindow.cpp:275
+#: gui/mainwindow.cpp:294
msgid "Random"
msgstr "随机"
-#: gui/mainwindow.cpp:276
+#: gui/mainwindow.cpp:295
msgid "Repeat"
msgstr "重复"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid "Single"
msgstr "单曲"
-#: gui/mainwindow.cpp:277
+#: gui/mainwindow.cpp:296
msgid ""
"When 'Single' is activated, playback is stopped after current song, or song "
"is repeated if 'Repeat' is enabled."
msgstr ""
"'单曲'启用时, 将在当前歌曲完成后停止播放. 或者 '重复'启用时, 将反复播放."
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid "Consume"
msgstr "省资源"
-#: gui/mainwindow.cpp:278
+#: gui/mainwindow.cpp:297
msgid ""
"When consume is activated, a song is removed from the play queue after it "
"has been played."
msgstr "当节省资源打开时,播放过的歌曲将被从队列中移除."
-#: gui/mainwindow.cpp:279
+#: gui/mainwindow.cpp:298
+msgid "Find in Play Queue"
+msgstr ""
+
+#: gui/mainwindow.cpp:301
msgid "Set Priority"
msgstr "设置优先级"
-#: gui/mainwindow.cpp:281
+#: gui/mainwindow.cpp:303
msgid "Play Stream"
msgstr "播放流媒体"
-#: gui/mainwindow.cpp:286 gui/searchpage.cpp:56
+#: gui/mainwindow.cpp:311 gui/searchpage.cpp:56
msgid "Locate In Library"
msgstr "在库中定位"
-#: gui/mainwindow.cpp:288
-msgid "Edit Song Tags"
-msgstr "编辑歌曲标签"
-
-#: gui/mainwindow.cpp:290
+#: gui/mainwindow.cpp:315
msgid "Expand All"
msgstr "展开所有"
-#: gui/mainwindow.cpp:292
+#: gui/mainwindow.cpp:317
msgid "Collapse All"
msgstr "收起所有"
-#: gui/mainwindow.cpp:294
+#: gui/mainwindow.cpp:319
msgid "Remove All Songs"
msgstr ""
-#: gui/mainwindow.cpp:301
+#: gui/mainwindow.cpp:326
msgid "Clear 'New' State Of Artists and Albums"
msgstr ""
-#: gui/mainwindow.cpp:391
+#: gui/mainwindow.cpp:410
msgid "Dynamic"
msgstr "动态"
-#: gui/mainwindow.cpp:402 gui/preferencesdialog.cpp:91
-#: widgets/groupedview.cpp:292
+#: gui/mainwindow.cpp:421 gui/preferencesdialog.cpp:90
+#: widgets/groupedview.cpp:298
msgid "Streams"
msgstr "流媒体"
-#: gui/mainwindow.cpp:412 gui/preferencesdialog.cpp:96
+#: gui/mainwindow.cpp:431 gui/preferencesdialog.cpp:95
msgid "Online"
msgstr "在线"
-#: gui/mainwindow.cpp:423
+#: gui/mainwindow.cpp:442
msgid "Devices"
msgstr "设备"
-#: gui/mainwindow.cpp:435
+#: gui/mainwindow.cpp:454
msgid "Info"
msgstr "信息"
-#: gui/mainwindow.cpp:578
+#: gui/mainwindow.cpp:607
msgid "Show Menubar"
msgstr ""
-#: gui/mainwindow.cpp:628
+#: gui/mainwindow.cpp:659
msgid "&Music"
msgstr ""
-#: gui/mainwindow.cpp:639
+#: gui/mainwindow.cpp:670
msgid "&Edit"
msgstr ""
-#: gui/mainwindow.cpp:655
+#: gui/mainwindow.cpp:687
msgid "&View"
msgstr ""
-#: gui/mainwindow.cpp:667
+#: gui/mainwindow.cpp:699
msgid "&Queue"
msgstr ""
-#: gui/mainwindow.cpp:680
+#: gui/mainwindow.cpp:711
msgid "&Settings"
msgstr "设置(&S)"
-#: gui/mainwindow.cpp:694 support/dialog.cpp:89
+#: gui/mainwindow.cpp:728 support/dialog.cpp:158
msgid "&Help"
msgstr "帮助(&H)"
-#: gui/mainwindow.cpp:983
+#: gui/mainwindow.cpp:756
+msgid "Set Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:761
+msgid "No Rating"
+msgstr ""
+
+#: gui/mainwindow.cpp:1032
msgid "Failed to locate any songs matching the dynamic playlist rules."
msgstr "无法给歌曲匹配动态设置."
-#: gui/mainwindow.cpp:1091 mpd/mpdconnection.cpp:457
+#: gui/mainwindow.cpp:1151 mpd/mpdconnection.cpp:498
msgid "Connecting to %1"
msgstr "连接到 %1"
-#: gui/mainwindow.cpp:1123
+#: gui/mainwindow.cpp:1185
msgid "Refresh MPD Database?"
msgstr ""
-#: gui/mainwindow.cpp:1143
+#: gui/mainwindow.cpp:1211
msgctxt "Qt-only"
msgid "About Cantata"
msgstr "关于 Cantata"
-#: gui/mainwindow.cpp:1144
+#: gui/mainwindow.cpp:1212
msgctxt "Qt-only"
msgid ""
"<b>Cantata %1</b><br/><br/>MPD client.<br/><br/>© 2011-2014 Craig "
@@ -2402,44 +2383,56 @@ msgid ""
"html\">GPLv3</a>"
msgstr ""
-#: gui/mainwindow.cpp:1146
+#: gui/mainwindow.cpp:1214
msgid ""
"Based upon <a href=\"http://qtmpc.lowblog.nl\">QtMPC</a> - © 2007-2010 "
"The QtMPC Authors<br/>"
msgstr ""
-#: gui/mainwindow.cpp:1147
+#: gui/mainwindow.cpp:1215
msgctxt "Qt-only"
msgid ""
"Context view backdrops courtesy of <a href=\"http://www.fanart.tv\">FanArt."
"tv</a>"
msgstr ""
-#: gui/mainwindow.cpp:1148
+#: gui/mainwindow.cpp:1216
msgctxt "Qt-only"
msgid ""
"Context view metadata courtesy of <a href=\"http://www.wikipedia.org"
"\">Wikipedia</a> and <a href=\"http://www.last.fm\">Last.fm</a>"
msgstr ""
-#: gui/mainwindow.cpp:1149
+#: gui/mainwindow.cpp:1217
msgid ""
"Please consider uploading your own music fan-art to <a href=\"http://www."
"fanart.tv\">FanArt.tv</a>"
msgstr ""
-#: gui/mainwindow.cpp:1204
+#: gui/mainwindow.cpp:1226
msgid ""
-"Podcasts are currently being downloaded\n"
+"A Podcast is currently being downloaded\n"
"\n"
-"Quiting now will abort all downloads."
+"Quiting now will abort the download."
msgstr ""
-#: gui/mainwindow.cpp:1205
-msgid "Abort downloads and quit"
+#: gui/mainwindow.cpp:1227
+msgid "Abort download and quit"
msgstr ""
-#: gui/mainwindow.cpp:1521
+#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392
+msgid "Enabled: %1"
+msgstr ""
+
+#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393
+msgid "Disabled: %1"
+msgstr ""
+
+#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628
+msgid "Server Information"
+msgstr "服务器信息"
+
+#: gui/mainwindow.cpp:1608
msgid ""
"<tr><td colspan=\"2\"><b>Server</b></td></tr><tr><td align=\"right"
"\">Protocol: </td><td>%1.%2.%3</td></tr><tr><td align=\"right\">Uptime:"
@@ -2448,7 +2441,7 @@ msgid ""
"tr><tr><td align=\"right\">Tags: </td><td>%7</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1532
+#: gui/mainwindow.cpp:1619
msgid ""
"<tr><td colspan=\"2\"><b>Database</b></td></tr><tr><td align=\"right"
"\">Artists: </td><td>%1</td></tr><tr><td align=\"right\">Albums: </"
@@ -2457,104 +2450,124 @@ msgid ""
"\"right\">Updated: </td><td>%5</td></tr>"
msgstr ""
-#: gui/mainwindow.cpp:1541
-msgid "Server Information"
-msgstr "服务器信息"
-
-#: gui/mainwindow.cpp:1728
+#: gui/mainwindow.cpp:1767
msgid "Cantata (%1)"
msgstr ""
-#: gui/mainwindow.cpp:1810 mpd/mpdconnection.cpp:598 mpd/mpdconnection.cpp:605
+#: gui/mainwindow.cpp:1844 mpd/mpdconnection.cpp:652 mpd/mpdconnection.cpp:659
msgid "MPD reported the following error: %1"
msgstr ""
-#: gui/mainwindow.cpp:1883
+#: gui/mainwindow.cpp:1914
msgid "Playback stopped"
msgstr ""
-#: gui/mainwindow.cpp:1924
+#: gui/mainwindow.cpp:1963
msgid "Remove all songs from play queue?"
msgstr ""
-#: gui/mainwindow.cpp:1983 models/playqueuemodel.cpp:175
+#: gui/mainwindow.cpp:2023 models/playqueuemodel.cpp:175
msgid "Priority"
msgstr "优先级"
-#: gui/mainwindow.cpp:1983
+#: gui/mainwindow.cpp:2023
msgid "Enter priority (0..255):"
msgstr "输入优先级 (0到255)"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Playlist Name"
msgstr "播放列表名称"
-#: gui/mainwindow.cpp:2006 gui/playlistspage.cpp:242
+#: gui/mainwindow.cpp:2046 gui/playlistspage.cpp:241
msgid "Enter a name for the playlist:"
msgstr "输入播放列表名称:"
-#: gui/mainwindow.cpp:2009
-msgid ""
-"<b>%1</b> is used to store favorite streams, please choose another name."
+#: gui/mainwindow.cpp:2049
+msgid "'%1' is used to store favorite streams, please choose another name."
msgstr ""
-#: gui/mainwindow.cpp:2013
-msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
-msgstr "已经有名为 <b>%1</b>的播放列表!<br/>添加到它吗?"
+#: gui/mainwindow.cpp:2053
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Add to that playlist?"
+msgstr ""
-#: gui/mainwindow.cpp:2014
+#: gui/mainwindow.cpp:2054
msgid "Existing Playlist"
msgstr "已有同名播放列表"
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Stream URL"
msgstr ""
-#: gui/mainwindow.cpp:2066
+#: gui/mainwindow.cpp:2106
msgid "Enter URL of stream:"
msgstr ""
-#: gui/mainwindow.cpp:2069
+#: gui/mainwindow.cpp:2109
msgid "Invalid, or unsupported, URL!"
msgstr ""
-#: gui/mainwindow.cpp:2371
-msgid "Can only edit tags of songs within MPD's music collection."
-msgstr ""
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#. i18n: file: context/othersettings.ui:32
+#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_none)
+#. i18n: file: gui/interfacesettings.ui:435
+#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_none)
+#. i18n: file: gui/playbacksettings.ui:51
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, stopFadeDuration)
+#. i18n: file: gui/playbacksettings.ui:122
+#. i18n: ectx: property (specialValueText), widget (QSpinBox, crossfading)
+#. i18n: file: support/shortcutssettingswidget.ui:78
+#. i18n: ectx: property (text), widget (QLabel, defaultShortcut)
+#: gui/playbacksettings.cpp:47 online/magnatuneservice.cpp:164 po/rc.cpp:6
+#: po/rc.cpp:653 po/rc.cpp:785 po/rc.cpp:809 po/rc.cpp:984 rc.cpp:6 rc.cpp:653
+#: rc.cpp:785 rc.cpp:809 rc.cpp:984
+msgid "None"
+msgstr "无"
-#: gui/playbacksettings.cpp:49
+#: gui/playbacksettings.cpp:50
msgid "Auto"
msgstr ""
-#: gui/playbacksettings.cpp:159
+#: gui/playbacksettings.cpp:164
msgid ""
"<i>Connected to %1<br/>The entries below apply to the currently connected "
"MPD collection.</i>"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:110
+#. i18n: file: gui/playbacksettings.ui:88
#. i18n: ectx: property (text), widget (QLabel, messageLabel)
-#: gui/playbacksettings.cpp:162 po/rc.cpp:786 rc.cpp:786
+#: gui/playbacksettings.cpp:167 po/rc.cpp:800 rc.cpp:800
msgid ""
"<i>Not Connected!<br/>The entries below cannot be modified, as Cantata is "
"not connected to MPD.</i>"
msgstr ""
-#: gui/playbacksettings.cpp:169
+#: gui/playbacksettings.cpp:174
msgid ""
-"<p>Replay Gain is a proposed standard published in 2001 to normalize the "
+"Replay Gain is a proposed standard published in 2001 to normalize the "
"perceived loudness of computer audio formats such as MP3 and Ogg Vorbis. It "
"works on a track/album basis, and is now supported in a growing number of "
-"players.</p><p>The following ReplayGain settings may be used:"
+"players.<br/><br/>The following ReplayGain settings may be used:"
"<ul><li><i>None</i> - No ReplayGain is applied.</li><li><i>Track</i> - "
"Volume will be adjusted using the track's ReplayGain tags.</li><li><i>Album</"
"i> - Volume will be adjusted using the albums's ReplayGain tags.</"
"li><li><i>Auto</i> - Volume will be adjusted using the track's ReplayGain "
"tags if random play is activated, otherwise the album's tags will be used.</"
-"li></ul></p>"
+"li></ul>"
msgstr ""
-#: gui/playlistspage.cpp:59 tags/tageditor.cpp:909 tags/trackorganiser.cpp:75
+#: gui/playlistspage.cpp:59 tags/tageditor.cpp:1185 tags/trackorganiser.cpp:75
msgid "Rename"
msgstr "重命名"
@@ -2562,35 +2575,37 @@ msgstr "重命名"
msgid "Remove Duplicates"
msgstr ""
-#: gui/playlistspage.cpp:225
+#: gui/playlistspage.cpp:224
msgid ""
"Are you sure you wish to remove the selected playlists?\n"
+"\n"
"This cannot be undone."
msgstr ""
-"确定删除选择的列表?\n"
-"操作将无法恢复。"
-#: gui/playlistspage.cpp:226
+#: gui/playlistspage.cpp:225
msgid "Remove Playlists"
msgstr ""
-#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
-msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
-msgstr "已经有名为 <b>%1</b>的播放列表!<br/><br/>覆盖吗?"
+#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272
+msgid ""
+"A playlist named '%1' already exists!\n"
+"\n"
+"Overwrite?"
+msgstr ""
-#: gui/playlistspage.cpp:247 gui/playlistspage.cpp:274
+#: gui/playlistspage.cpp:246 gui/playlistspage.cpp:273
msgid "Overwrite Playlist"
msgstr ""
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Rename Playlist"
msgstr "重命名播放列表"
-#: gui/playlistspage.cpp:269
+#: gui/playlistspage.cpp:268
msgid "Enter new name for playlist:"
msgstr "输入播放列表新名称:"
-#: gui/playlistspage.cpp:361
+#: gui/playlistspage.cpp:360
msgid "Cannot add songs from '%1' to '%2'"
msgstr ""
@@ -2644,113 +2659,117 @@ msgid "1 Update available"
msgid_plural "%1 Updates available"
msgstr[0] ""
-#: gui/preferencesdialog.cpp:85
+#: gui/preferencesdialog.cpp:84
msgid "Collection Settings"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:29
#. i18n: ectx: property (title), widget (QGroupBox, stopPlaybackBox)
-#: gui/preferencesdialog.cpp:86 po/rc.cpp:762 rc.cpp:762
+#: gui/preferencesdialog.cpp:85 po/rc.cpp:776 rc.cpp:776
msgid "Playback"
msgstr "回放"
-#: gui/preferencesdialog.cpp:86
+#: gui/preferencesdialog.cpp:85
msgid "Playback Settings"
msgstr "回放设置"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "Files"
msgstr "文件"
-#: gui/preferencesdialog.cpp:87
+#: gui/preferencesdialog.cpp:86
msgid "File Settings"
msgstr "设置"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface"
msgstr "界面"
-#: gui/preferencesdialog.cpp:88
+#: gui/preferencesdialog.cpp:87
msgid "Interface Settings"
msgstr "界面设置"
-#: gui/preferencesdialog.cpp:91
+#: gui/preferencesdialog.cpp:90
msgid "Streams Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:96
+#: gui/preferencesdialog.cpp:95
msgid "Online Providers"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context"
msgstr ""
-#: gui/preferencesdialog.cpp:99
+#: gui/preferencesdialog.cpp:98
msgid "Context View Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling"
msgstr ""
-#: gui/preferencesdialog.cpp:100
+#: gui/preferencesdialog.cpp:99
msgid "Scrobbling Settings"
msgstr ""
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server"
msgstr "HTTP 服务器"
-#: gui/preferencesdialog.cpp:109
+#: gui/preferencesdialog.cpp:108
msgid "HTTP Server Settings"
msgstr "HTTP 服务器设置"
-#: gui/preferencesdialog.cpp:118
+#: gui/preferencesdialog.cpp:117
msgid "Audio CD Settings"
msgstr "音乐 CD 设置"
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgid "Proxy"
msgstr ""
-#: gui/preferencesdialog.cpp:123
+#: gui/preferencesdialog.cpp:122
msgctxt "Qt-only"
msgid "Proxy Settings"
msgstr "代理设置"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Shortcuts"
msgstr "快捷"
-#: gui/preferencesdialog.cpp:127
+#: gui/preferencesdialog.cpp:126
msgctxt "Qt-only"
msgid "Keyboard Shortcut Settings"
msgstr "快捷键设定"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cache"
msgstr "缓存"
-#: gui/preferencesdialog.cpp:130
+#: gui/preferencesdialog.cpp:129
msgid "Cached Items"
msgstr "缓存项目"
+#: gui/preferencesdialog.cpp:131
+msgid "Cantata Preferences"
+msgstr ""
+
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
#. i18n: file: devices/actiondialog.ui:67
#. i18n: ectx: property (toolTip), widget (QToolButton, configureSourceButton)
#. i18n: file: devices/actiondialog.ui:120
#. i18n: ectx: property (toolTip), widget (QToolButton, configureDestButton)
#. i18n: file: gui/coverdialog.ui:37
-#. i18n: ectx: property (toolTip), widget (QToolButton, configureButton)
-#: gui/preferencesdialog.cpp:131 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:422
-#: rc.cpp:65 rc.cpp:74 rc.cpp:422
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, configureButton)
+#: gui/preferencesdialog.cpp:133 po/rc.cpp:65 po/rc.cpp:74 po/rc.cpp:428
+#: rc.cpp:65 rc.cpp:74 rc.cpp:428
msgid "Configure"
msgstr "设置"
@@ -2758,387 +2777,376 @@ msgstr "设置"
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
#. i18n: file: devices/albumdetails.ui:50
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
#. i18n: file: dynamic/dynamicrule.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, composerLabel)
-#. i18n: file: tags/tageditor.ui:77
+#. i18n: file: tags/tageditor.ui:93
#. i18n: ectx: property (text), widget (StateLabel, composerLabel)
-#: gui/searchpage.cpp:231 po/rc.cpp:98 po/rc.cpp:380 po/rc.cpp:986 rc.cpp:98
-#: rc.cpp:380 rc.cpp:986
+#: gui/searchpage.cpp:229 po/rc.cpp:98 po/rc.cpp:386 po/rc.cpp:1002 rc.cpp:98
+#: rc.cpp:386 rc.cpp:1002
msgid "Composer:"
msgstr ""
-#: gui/searchpage.cpp:234
+#: gui/searchpage.cpp:232
msgid "Performer:"
msgstr ""
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
#. i18n: file: devices/albumdetails.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: tags/tageditor.ui:129
+#. i18n: file: tags/tageditor.ui:145
#. i18n: ectx: property (text), widget (StateLabel, genreLabel)
-#: gui/searchpage.cpp:238 po/rc.cpp:104 po/rc.cpp:998 rc.cpp:104 rc.cpp:998
+#: gui/searchpage.cpp:236 po/rc.cpp:104 po/rc.cpp:1014 rc.cpp:104 rc.cpp:1014
msgid "Genre:"
msgstr "流派:"
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
#. i18n: file: dynamic/dynamicrule.ui:187
#. i18n: ectx: property (text), widget (BuddyLabel, commentLabel)
-#. i18n: file: tags/tageditor.ui:155
+#. i18n: file: tags/tageditor.ui:195
#. i18n: ectx: property (text), widget (StateLabel, commentLabel)
-#: gui/searchpage.cpp:240 po/rc.cpp:404 po/rc.cpp:1004 rc.cpp:404 rc.cpp:1004
+#: gui/searchpage.cpp:238 po/rc.cpp:410 po/rc.cpp:1026 rc.cpp:410 rc.cpp:1026
msgid "Comment:"
msgstr ""
-#: gui/searchpage.cpp:242
+#: gui/searchpage.cpp:240
msgid "Date:"
msgstr ""
-#: gui/searchpage.cpp:244
+#: gui/searchpage.cpp:242
+msgid "Modified:"
+msgstr ""
+
+#: gui/searchpage.cpp:245
msgid "Any:"
msgstr ""
-#: gui/searchpage.cpp:250
+#: gui/searchpage.cpp:251
msgid "No tracks found."
msgstr ""
-#: gui/serversettings.cpp:87
+#: gui/serversettings.cpp:86
msgid ""
"<i> This folder will also be used to locate music files for transferring to "
"(and from) devices.</i>"
msgstr "<i> 文件夹将被用于和设备传送音乐.</i>"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:78
+#. i18n: file: devices/remotedevicepropertieswidget.ui:72
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:301
+#. i18n: file: devices/remotedevicepropertieswidget.ui:289
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: network/proxysettings.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, proxyHostLabel)
-#: gui/serversettings.cpp:101 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:875
-#: rc.cpp:281 rc.cpp:320 rc.cpp:875
+#: gui/serversettings.cpp:100 po/rc.cpp:281 po/rc.cpp:320 po/rc.cpp:891
+#: rc.cpp:281 rc.cpp:320 rc.cpp:891
msgid "Host:"
msgstr "主机名:"
-#: gui/serversettings.cpp:234
+#: gui/serversettings.cpp:239
+msgid "Which type of collection do you wish to connect to?"
+msgstr ""
+
+#: gui/serversettings.cpp:240
msgid ""
-"Which type of collection do you wish to connect to?<br/><ul><li>Standard - "
-"music collection may be shared, is on another machine, or is already setup</"
-"li><li>Basic - music collection is not shared with others, and Cantata will "
-"configure and control the MPD instance</li></ul>"
+"Standard - music collection may be shared, is on another machine, or is "
+"already setup"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:241
+msgid ""
+"Basic - music collection is not shared with others, and Cantata will "
+"configure and control the MPD instance"
+msgstr ""
+
+#: gui/serversettings.cpp:242
msgid "Add Collection"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Standard"
msgstr ""
-#: gui/serversettings.cpp:237
+#: gui/serversettings.cpp:242
msgid "Basic"
msgstr ""
-#: gui/serversettings.cpp:278
-msgid "Delete <b>%1</b>?"
+#: gui/serversettings.cpp:283
+msgid "Delete '%1'?"
msgstr ""
-#: gui/serversettings.cpp:279
+#: gui/serversettings.cpp:284
msgid "Delete"
msgstr ""
-#: gui/serversettings.cpp:317
+#: gui/serversettings.cpp:322
msgid "New Collection %1"
msgstr ""
-#: gui/serversettings.cpp:333 mpd/mpdconnection.cpp:182
-#: mpd/mpdconnection.cpp:184
+#: gui/serversettings.cpp:338 mpd/mpdconnection.cpp:203
+#: mpd/mpdconnection.cpp:205
msgid "Default"
msgstr "默认"
-#: gui/shortcutssettingspage.cpp:76
-msgid "Multi-Media Keys"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:82
-msgid "Do not use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:83 gui/shortcutssettingspage.cpp:98
-msgid "Use media keys to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:86 gui/shortcutssettingspage.cpp:106
-msgid "Use media keys, as configured in desktop settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:87 gui/shortcutssettingspage.cpp:107
-msgid ""
-"Use media keys, as configured in GNOME/Unity settings, to control Cantata"
-msgstr ""
-
-#: gui/shortcutssettingspage.cpp:90 gui/shortcutssettingspage.cpp:109
-#: online/onlineservicespage.cpp:96 streams/streamspage.cpp:99
-#: support/fancytabwidget.cpp:665
-msgid "Configure..."
-msgstr ""
-
-#: gui/stdactions.cpp:47
+#: gui/stdactions.cpp:43
msgid "Previous Track"
msgstr "上一个"
-#: gui/stdactions.cpp:48
+#: gui/stdactions.cpp:44
msgid "Next Track"
msgstr "下一个"
-#: gui/stdactions.cpp:49
+#: gui/stdactions.cpp:45
msgid "Play/Pause"
msgstr "播放/暂停"
-#: gui/stdactions.cpp:51
+#: gui/stdactions.cpp:47
msgid "Stop After Current Track"
msgstr "当前音轨后停止"
-#: gui/stdactions.cpp:53
+#: gui/stdactions.cpp:49
msgid "Increase Volume"
msgstr "增大音量"
-#: gui/stdactions.cpp:54
+#: gui/stdactions.cpp:50
msgid "Decrease Volume"
msgstr "减小音量"
-#: gui/stdactions.cpp:55
+#: gui/stdactions.cpp:51
msgid "Save As"
msgstr "另存为"
-#: gui/stdactions.cpp:56
+#: gui/stdactions.cpp:52
msgid "Add To Play Queue"
msgstr "添加到正在播放"
-#: gui/stdactions.cpp:57
-msgid "Add Albums In Random Order"
-msgstr ""
-
-#: gui/stdactions.cpp:58
+#: gui/stdactions.cpp:53
msgid "Replace Play Queue"
msgstr "替换播放队列"
-#: gui/stdactions.cpp:59
+#: gui/stdactions.cpp:54
msgid "Add With Priority"
msgstr "添加时设定优先级"
-#: gui/stdactions.cpp:60
+#: gui/stdactions.cpp:55
msgid "Highest Priority (255)"
msgstr "最高优先级 (255)"
-#: gui/stdactions.cpp:61
+#: gui/stdactions.cpp:56
msgid "High Priority (200)"
msgstr "高优先级 (200)"
-#: gui/stdactions.cpp:62
+#: gui/stdactions.cpp:57
msgid "Medium Priority (125)"
msgstr "中等优先级 (125)"
-#: gui/stdactions.cpp:63
+#: gui/stdactions.cpp:58
msgid "Low Priority (50)"
msgstr "低优先级 (50)"
-#: gui/stdactions.cpp:64
+#: gui/stdactions.cpp:59
msgid "Default Priority (0)"
msgstr "默认优先级 (0)"
-#: gui/stdactions.cpp:65
+#: gui/stdactions.cpp:60
msgid "Custom Priority..."
msgstr "自定义优先级..."
-#: gui/stdactions.cpp:66
+#: gui/stdactions.cpp:61
msgid "Add To Playlist"
msgstr "添加到播放列表"
-#: gui/stdactions.cpp:68 tags/trackorganiser.cpp:69
+#: gui/stdactions.cpp:63 tags/trackorganiser.cpp:69
msgid "Organize Files"
msgstr "组织文件"
-#: gui/stdactions.cpp:69
-msgid "Edit Tags"
-msgstr "编辑标签"
-
-#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85
-msgid "ReplayGain"
-msgstr "播放增益"
+#: gui/stdactions.cpp:64
+msgid "Edit Track Information"
+msgstr ""
-#: gui/stdactions.cpp:75
+#: gui/stdactions.cpp:70
msgid "Copy Songs To Device"
msgstr ""
-#: gui/stdactions.cpp:79
+#: gui/stdactions.cpp:74
msgid "Set Image"
msgstr ""
-#: gui/stdactions.cpp:81
+#: gui/stdactions.cpp:76
msgid "Find"
msgstr ""
-#: gui/trayitem.cpp:221
+#: gui/trayitem.cpp:232 gui/trayitem.cpp:258 gui/trayitem.cpp:269
msgid "Now playing"
msgstr "正在播放"
-#: http/httpserversettings.cpp:48
+#: http/httpserversettings.cpp:71
msgid "Local loopback (%1)"
msgstr ""
-#: http/httpserversettings.cpp:51
+#: http/httpserversettings.cpp:74
msgid "Wired (%1)"
msgstr ""
-#: http/httpserversettings.cpp:54
+#: http/httpserversettings.cpp:77
msgid "Wireless (%1)"
msgstr ""
-#: http/httpserversettings.cpp:61
+#: http/httpserversettings.cpp:84
msgid "First active interface"
msgstr ""
-#: models/albumsmodel.cpp:283 models/musicmodel.cpp:244
+#: mac/dockmenu.cpp:34 mac/dockmenu.cpp:44
+msgid "Play"
+msgstr ""
+
+#: mac/dockmenu.cpp:44
+msgid "Pause"
+msgstr ""
+
+#: models/albumsmodel.cpp:212 models/musicmodel.cpp:230
msgctxt "Album by Artist"
msgid "%1 by %2"
msgstr "%2 的 %1"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:218
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:221
+#: models/musicmodel.cpp:131
msgid "Cue Sheet"
msgstr "Cue 表"
-#: models/albumsmodel.cpp:309 models/dirviewmodel.cpp:217
-#: models/musicmodel.cpp:140
+#: models/albumsmodel.cpp:243 models/dirviewmodel.cpp:220
+#: models/musicmodel.cpp:131
msgid "Playlist"
msgstr "播放列表"
-#: models/devicesmodel.cpp:99
+#: models/devicesmodel.cpp:105
msgid "Configure Device"
msgstr "设置设备"
-#: models/devicesmodel.cpp:100
+#: models/devicesmodel.cpp:106
msgid "Refresh Device"
msgstr "刷新设备"
-#: models/devicesmodel.cpp:101
+#: models/devicesmodel.cpp:107
msgid "Connect Device"
msgstr "连接设备"
-#: models/devicesmodel.cpp:102
+#: models/devicesmodel.cpp:108
msgid "Disconnect Device"
msgstr "断开设备"
-#: models/devicesmodel.cpp:104
+#: models/devicesmodel.cpp:110
msgid "Edit CD Details"
msgstr "编辑 CD 详细信息"
-#: models/devicesmodel.cpp:716
+#: models/devicesmodel.cpp:718
msgid "No Devices Attached"
msgstr "没有关联设备"
-#: models/digitallyimported.cpp:97
+#: models/digitallyimported.cpp:101
msgid "Not logged in"
msgstr ""
-#: models/digitallyimported.cpp:106
+#: models/digitallyimported.cpp:110
msgid "Logged in"
msgstr ""
-#: models/digitallyimported.cpp:168
+#: models/digitallyimported.cpp:171
msgid "No subscriptions"
msgstr ""
-#: models/digitallyimported.cpp:175
+#: models/digitallyimported.cpp:178
msgid "You do not have an active subscription"
msgstr ""
-#: models/digitallyimported.cpp:194
+#: models/digitallyimported.cpp:197
msgid "Logged in (expiry:%1)"
msgstr ""
-#: models/digitallyimported.cpp:202
+#: models/digitallyimported.cpp:205
msgid "Session expired"
msgstr ""
-#: models/dirviewmodel.cpp:216
+#: models/dirviewmodel.cpp:219
msgid "Audio File"
msgstr "音频文件"
-#: models/musiclibraryitemartist.cpp:213 models/musiclibraryitemartist.cpp:226
-#: models/musiclibraryitemroot.cpp:764
+#: models/musiclibraryitemartist.cpp:144 models/musiclibraryitemartist.cpp:157
+#: models/musiclibraryitemroot.cpp:773
msgid "Single Tracks"
msgstr "单个音轨"
#. i18n: file: online/onlinesettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: models/onlineservicesmodel.cpp:76 po/rc.cpp:890 rc.cpp:890
+#: models/onlineservicesmodel.cpp:75 po/rc.cpp:906 rc.cpp:906
msgid "Configure Service"
msgstr ""
-#: models/onlineservicesmodel.cpp:77
+#: models/onlineservicesmodel.cpp:76
msgid "Refresh Service"
msgstr ""
-#: models/onlineservicesmodel.cpp:78
+#: models/onlineservicesmodel.cpp:77
msgid "Add Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:79
+#: models/onlineservicesmodel.cpp:78
msgid "Remove Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:80
+#: models/onlineservicesmodel.cpp:79
msgid "Refresh Subscription"
msgstr ""
-#: models/onlineservicesmodel.cpp:148
+#: models/onlineservicesmodel.cpp:146
msgid "Last Search:%1"
msgstr ""
-#: models/onlineservicesmodel.cpp:163 models/streamsearchmodel.cpp:120
-#: models/streamsmodel.cpp:666
+#: models/onlineservicesmodel.cpp:161 models/streamsearchmodel.cpp:124
+#: models/streamsmodel.cpp:673
msgid "Not Loaded"
msgstr "未加载"
-#: models/onlineservicesmodel.cpp:166
+#: models/onlineservicesmodel.cpp:164
msgid "Use search to locate tracks"
msgstr ""
-#: models/onlineservicesmodel.cpp:180
+#: models/onlineservicesmodel.cpp:178
msgid "(Downloading: %1%)"
msgstr ""
-#: models/onlineservicesmodel.cpp:238
+#: models/onlineservicesmodel.cpp:180
+msgid "(Download Queued)"
+msgstr ""
+
+#: models/onlineservicesmodel.cpp:245
msgctxt "podcast name (num unplayed episodes)"
msgid "%1 (%2)"
msgstr ""
-#: models/playlistsmodel.cpp:98
+#: models/playlistsmodel.cpp:101
msgid "New Playlist..."
msgstr "新播放列表..."
-#: models/playlistsmodel.cpp:346
+#: models/playlistsmodel.cpp:356
msgid "Smart Playlist"
msgstr ""
-#: models/playqueuemodel.cpp:171
+#: models/playqueuemodel.cpp:171 mpd/song.cpp:534
msgid "Length"
msgstr "长度"
@@ -3146,6 +3154,10 @@ msgstr "长度"
msgid "Disc"
msgstr "碟片"
+#: models/playqueuemodel.cpp:178
+msgid "Rating"
+msgstr ""
+
#: models/playqueuemodel.cpp:241
msgid "Undo"
msgstr ""
@@ -3168,111 +3180,107 @@ msgstr ""
msgid "Album Artist"
msgstr "专辑艺术家"
-#: models/playqueuemodel.cpp:583
-msgid "<b>(Priority: %1)</b>"
-msgstr "<b>(属性: %1)</b>"
-
-#: models/streamsearchmodel.cpp:122 models/streamsmodel.cpp:668
+#: models/streamsearchmodel.cpp:126 models/streamsmodel.cpp:675
msgid "Loading..."
msgstr ""
-#: models/streamsmodel.cpp:252
+#: models/streamsmodel.cpp:254
msgid "Bookmarks"
msgstr ""
-#: models/streamsmodel.cpp:536
+#: models/streamsmodel.cpp:538
msgid "TuneIn"
msgstr ""
-#: models/streamsmodel.cpp:539
+#: models/streamsmodel.cpp:541
msgid "IceCast"
msgstr ""
-#: models/streamsmodel.cpp:540
+#: models/streamsmodel.cpp:542
msgid "ShoutCast"
msgstr ""
-#: models/streamsmodel.cpp:543
+#: models/streamsmodel.cpp:545
msgid "Dirble"
msgstr ""
-#: models/streamsmodel.cpp:546
+#: models/streamsmodel.cpp:548
msgid "Favorites"
msgstr ""
-#: models/streamsmodel.cpp:549
+#: models/streamsmodel.cpp:551
msgid "Bookmark Category"
msgstr ""
-#: models/streamsmodel.cpp:550
+#: models/streamsmodel.cpp:552
msgid "Add Stream To Favorites"
msgstr ""
-#: models/streamsmodel.cpp:551
+#: models/streamsmodel.cpp:553
msgid "Configure Streams"
msgstr ""
-#: mpd/mpdconnection.cpp:159
-msgid "Uknown"
+#: mpd/mpdconnection.cpp:170 mpd/song.cpp:61 support/utils.cpp:647
+msgid "Unknown"
msgstr "未知"
-#: mpd/mpdconnection.cpp:191
+#: mpd/mpdconnection.cpp:212
msgctxt "name (host)"
msgid "\"%1\""
msgstr ""
-#: mpd/mpdconnection.cpp:193
+#: mpd/mpdconnection.cpp:214
msgctxt "name (host:port)"
msgid "\"%1\" (%2:%3)"
msgstr ""
-#: mpd/mpdconnection.cpp:372
+#: mpd/mpdconnection.cpp:411
msgid "Connection to %1 failed"
msgstr "连接 %1 失败"
-#: mpd/mpdconnection.cpp:373
+#: mpd/mpdconnection.cpp:412
msgid "Connection to %1 failed - please check your proxy settings"
msgstr ""
-#: mpd/mpdconnection.cpp:374
+#: mpd/mpdconnection.cpp:413
msgid "Connection to %1 failed - incorrect password"
msgstr "连接 %1 失败 - 密码错误"
-#: mpd/mpdconnection.cpp:544
+#: mpd/mpdconnection.cpp:591
msgid "Failed to send command to %1 - not connected"
msgstr "发送到 %1 失败 - 未能连接"
-#: mpd/mpdconnection.cpp:594
+#: mpd/mpdconnection.cpp:648
msgid "Failed to load. Please check user \"mpd\" has read permission."
msgstr "无法加载. 请检查 \"mpd\" 是否有读取权限."
-#: mpd/mpdconnection.cpp:596
+#: mpd/mpdconnection.cpp:650
msgid ""
"Failed to load. MPD can only play local files if connected via a local "
"socket."
msgstr "无法加载. MPD 只能从本地 Socket 播放本地文件."
-#: mpd/mpdconnection.cpp:602 mpd/mpdconnection.cpp:613
+#: mpd/mpdconnection.cpp:656 mpd/mpdconnection.cpp:667
msgid "Failed to send command. Disconnected from %1"
msgstr "发送失败. %1 已断开"
-#: mpd/mpdconnection.cpp:1398
+#: mpd/mpdconnection.cpp:1522
msgid "Failed to rename <b>%1</b> to <b>%2</b>"
msgstr "<b>%1</b> 重命名为 <b>%2</b> 失败"
-#: mpd/mpdconnection.cpp:1410
+#: mpd/mpdconnection.cpp:1534
msgid "Failed to save <b>%1</b>"
msgstr "<b>%1</b> 保存失败"
-#: mpd/mpdconnection.cpp:1423
+#: mpd/mpdconnection.cpp:1547
msgid "You cannot add parts of a cue sheet to a playlist!"
msgstr ""
-#: mpd/mpdconnection.cpp:1426
+#: mpd/mpdconnection.cpp:1550
msgid "You cannot add a playlist to another playlist!"
msgstr ""
-#: mpd/mpdconnection.cpp:1574
+#: mpd/mpdconnection.cpp:1727
msgid "Failed to send '%1' to %2. Please check %2 is registered with MPD."
msgstr ""
@@ -3280,15 +3288,11 @@ msgstr ""
msgid "Personal"
msgstr ""
-#: mpd/song.cpp:58 support/utils.cpp:620
-msgid "Unknown"
-msgstr "未知"
-
-#: mpd/song.cpp:59
+#: mpd/song.cpp:62
msgid "Various Artists"
msgstr "多个艺术家"
-#: mpd/song.cpp:436
+#: mpd/song.cpp:445
msgctxt ""
"Song\n"
"Artist\n"
@@ -3302,12 +3306,12 @@ msgstr ""
"%2\n"
"%3"
-#: mpd/song.cpp:601
+#: mpd/song.cpp:683
msgctxt "Song on Album"
msgid "<b>%1</b> on <b>%2</b>"
msgstr ""
-#: mpd/song.cpp:602
+#: mpd/song.cpp:684
msgctxt "Song by Artist on Album"
msgid "<b>%1</b> by <b>%2</b> on <b>%3</b>"
msgstr ""
@@ -3340,19 +3344,19 @@ msgstr ""
msgid "Streaming format:"
msgstr "流媒体格式:"
-#: online/magnatuneservice.cpp:164
+#: online/magnatuneservice.cpp:165
msgid "Streaming"
msgstr "流媒体"
-#: online/magnatuneservice.cpp:183
+#: online/magnatuneservice.cpp:184
msgid "MP3 128k"
msgstr ""
-#: online/magnatuneservice.cpp:184
+#: online/magnatuneservice.cpp:185
msgid "MP3 VBR"
msgstr ""
-#: online/magnatuneservice.cpp:187
+#: online/magnatuneservice.cpp:188
msgid "WAV"
msgstr ""
@@ -3362,85 +3366,85 @@ msgstr "Magnatune 设置"
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
#. i18n: file: network/proxysettings.ui:96
#. i18n: ectx: property (text), widget (BuddyLabel, proxyUsernameLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:42
+#. i18n: file: scrobbling/scrobblingsettings.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:48
+#. i18n: file: streams/digitallyimportedsettings.ui:51
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:881 po/rc.cpp:896
-#: po/rc.cpp:920 rc.cpp:881 rc.cpp:896 rc.cpp:920
+#: online/magnatunesettingsdialog.cpp:43 po/rc.cpp:897 po/rc.cpp:912
+#: po/rc.cpp:936 rc.cpp:897 rc.cpp:912 rc.cpp:936
msgid "Username:"
msgstr "用户名:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:134
+#. i18n: file: devices/remotedevicepropertieswidget.ui:128
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:237
+#. i18n: file: devices/remotedevicepropertieswidget.ui:225
#. i18n: ectx: property (text), widget (BuddyLabel, label_3x)
-#. i18n: file: gui/initialsettingswizard.ui:420
+#. i18n: file: gui/initialsettingswizard.ui:423
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: gui/serversettings.ui:112
#. i18n: ectx: property (text), widget (BuddyLabel, passwordLabel)
#. i18n: file: network/proxysettings.ui:109
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPasswordLabel)
-#. i18n: file: scrobbling/scrobblingsettings.ui:55
+#. i18n: file: scrobbling/scrobblingsettings.ui:71
#. i18n: ectx: property (text), widget (BuddyLabel, passLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:61
+#. i18n: file: streams/digitallyimportedsettings.ui:64
#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
#: online/magnatunesettingsdialog.cpp:44 po/rc.cpp:293 po/rc.cpp:311
-#: po/rc.cpp:482 po/rc.cpp:819 po/rc.cpp:884 po/rc.cpp:899 po/rc.cpp:923
-#: rc.cpp:293 rc.cpp:311 rc.cpp:482 rc.cpp:819 rc.cpp:884 rc.cpp:899
-#: rc.cpp:923
+#: po/rc.cpp:488 po/rc.cpp:833 po/rc.cpp:900 po/rc.cpp:915 po/rc.cpp:939
+#: rc.cpp:293 rc.cpp:311 rc.cpp:488 rc.cpp:833 rc.cpp:900 rc.cpp:915
+#: rc.cpp:939
msgid "Password:"
msgstr "密码:"
-#: online/magnatunesettingsdialog.cpp:51
+#: online/magnatunesettingsdialog.cpp:52
msgid "Membership:"
msgstr ""
-#: online/magnatunesettingsdialog.cpp:57
+#: online/magnatunesettingsdialog.cpp:58
msgid "Downloads:"
msgstr "下载:"
-#: online/onlineservice.cpp:69 online/onlineservice.cpp:154
+#: online/onlineservice.cpp:71 online/onlineservice.cpp:156
msgid "Dowloading"
msgstr "正在下载"
-#: online/onlineservice.cpp:99
+#: online/onlineservice.cpp:101
msgid "Updating display"
msgstr "更新显示"
-#: online/onlineservice.cpp:110
+#: online/onlineservice.cpp:112
msgid "Grouping tracks"
msgstr "分组音轨:"
-#: online/onlineservice.cpp:130
+#: online/onlineservice.cpp:132
msgid "Parsing response"
msgstr ""
-#: online/onlineservice.cpp:142 online/onlineservice.cpp:145
+#: online/onlineservice.cpp:144 online/onlineservice.cpp:147
msgid "Failed to parse"
msgstr "操作失败"
-#: online/onlineservice.cpp:148
+#: online/onlineservice.cpp:150
msgid "Failed to download"
msgstr "下载失败"
@@ -3456,189 +3460,193 @@ msgstr ""
msgid "Delete Downloaded Podcast Episodes"
msgstr ""
-#: online/onlineservicespage.cpp:299
-msgctxt "Search ServiceName:"
-msgid "Search %1:"
+#: online/onlineservicespage.cpp:61
+msgid "Cancel Podcast Episode Download"
msgstr ""
-#: online/onlineservicespage.cpp:437
-msgid "Re-download music listing for %1?"
-msgstr "重新下载音乐列表 %1?"
+#: online/onlineservicespage.cpp:62
+msgid "Mark Podcast Episodes As New"
+msgstr ""
-#: online/onlineservicespage.cpp:437 online/onlineservicespage.cpp:438
-msgid "Re-download"
+#: online/onlineservicespage.cpp:63
+msgid "Mark Podcast Episodes As Listened"
msgstr ""
-#: online/onlineservicespage.cpp:523
-msgid "Unsubscribe from <b>%1</b>?"
+#: online/onlineservicespage.cpp:105 streams/streamspage.cpp:99
+#: support/fancytabwidget.cpp:711
+msgid "Configure..."
msgstr ""
-#: online/onlineservicespage.cpp:544
-msgid "Refresh all podcast listings?"
+#: online/onlineservicespage.cpp:322
+msgctxt "Search ServiceName:"
+msgid "Search %1:"
msgstr ""
-#: online/onlineservicespage.cpp:565
-msgid "Refresh episode listing from <b>%1</b>?"
+#: online/onlineservicespage.cpp:467
+msgid "Re-download music listing for %1?"
+msgstr "重新下载音乐列表 %1?"
+
+#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468
+msgid "Re-download"
msgstr ""
-#: online/onlineservicespage.cpp:631
-msgid "All selected podcasts have already been downloaded!"
+#: online/onlineservicespage.cpp:553
+msgid "Unsubscribe from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:635
-msgid "Do you wish to download the following podcast episode?"
+#: online/onlineservicespage.cpp:574
+msgid "Refresh all podcast listings?"
msgstr ""
-#: online/onlineservicespage.cpp:638
-msgid "Do you wish to download the following podcast episodes?"
+#: online/onlineservicespage.cpp:595
+msgid "Refresh episode listing from '%1'?"
msgstr ""
-#: online/onlineservicespage.cpp:641
+#: online/onlineservicespage.cpp:634
msgid "Do you wish to download the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:689
-msgid "All selected downloaded podcast episodes have already been deleted!"
+#: online/onlineservicespage.cpp:648
+msgid ""
+"Cancel podcast episode downloads (both current and any that are queued)?"
msgstr ""
-#: online/onlineservicespage.cpp:693
+#: online/onlineservicespage.cpp:685
msgid ""
-"Do you wish to delete the downloaded file of the following podcast episode?"
+"Do you wish to the delete downloaded files of the selected podcast episodes?"
msgstr ""
-#: online/onlineservicespage.cpp:696
-msgid ""
-"Do you wish to the delete downloaded files of the following podcast episodes?"
+#: online/onlineservicespage.cpp:728
+msgid "Do you wish to mark the selected podcast episodes as new?"
msgstr ""
-#: online/onlineservicespage.cpp:699
-msgid ""
-"Do you wish to the delete downloaded files of the selected podcast episodes?"
+#: online/onlineservicespage.cpp:771
+msgid "Do you wish to mark the selected podcast episodes as listened?"
msgstr ""
-#: online/podcastsearchdialog.cpp:253
+#: online/podcastsearchdialog.cpp:256
msgid "RSS:"
msgstr ""
-#: online/podcastsearchdialog.cpp:255
+#: online/podcastsearchdialog.cpp:258
msgid "Website:"
msgstr ""
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Podcast details"
msgstr ""
-#: online/podcastsearchdialog.cpp:262
+#: online/podcastsearchdialog.cpp:265
msgid "Select a podcast to display its details"
msgstr ""
-#: online/podcastsearchdialog.cpp:333
+#: online/podcastsearchdialog.cpp:336
msgid "Enter search term..."
msgstr ""
-#: online/podcastsearchdialog.cpp:383
+#: online/podcastsearchdialog.cpp:386
msgid "Failed to fetch podcasts from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:389
+#: online/podcastsearchdialog.cpp:395
msgid "There was a problem parsing the response from %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:446
+#: online/podcastsearchdialog.cpp:452
msgid "Failed to download directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:454
+#: online/podcastsearchdialog.cpp:460
msgid "Failed to parse directory listing"
msgstr ""
-#: online/podcastsearchdialog.cpp:504
+#: online/podcastsearchdialog.cpp:510
msgid "URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:513
+#: online/podcastsearchdialog.cpp:519
msgid "Enter podcast URL..."
msgstr ""
-#: online/podcastsearchdialog.cpp:514
+#: online/podcastsearchdialog.cpp:520
msgid "Load"
msgstr ""
-#: online/podcastsearchdialog.cpp:521
+#: online/podcastsearchdialog.cpp:527
msgid "Enter podcast URL below, and press 'Load'"
msgstr ""
-#: online/podcastsearchdialog.cpp:548
+#: online/podcastsearchdialog.cpp:554
msgid "Invalid URL!"
msgstr ""
-#: online/podcastsearchdialog.cpp:558
+#: online/podcastsearchdialog.cpp:564
msgid "Failed to fetch podcast!"
msgstr ""
-#: online/podcastsearchdialog.cpp:563
+#: online/podcastsearchdialog.cpp:569
msgid "Failed to parse podcast."
msgstr ""
-#: online/podcastsearchdialog.cpp:567
+#: online/podcastsearchdialog.cpp:573
msgid ""
"Cantata only supports audio podcasts! The URL entered contains only video "
"podcasts."
msgstr ""
-#: online/podcastsearchdialog.cpp:585
+#: online/podcastsearchdialog.cpp:591
msgid "Subscribe"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Enter URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:603
+#: online/podcastsearchdialog.cpp:609
msgid "Manual podcast URL"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:607 online/podcastsearchdialog.cpp:611
+#: online/podcastsearchdialog.cpp:613 online/podcastsearchdialog.cpp:617
msgid "Search for podcasts on %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:623
+#: online/podcastsearchdialog.cpp:629
msgid "Add Podcast Subscription"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1"
msgstr ""
-#: online/podcastsearchdialog.cpp:698
+#: online/podcastsearchdialog.cpp:704
msgid "Browse %1 podcasts"
msgstr ""
-#: online/podcastsearchdialog.cpp:714
+#: online/podcastsearchdialog.cpp:720
msgid "Subscription added"
msgstr ""
-#: online/podcastsearchdialog.cpp:716
+#: online/podcastsearchdialog.cpp:722
msgid "You are already subscribed to this podcast!"
msgstr ""
-#: online/podcastservice.cpp:92
+#: online/podcastservice.cpp:104
msgid "Podcasts"
msgstr ""
-#: online/podcastservice.cpp:270
+#: online/podcastservice.cpp:288
msgid "Cantata only supports audio podcasts! %1 contains only video podcasts."
msgstr ""
-#: online/podcastservice.cpp:272
+#: online/podcastservice.cpp:290
msgid "Failed to parse %1"
msgstr ""
-#: online/podcastservice.cpp:276
+#: online/podcastservice.cpp:294
msgid "Failed to download %1"
msgstr ""
@@ -3650,59 +3658,77 @@ msgstr ""
msgid "Download episodes to:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:67
-msgid "Automatically download new episodes"
+#: online/podcastsettingsdialog.cpp:61
+msgid "Download automatically:"
msgstr ""
-#: online/podcastsettingsdialog.cpp:80
+#: online/podcastsettingsdialog.cpp:85
msgid "Podcast Settings"
msgstr ""
-#: online/podcastsettingsdialog.cpp:82
+#: online/podcastsettingsdialog.cpp:87
msgid "Manually"
msgstr ""
-#: online/podcastsettingsdialog.cpp:83
+#: online/podcastsettingsdialog.cpp:88
msgid "Every 15 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:84
+#: online/podcastsettingsdialog.cpp:89
msgid "Every 30 minutes"
msgstr ""
-#: online/podcastsettingsdialog.cpp:85
+#: online/podcastsettingsdialog.cpp:90
msgid "Every hour"
msgstr ""
-#: online/podcastsettingsdialog.cpp:86
+#: online/podcastsettingsdialog.cpp:91
msgid "Every 2 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:87
+#: online/podcastsettingsdialog.cpp:92
msgid "Every 6 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:88
+#: online/podcastsettingsdialog.cpp:93
msgid "Every 12 hours"
msgstr ""
-#: online/podcastsettingsdialog.cpp:89
+#: online/podcastsettingsdialog.cpp:94
msgid "Every day"
msgstr ""
-#: online/podcastsettingsdialog.cpp:90
+#: online/podcastsettingsdialog.cpp:95
msgid "Every week"
msgstr ""
+#: online/podcastsettingsdialog.cpp:97
+msgid "Don't automatically download episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:98
+msgid "Latest episode"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:99 online/podcastsettingsdialog.cpp:100
+#: online/podcastsettingsdialog.cpp:101 online/podcastsettingsdialog.cpp:102
+#: online/podcastsettingsdialog.cpp:103 online/podcastsettingsdialog.cpp:104
+msgid "Latest %1 episodes"
+msgstr ""
+
+#: online/podcastsettingsdialog.cpp:105
+msgid "All episodes"
+msgstr ""
+
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#. i18n: file: context/othersettings.ui:26
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:488
+#. i18n: file: gui/interfacesettings.ui:429
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:3 po/rc.cpp:648 rc.cpp:3 rc.cpp:648
+#: po/rc.cpp:3 po/rc.cpp:650 rc.cpp:3 rc.cpp:650
msgid "Background Image"
msgstr ""
@@ -3714,61 +3740,61 @@ msgstr ""
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
#. i18n: file: context/othersettings.ui:46
#. i18n: ectx: property (text), widget (QRadioButton, contextBackdrop_custom)
-#. i18n: file: gui/interfacesettings.ui:508
+#. i18n: file: gui/interfacesettings.ui:449
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_custom)
-#: po/rc.cpp:12 po/rc.cpp:657 rc.cpp:12 rc.cpp:657
+#: po/rc.cpp:12 po/rc.cpp:659 rc.cpp:12 rc.cpp:659
msgid "Custom image:"
msgstr ""
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
#. i18n: file: context/othersettings.ui:66
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#. i18n: file: gui/interfacesettings.ui:528
+#. i18n: file: gui/interfacesettings.ui:469
#. i18n: ectx: property (text), widget (QLabel, label_4b)
-#: po/rc.cpp:15 po/rc.cpp:660 rc.cpp:15 rc.cpp:660
+#: po/rc.cpp:15 po/rc.cpp:662 rc.cpp:15 rc.cpp:662
msgid "Blur:"
msgstr ""
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
#. i18n: file: context/othersettings.ui:103
#. i18n: ectx: property (text), widget (QLabel, contextBackdropBlurLabel)
-#. i18n: file: gui/interfacesettings.ui:574
+#. i18n: file: gui/interfacesettings.ui:515
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundBlurLabel)
-#: po/rc.cpp:18 po/rc.cpp:663 rc.cpp:18 rc.cpp:663
+#: po/rc.cpp:18 po/rc.cpp:665 rc.cpp:18 rc.cpp:665
msgid "10px"
msgstr ""
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
#. i18n: file: context/othersettings.ui:115
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: gui/interfacesettings.ui:586
+#. i18n: file: gui/interfacesettings.ui:527
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:21 po/rc.cpp:666 rc.cpp:21 rc.cpp:666
+#: po/rc.cpp:21 po/rc.cpp:668 rc.cpp:21 rc.cpp:668
msgid "Opacity:"
msgstr ""
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
#. i18n: file: context/othersettings.ui:152
#. i18n: ectx: property (text), widget (QLabel, contextBackdropOpacityLabel)
-#. i18n: file: gui/interfacesettings.ui:632
+#. i18n: file: gui/interfacesettings.ui:573
#. i18n: ectx: property (text), widget (QLabel, playQueueBackgroundOpacityLabel)
-#: po/rc.cpp:25 po/rc.cpp:670 rc.cpp:25 rc.cpp:670
+#: po/rc.cpp:25 po/rc.cpp:672 rc.cpp:25 rc.cpp:672
#, no-c-format
msgid "40%"
msgstr ""
@@ -3793,7 +3819,7 @@ msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, contextSwitchTime)
#. i18n: file: gui/playbacksettings.ui:48
#. i18n: ectx: property (suffix), widget (QSpinBox, stopFadeDuration)
-#: po/rc.cpp:34 po/rc.cpp:768 rc.cpp:34 rc.cpp:768
+#: po/rc.cpp:34 po/rc.cpp:782 rc.cpp:34 rc.cpp:782
msgid " ms"
msgstr " 毫秒"
@@ -3820,8 +3846,8 @@ msgstr ""
#. i18n: ectx: property (toolTip), widget (QCheckBox, contextAlwaysCollapsed)
#: po/rc.cpp:46 rc.cpp:46
msgid ""
-"Only show 'Artist', 'Album', or 'Lyrics' even if sufficient width to show "
-"all three."
+"Only show 'Artist', 'Album', or 'Track' even if sufficient width to show all "
+"three."
msgstr ""
#. i18n: file: context/othersettings.ui:213
@@ -3830,17 +3856,16 @@ msgstr ""
msgid "Only show basic wikipedia text"
msgstr ""
-#. i18n: file: context/othersettings.ui:242
-#. i18n: ectx: property (text), widget (StateLabel, wikipediaIntroOnlyNote)
+#. i18n: file: context/othersettings.ui:220
+#. i18n: ectx: property (text), widget (NoteLabel, wikipediaIntroOnlyNote)
#: po/rc.cpp:53 rc.cpp:53
#, no-c-format
msgid ""
-"<i><b>NOTE:</b> Cantata does not show the full wikipedia pages (with images, "
-"links, etc), instead it shows a trimmed down version. This trimming is not "
-"always 100% accurate, hence by default Cantata will only show the basic "
-"introduction to each article. If you elect to show the full article, then "
-"there may be parsing errors. You will also need to remove any currently "
-"cached articles (using the 'Cache' page).</i>"
+"Cantata only shows a trimmed down version of wikipedia pages (no images, "
+"links, etc). This trimming is not always 100% accurate, which is why Cantata "
+"defaults to only showing the introduction. If you elect to show the full "
+"article, then there may be parsing errors. You will also need to remove any "
+"currently cached articles (using the 'Cache' page)."
msgstr ""
#. i18n: file: context/togglelist.ui:17
@@ -3898,21 +3923,20 @@ msgid "To copy:"
msgstr ""
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
#. i18n: file: devices/actiondialog.ui:205
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#. i18n: file: tags/tageditor.ui:218
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#. i18n: file: tags/tageditor.ui:224
+#. i18n: ectx: property (text), widget (PlainUrlNoteLabel, mopidyNote)
#. i18n: file: tags/trackorganiser.ui:130
-#. i18n: ectx: property (text), widget (UrlLabel, mopidyNote)
-#: po/rc.cpp:89 po/rc.cpp:1010 po/rc.cpp:1037 rc.cpp:89 rc.cpp:1010
-#: rc.cpp:1037
-msgid ""
-"<i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i>"
+#. i18n: ectx: property (text), widget (UrlNoteLabel, mopidyNote)
+#: po/rc.cpp:89 po/rc.cpp:1035 po/rc.cpp:1062 rc.cpp:89 rc.cpp:1035
+#: rc.cpp:1062
+msgid "Connected to a Mopidy server (manual update required)."
msgstr ""
#. i18n: file: devices/albumdetails.ui:26
@@ -3923,13 +3947,13 @@ msgstr "专辑详情"
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
#. i18n: file: devices/albumdetails.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#. i18n: file: tags/tageditor.ui:142
+#. i18n: file: tags/tageditor.ui:158
#. i18n: ectx: property (text), widget (StateLabel, yearLabel)
-#: po/rc.cpp:107 po/rc.cpp:1001 rc.cpp:107 rc.cpp:1001
+#: po/rc.cpp:107 po/rc.cpp:1017 rc.cpp:107 rc.cpp:1017
msgid "Year:"
msgstr "年份:"
@@ -3994,170 +4018,169 @@ msgid "Never skip on read error"
msgstr "从不跳过读取错误"
#. i18n: file: devices/devicepropertieswidget.ui:20
-#. i18n: ectx: property (text), widget (QLabel, remoteDeviceNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, remoteDeviceNote)
#: po/rc.cpp:152 rc.cpp:152
msgid ""
-"<i><b>NOTE:</b> These settings are only valid, and editable, when the device "
-"is connected.</i>"
+"These settings are only valid, and editable, when the device is connected."
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#. i18n: file: devices/devicepropertieswidget.ui:38
+#. i18n: file: devices/devicepropertieswidget.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:48
+#. i18n: file: devices/remotedevicepropertieswidget.ui:42
#. i18n: ectx: property (text), widget (BuddyLabel, nameLabel)
#. i18n: file: gui/serversettings.ui:63
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:810 streams/streamdialog.cpp:54
-#: rc.cpp:155 rc.cpp:275 rc.cpp:810
+#: po/rc.cpp:155 po/rc.cpp:275 po/rc.cpp:824 streams/streamdialog.cpp:55
+#: rc.cpp:155 rc.cpp:275 rc.cpp:824
msgid "Name:"
msgstr "名称:"
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#. i18n: file: devices/devicepropertieswidget.ui:51
+#. i18n: file: devices/devicepropertieswidget.ui:45
#. i18n: ectx: property (text), widget (BuddyLabel, musicFolderLabel)
-#. i18n: file: gui/initialsettingswizard.ui:437
+#. i18n: file: gui/initialsettingswizard.ui:440
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/initialsettingswizard.ui:629
+#. i18n: file: gui/initialsettingswizard.ui:588
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
#. i18n: file: gui/serversettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel)
-#. i18n: file: gui/serversettings.ui:315
+#. i18n: file: gui/serversettings.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, dirLabel_2)
-#: po/rc.cpp:158 po/rc.cpp:485 po/rc.cpp:503 po/rc.cpp:822 po/rc.cpp:844
-#: rc.cpp:158 rc.cpp:485 rc.cpp:503 rc.cpp:822 rc.cpp:844
+#: po/rc.cpp:158 po/rc.cpp:491 po/rc.cpp:509 po/rc.cpp:836 po/rc.cpp:858
+#: rc.cpp:158 rc.cpp:491 rc.cpp:509 rc.cpp:836 rc.cpp:858
msgid "Music folder:"
msgstr "音乐文件夹:"
-#. i18n: file: devices/devicepropertieswidget.ui:64
+#. i18n: file: devices/devicepropertieswidget.ui:58
#. i18n: ectx: property (text), widget (BuddyLabel, albumCoversLabel)
#: po/rc.cpp:161 rc.cpp:161
msgid "Copy album covers as:"
msgstr "复制专辑封面为:"
-#. i18n: file: devices/devicepropertieswidget.ui:81
+#. i18n: file: devices/devicepropertieswidget.ui:75
#. i18n: ectx: property (text), widget (BuddyLabel, coverMaxSizeLabel)
#: po/rc.cpp:164 rc.cpp:164
msgid "Maximum cover size:"
msgstr "最大专辑封面大小:"
-#. i18n: file: devices/devicepropertieswidget.ui:101
+#. i18n: file: devices/devicepropertieswidget.ui:95
#. i18n: ectx: property (text), widget (QLabel, defaultVolumeLabel)
#: po/rc.cpp:167 rc.cpp:167
msgid "Default volume:"
msgstr "默认音量:"
-#. i18n: file: devices/devicepropertieswidget.ui:108
+#. i18n: file: devices/devicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (QCheckBox, fixVariousArtists)
#: po/rc.cpp:170 rc.cpp:170
msgid "'Various Artists' workaround"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:115
+#. i18n: file: devices/devicepropertieswidget.ui:109
#. i18n: ectx: property (text), widget (QCheckBox, autoScan)
#: po/rc.cpp:173 rc.cpp:173
msgid "Automatically scan music when attached"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:122
+#. i18n: file: devices/devicepropertieswidget.ui:116
#. i18n: ectx: property (text), widget (QCheckBox, useCache)
#: po/rc.cpp:176 rc.cpp:176
msgid "Use cache"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#. i18n: file: devices/devicepropertieswidget.ui:131
+#. i18n: file: devices/devicepropertieswidget.ui:125
#. i18n: ectx: property (title), widget (QGroupBox, filenamesGroupBox)
#. i18n: file: tags/trackorganiser.ui:25
#. i18n: ectx: property (title), widget (QGroupBox, optionsBox)
-#: po/rc.cpp:179 po/rc.cpp:1013 rc.cpp:179 rc.cpp:1013
+#: po/rc.cpp:179 po/rc.cpp:1038 rc.cpp:179 rc.cpp:1038
msgid "Filenames"
msgstr "文件名"
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#. i18n: file: devices/devicepropertieswidget.ui:140
+#. i18n: file: devices/devicepropertieswidget.ui:134
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
#. i18n: file: tags/trackorganiser.ui:61
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:182 po/rc.cpp:1016 rc.cpp:182 rc.cpp:1016
+#: po/rc.cpp:182 po/rc.cpp:1041 rc.cpp:182 rc.cpp:1041
msgid "Filename scheme:"
msgstr "文件名框架"
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#. i18n: file: devices/devicepropertieswidget.ui:177
+#. i18n: file: devices/devicepropertieswidget.ui:171
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
#. i18n: file: tags/trackorganiser.ui:71
#. i18n: ectx: property (text), widget (QCheckBox, vfatSafe)
-#: po/rc.cpp:185 po/rc.cpp:1019 rc.cpp:185 rc.cpp:1019
+#: po/rc.cpp:185 po/rc.cpp:1044 rc.cpp:185 rc.cpp:1044
msgid "VFAT safe"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#. i18n: file: devices/devicepropertieswidget.ui:184
+#. i18n: file: devices/devicepropertieswidget.ui:178
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
#. i18n: file: tags/trackorganiser.ui:78
#. i18n: ectx: property (text), widget (QCheckBox, asciiOnly)
-#: po/rc.cpp:188 po/rc.cpp:1022 rc.cpp:188 rc.cpp:1022
+#: po/rc.cpp:188 po/rc.cpp:1047 rc.cpp:188 rc.cpp:1047
msgid "Use only ASCII characters"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#. i18n: file: devices/devicepropertieswidget.ui:191
+#. i18n: file: devices/devicepropertieswidget.ui:185
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
#. i18n: file: tags/trackorganiser.ui:85
#. i18n: ectx: property (text), widget (QCheckBox, replaceSpaces)
-#: po/rc.cpp:191 po/rc.cpp:1025 rc.cpp:191 rc.cpp:1025
+#: po/rc.cpp:191 po/rc.cpp:1050 rc.cpp:191 rc.cpp:1050
msgid "Replace spaces with underscores"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#. i18n: file: devices/devicepropertieswidget.ui:198
+#. i18n: file: devices/devicepropertieswidget.ui:192
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
#. i18n: file: tags/trackorganiser.ui:92
#. i18n: ectx: property (text), widget (QCheckBox, ignoreThe)
-#: po/rc.cpp:194 po/rc.cpp:1028 rc.cpp:194 rc.cpp:1028
-msgid "Ignore 'The' in artist names"
+#: po/rc.cpp:194 po/rc.cpp:1053 rc.cpp:194 rc.cpp:1053
+msgid "Append 'The' to artist names"
msgstr ""
-#. i18n: file: devices/devicepropertieswidget.ui:208
+#. i18n: file: devices/devicepropertieswidget.ui:202
#. i18n: ectx: property (title), widget (QGroupBox, transcoderFrame)
#: po/rc.cpp:197 rc.cpp:197
msgid "Transcoding"
msgstr "正在转码"
-#. i18n: file: devices/devicepropertieswidget.ui:217
+#. i18n: file: devices/devicepropertieswidget.ui:211
#. i18n: ectx: property (text), widget (QCheckBox, transcoderWhenDifferent)
#: po/rc.cpp:200 rc.cpp:200
msgid "Only transcode if source file is of a different format"
@@ -4279,162 +4302,158 @@ msgid "The genre of the album."
msgstr ""
#. i18n: file: devices/remotedevicepropertieswidget.ui:17
-#. i18n: ectx: property (text), widget (QLabel, connectionNote)
+#. i18n: ectx: property (text), widget (PlainNoteLabel, connectionNote)
#: po/rc.cpp:269 rc.cpp:269
-msgid ""
-"<i><b>NOTE:</b> These settings are only editable when the device is not "
-"connected.</i>"
+msgid "These settings are only editable when the device is not connected."
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:35
+#. i18n: file: devices/remotedevicepropertieswidget.ui:29
#. i18n: ectx: property (text), widget (BuddyLabel, typeLabel)
#. i18n: file: dynamic/dynamicrule.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
#. i18n: file: network/proxysettings.ui:39
#. i18n: ectx: property (text), widget (BuddyLabel, proxyTypeLabel)
-#: po/rc.cpp:272 po/rc.cpp:362 po/rc.cpp:866 rc.cpp:272 rc.cpp:362 rc.cpp:866
+#: po/rc.cpp:272 po/rc.cpp:368 po/rc.cpp:882 rc.cpp:272 rc.cpp:368 rc.cpp:882
msgid "Type:"
msgstr "类型:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:63
+#. i18n: file: devices/remotedevicepropertieswidget.ui:57
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#. i18n: file: gui/interfacesettings.ui:128
+#. i18n: file: gui/interfacesettings.ui:71
#. i18n: ectx: property (title), widget (QGroupBox, optionsGroup)
-#: po/rc.cpp:278 po/rc.cpp:554 rc.cpp:278 rc.cpp:554
+#: po/rc.cpp:278 po/rc.cpp:560 rc.cpp:278 rc.cpp:560
msgid "Options"
msgstr "选项"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:91
+#. i18n: file: devices/remotedevicepropertieswidget.ui:85
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:314
+#. i18n: file: devices/remotedevicepropertieswidget.ui:302
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
-#. i18n: file: gui/initialsettingswizard.ui:397
+#. i18n: file: gui/initialsettingswizard.ui:400
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: gui/serversettings.ui:89
#. i18n: ectx: property (text), widget (BuddyLabel, portLabel)
#. i18n: file: network/proxysettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, proxyPortLabel)
-#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:479 po/rc.cpp:816 po/rc.cpp:878
-#: rc.cpp:284 rc.cpp:323 rc.cpp:479 rc.cpp:816 rc.cpp:878
+#: po/rc.cpp:284 po/rc.cpp:323 po/rc.cpp:485 po/rc.cpp:830 po/rc.cpp:894
+#: rc.cpp:284 rc.cpp:323 rc.cpp:485 rc.cpp:830 rc.cpp:894
msgid "Port:"
msgstr "端口:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:108
+#. i18n: file: devices/remotedevicepropertieswidget.ui:102
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:211
+#. i18n: file: devices/remotedevicepropertieswidget.ui:199
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:331
+#. i18n: file: devices/remotedevicepropertieswidget.ui:319
#. i18n: ectx: property (text), widget (BuddyLabel, userLabel)
#: po/rc.cpp:287 po/rc.cpp:305 po/rc.cpp:326 rc.cpp:287 rc.cpp:305 rc.cpp:326
msgid "User:"
msgstr "用户:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:121
+#. i18n: file: devices/remotedevicepropertieswidget.ui:115
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:224
+#. i18n: file: devices/remotedevicepropertieswidget.ui:212
#. i18n: ectx: property (text), widget (BuddyLabel, label_2x)
#: po/rc.cpp:290 po/rc.cpp:308 rc.cpp:290 rc.cpp:308
msgid "Domain:"
msgstr "域名"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:151
+#. i18n: file: devices/remotedevicepropertieswidget.ui:145
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_2)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:254
+#. i18n: file: devices/remotedevicepropertieswidget.ui:242
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel_x2)
#: po/rc.cpp:296 po/rc.cpp:314 rc.cpp:296 rc.cpp:314
msgid "Share:"
msgstr "共享:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:166
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:269
-#. i18n: ectx: property (text), widget (QLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:160
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:257
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_4x)
#: po/rc.cpp:299 po/rc.cpp:317 rc.cpp:299 rc.cpp:317
msgid ""
-"<i><b>NOTE:</b> If you enter a password here, it will be stored "
-"<b>unencrypted</b> in Cantata's config file. To have Cantata prompt for the "
-"password before accessing the share, set the password to '-'</i>"
+"If you enter a password here, it will be stored <b>unencrypted</b> in "
+"Cantata's config file. To have Cantata prompt for the password before "
+"accessing the share, set the password to '-'"
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:198
+#. i18n: file: devices/remotedevicepropertieswidget.ui:186
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel_2x)
#: po/rc.cpp:302 rc.cpp:302
msgid "Service name:"
msgstr "服务名称:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:344
+#. i18n: file: devices/remotedevicepropertieswidget.ui:332
#. i18n: ectx: property (text), widget (BuddyLabel, folderLabel)
-#. i18n: file: devices/remotedevicepropertieswidget.ui:402
+#. i18n: file: devices/remotedevicepropertieswidget.ui:390
#. i18n: ectx: property (text), widget (BuddyLabel, label)
#: po/rc.cpp:329 po/rc.cpp:338 rc.cpp:329 rc.cpp:338
msgid "Folder:"
msgstr "文件夹:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:357
+#. i18n: file: devices/remotedevicepropertieswidget.ui:345
#. i18n: ectx: property (text), widget (BuddyLabel, sshExtraLabel)
#: po/rc.cpp:332 rc.cpp:332
msgid "Extra Options:"
msgstr "额外选项:"
-#. i18n: file: devices/remotedevicepropertieswidget.ui:372
-#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:360
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_5)
#: po/rc.cpp:335 rc.cpp:335
msgid ""
-"<i><b>NOTE:</b> Due to the way sshfs works, a suitable ssh-askpass "
-"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter "
-"the password.</i>"
+"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, "
+"ssh-askpass-gnome, etc.) will be required to enter the password."
msgstr ""
-#. i18n: file: devices/remotedevicepropertieswidget.ui:428
-#. i18n: ectx: property (text), widget (QLabel, infoLabel)
+#. i18n: file: devices/remotedevicepropertieswidget.ui:410
+#. i18n: ectx: property (text), widget (PlainNoteLabel, infoLabel)
#: po/rc.cpp:341 rc.cpp:341
msgid ""
-"<i><b>NOTE:</b> This dialog is only used to add remote devices (e.g. via "
-"Samba), or to access locally mounted folders. For normal media players, "
-"attached via USB, Cantata will automatically display the device when it is "
-"attached.</i>"
+"This dialog is only used to add remote devices (e.g. via Samba), or to "
+"access locally mounted folders. For normal media players, attached via USB, "
+"Cantata will automatically display the device when it is attached."
msgstr ""
#. i18n: file: dynamic/dynamicpage.ui:26
@@ -4455,39 +4474,51 @@ msgstr "动态配置名称"
msgid "Edit"
msgstr "编辑"
-#. i18n: file: dynamic/dynamicrules.ui:93
-#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#. i18n: file: dynamic/dynamicrules.ui:89
+#. i18n: ectx: property (text), widget (QLabel, ratingRangeLabel)
#: po/rc.cpp:359 rc.cpp:359
+msgid "Song with ratings between:"
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:99
+#. i18n: ectx: property (text), widget (QLabel, ratingToLabel)
+#: po/rc.cpp:362 rc.cpp:362
+msgid " - "
+msgstr ""
+
+#. i18n: file: dynamic/dynamicrules.ui:130
+#. i18n: ectx: property (text), widget (UrlLabel, aboutLabel)
+#: po/rc.cpp:365 rc.cpp:365
msgid "About Rules"
msgstr "关于规则"
#. i18n: file: dynamic/dynamicrule.ui:37
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:365 rc.cpp:365
+#: po/rc.cpp:371 rc.cpp:371
msgid "Include songs that match the following:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:42
#. i18n: ectx: property (text), item, widget (QComboBox, typeCombo)
-#: po/rc.cpp:368 rc.cpp:368
+#: po/rc.cpp:374 rc.cpp:374
msgid "Exclude songs that match the following:"
msgstr ""
#. i18n: file: dynamic/dynamicrule.ui:63
#. i18n: ectx: property (text), widget (BuddyLabel, similarArtistsText_label)
-#: po/rc.cpp:374 rc.cpp:374
+#: po/rc.cpp:380 rc.cpp:380
msgid "Artists similar to:"
msgstr "相似艺术家:"
#. i18n: file: dynamic/dynamicrule.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:377 rc.cpp:377
+#: po/rc.cpp:383 rc.cpp:383
msgid "Album Artist:"
msgstr "专辑艺术家:"
#. i18n: file: dynamic/dynamicrule.ui:141
#. i18n: ectx: property (text), widget (BuddyLabel, label_6)
-#: po/rc.cpp:392 rc.cpp:392
+#: po/rc.cpp:398 rc.cpp:398
msgid "From Year:"
msgstr "年份:"
@@ -4499,149 +4530,152 @@ msgstr "年份:"
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateFromSpin)
#. i18n: file: dynamic/dynamicrule.ui:180
#. i18n: ectx: property (specialValueText), widget (QSpinBox, dateToSpin)
-#: po/rc.cpp:395 po/rc.cpp:401 rc.cpp:395 rc.cpp:401
+#: po/rc.cpp:401 po/rc.cpp:407 rc.cpp:401 rc.cpp:407
msgid "Any"
msgstr "任意"
#. i18n: file: dynamic/dynamicrule.ui:164
#. i18n: ectx: property (text), widget (BuddyLabel, label_6x)
-#: po/rc.cpp:398 rc.cpp:398
+#: po/rc.cpp:404 rc.cpp:404
msgid "To Year:"
msgstr "年份:"
#. i18n: file: dynamic/dynamicrule.ui:200
#. i18n: ectx: property (text), widget (QCheckBox, exactCheck)
-#: po/rc.cpp:407 rc.cpp:407
+#: po/rc.cpp:413 rc.cpp:413
msgid "Exact match"
msgstr "精确匹配"
-#. i18n: file: dynamic/dynamicrule.ui:244
-#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:410 rc.cpp:410
-msgid ""
-"<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i>"
-msgstr "<i><b>注意</b> 输入你所需要搜索的标签。 </i>"
+#. i18n: file: dynamic/dynamicrule.ui:228
+#. i18n: ectx: property (text), widget (NoteLabel, label_7)
+#: po/rc.cpp:416 rc.cpp:416
+msgid "Only enter values for the tags you wish to be search on."
+msgstr ""
-#. i18n: file: dynamic/dynamicrule.ui:276
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:413 rc.cpp:413
+#. i18n: file: dynamic/dynamicrule.ui:235
+#. i18n: ectx: property (text), widget (NoteLabel, label_7x)
+#: po/rc.cpp:419 rc.cpp:419
msgid ""
-"<i><b>NOTE</b> For genre, end string with an asterisk to match various "
-"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. </i>"
+"For genre, end string with an asterisk to match various genres. e.g 'rock*' "
+"matches 'Hard Rock' and 'Rock and Roll'."
msgstr ""
#. i18n: file: gui/coverdialog.ui:30
-#. i18n: ectx: property (toolTip), widget (QToolButton, addFileButton)
-#: po/rc.cpp:419 rc.cpp:419
+#. i18n: ectx: property (toolTip), widget (FlatToolButton, addFileButton)
+#: po/rc.cpp:425 rc.cpp:425
msgid "Add a local file"
msgstr ""
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
#. i18n: file: gui/filesettings.ui:29
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:735
+#. i18n: file: gui/initialsettingswizard.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, storeCoversInMpdDir)
-#: po/rc.cpp:425 po/rc.cpp:512 rc.cpp:425 rc.cpp:512
+#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
msgid "Save downloaded covers, and artist images, in music folder"
msgstr ""
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
#. i18n: file: gui/filesettings.ui:36
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:742
+#. i18n: file: gui/initialsettingswizard.ui:701
#. i18n: ectx: property (text), widget (QCheckBox, storeLyricsInMpdDir)
-#: po/rc.cpp:428 po/rc.cpp:515 rc.cpp:428 rc.cpp:515
+#: po/rc.cpp:434 po/rc.cpp:521 rc.cpp:434 rc.cpp:521
msgid "Save downloaded lyrics in music folder"
msgstr "保存下载的歌词到音乐文件夹"
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
#. i18n: file: gui/filesettings.ui:43
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#. i18n: file: gui/initialsettingswizard.ui:749
+#. i18n: file: gui/initialsettingswizard.ui:708
#. i18n: ectx: property (text), widget (QCheckBox, storeBackdropsInMpdDir)
-#: po/rc.cpp:431 po/rc.cpp:518 rc.cpp:431 rc.cpp:518
+#: po/rc.cpp:437 po/rc.cpp:524 rc.cpp:437 rc.cpp:524
msgid "Save downloaded backdrops in music folder"
msgstr ""
-#. i18n: file: gui/filesettings.ui:72
-#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:434 rc.cpp:434
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#. i18n: file: gui/filesettings.ui:50
+#. i18n: ectx: property (text), widget (NoteLabel, label_2)
+#. i18n: file: gui/initialsettingswizard.ui:715
+#. i18n: ectx: property (text), widget (NoteLabel, persNote)
+#: po/rc.cpp:440 po/rc.cpp:527 rc.cpp:440 rc.cpp:527
msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, lyrics, or "
-"backdrops, within the music folder, and you do not have write access to this "
-"folder, then Cantata will revert to saving the files in your personal cache "
-"folder.</i>"
+"If you elect to have Cantata store covers, lyrics, or backdrops, within the "
+"music folder, and you do not have write access to this folder, then Cantata "
+"will revert to saving the files in your personal cache folder."
msgstr ""
-#. i18n: file: gui/filesettings.ui:104
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:437 rc.cpp:437
+#. i18n: file: gui/filesettings.ui:57
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:443 rc.cpp:443
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/"
-"Tracks')</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks')"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:14
#. i18n: ectx: property (windowTitle), widget (QWizard, InitialSettingsWizard)
-#: po/rc.cpp:440 rc.cpp:440
+#: po/rc.cpp:446 rc.cpp:446
msgid "Cantata First Run"
msgstr "首次运行 Cantata"
#. i18n: file: gui/initialsettingswizard.ui:46
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:443 rc.cpp:443
+#: po/rc.cpp:449 rc.cpp:449
msgid "Welcome to Cantata"
msgstr "欢迎来到 Cantata"
#. i18n: file: gui/initialsettingswizard.ui:69
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:446 rc.cpp:446
+#: po/rc.cpp:452 rc.cpp:452
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music.</p><p>For more information on MPD itself, please refer to the "
-"MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
-"decoration: underline; color:#0000ff;\">http://www.musicpd.org</span></a></"
-"p><p>This 'wizard' will guide you through the basic settings required for "
-"Cantata to function correctly.</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music.</p><p>For more information on MPD itself, "
+"please refer to the MPD website <a href=\"http://www.musicpd.org\"><span "
+"style=\" text-decoration: underline; color:#0000ff;\">http://www.musicpd."
+"org</span></a></p><p>This 'wizard' will guide you through the basic settings "
+"required for Cantata to function correctly.</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:108
#. i18n: ectx: property (text), widget (QLabel, label_7)
-#: po/rc.cpp:449 rc.cpp:449
+#: po/rc.cpp:455 rc.cpp:455
msgid "<html><head/><body><p>Welcome to Cantata</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:134
#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:452 rc.cpp:452
+#: po/rc.cpp:458 rc.cpp:458
msgid ""
"<html><head/><body><p>Cantata is a feature-rich and user friendly client for "
-"Music Player Daemon (MPD). MPD is a background application that can be used "
-"to play music. MPD may be started either system-wide, or on a per-user "
-"basis. Please select how you would like to have Cantata initially connect to "
-"(or startup) MPD:</p></body></html>"
+"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side "
+"application for playing music. MPD may be started either system-wide, or on "
+"a per-user basis. Please select how you would like to have Cantata initially "
+"connect to (or startup) MPD:</p></body></html>"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:175
#. i18n: ectx: property (text), widget (QRadioButton, advanced)
-#: po/rc.cpp:455 rc.cpp:455
+#: po/rc.cpp:461 rc.cpp:461
msgid "Standard multi-user/server setup"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:188
#. i18n: ectx: property (text), widget (BuddyLabel, label_10)
-#: po/rc.cpp:458 rc.cpp:458
+#: po/rc.cpp:464 rc.cpp:464
msgid ""
"<i>Select this option if your music collection is shared between users, your "
"MPD instance is running on another machine, or you already have a personal "
@@ -4652,13 +4686,13 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:220
#. i18n: ectx: property (text), widget (QRadioButton, basic)
-#: po/rc.cpp:461 rc.cpp:461
+#: po/rc.cpp:467 rc.cpp:467
msgid "Basic single user setup"
msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:233
#. i18n: ectx: property (text), widget (BuddyLabel, label_9)
-#: po/rc.cpp:464 rc.cpp:464
+#: po/rc.cpp:470 rc.cpp:470
msgid ""
"<i>Select this option if your music collection is not shared with others, "
"and you wish Cantata to configure and control the MPD instance.</i>"
@@ -4666,7 +4700,7 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:268
#. i18n: ectx: property (text), widget (QLabel, label_11)
-#: po/rc.cpp:467 rc.cpp:467
+#: po/rc.cpp:473 rc.cpp:473
msgid ""
"<html><head/><body><p>For more information on MPD itself, please refer to "
"the MPD website <a href=\"http://www.musicpd.org\"><span style=\" text-"
@@ -4677,75 +4711,73 @@ msgstr ""
#. i18n: file: gui/initialsettingswizard.ui:330
#. i18n: ectx: property (text), widget (QLabel, label_3)
-#: po/rc.cpp:470 rc.cpp:470
+#: po/rc.cpp:476 rc.cpp:476
msgid "Connection details"
msgstr "连接详情"
#. i18n: file: gui/initialsettingswizard.ui:353
#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:473 rc.cpp:473
+#: po/rc.cpp:479 rc.cpp:479
msgid ""
"The settings below are the basic settings required by Cantata. Please enter "
"the relevant details, and use the 'Connect' button to test the connection."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#. i18n: file: gui/initialsettingswizard.ui:384
+#. i18n: file: gui/initialsettingswizard.ui:387
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
#. i18n: file: gui/serversettings.ui:76
#. i18n: ectx: property (text), widget (BuddyLabel, hostLabel)
-#: po/rc.cpp:476 po/rc.cpp:813 rc.cpp:476 rc.cpp:813
+#: po/rc.cpp:482 po/rc.cpp:827 rc.cpp:482 rc.cpp:827
msgid "Host (or local socket):"
msgstr "主机名 (或本地 Socket):"
-#. i18n: file: gui/initialsettingswizard.ui:506
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:491 rc.cpp:491
+#. i18n: file: gui/initialsettingswizard.ui:493
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:497 rc.cpp:497
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art, "
-"lyrics, etc. If you're MPD instance is on a remote host, you may set this to "
-"a HTTP URL.</i>"
+"The 'Music folder' setting is used to lookup cover-art, lyrics, etc. If your "
+"MPD instance is on a remote host, you may set this to a HTTP URL."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/initialsettingswizard.ui:535
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#. i18n: file: gui/serversettings.ui:219
-#. i18n: ectx: property (text), widget (QLabel, socketNoteLabel)
-#: po/rc.cpp:494 po/rc.cpp:838 rc.cpp:494 rc.cpp:838
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/initialsettingswizard.ui:500
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#. i18n: file: gui/serversettings.ui:181
+#. i18n: ectx: property (text), widget (NoteLabel, socketNoteLabel)
+#: po/rc.cpp:500 po/rc.cpp:852 rc.cpp:500 rc.cpp:852
msgid ""
-"<i><b>NOTE:</b> When using a local socket the full absolute path to the "
-"socket needs to be set. (Port number is not required.)</i>"
+"When using a local socket the full absolute path to the socket needs to be "
+"set. (Port number is not required.)"
msgstr ""
-"<i><b>注意:</b> 使用本地 Socket 时请输入完整路径。 (端口号可以省略).</i>"
-#. i18n: file: gui/initialsettingswizard.ui:571
+#. i18n: file: gui/initialsettingswizard.ui:530
#. i18n: ectx: property (text), widget (QLabel, label_13)
-#: po/rc.cpp:497 rc.cpp:497
+#: po/rc.cpp:503 rc.cpp:503
msgid "Music folder"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:594
+#. i18n: file: gui/initialsettingswizard.ui:553
#. i18n: ectx: property (text), widget (QLabel, label_12)
-#: po/rc.cpp:500 rc.cpp:500
+#: po/rc.cpp:506 rc.cpp:506
msgid "Please choose the folder containing your music collection."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:680
+#. i18n: file: gui/initialsettingswizard.ui:639
#. i18n: ectx: property (text), widget (QLabel, label_6f)
-#: po/rc.cpp:506 rc.cpp:506
+#: po/rc.cpp:512 rc.cpp:512
msgid "Covers, Lyrics, and Streams"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:703
+#. i18n: file: gui/initialsettingswizard.ui:662
#. i18n: ectx: property (text), widget (QLabel, label_5f)
-#: po/rc.cpp:509 rc.cpp:509
+#: po/rc.cpp:515 rc.cpp:515
msgid ""
"<p>Cantata will download missing covers, and lyrics, from the internet.</"
"p><p>For each of these, please confirm whether you wish Cantata to store the "
@@ -4753,56 +4785,52 @@ msgid ""
"folders.</p>"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:772
-#. i18n: ectx: property (text), widget (QLabel, persNote)
-#: po/rc.cpp:521 rc.cpp:521
-msgid ""
-"<i><b>NOTE:</b> If you elect to have Cantata store covers, or lyrics, within "
-"the music folder, and you do not have write access to this folder, then "
-"Cantata will revert to saving the files in your personal cache folder. "
-"However, for streams, if you do not have write access, then you will only be "
-"able to view (and play) the streams stored in the music folder, and not add "
-"(or edit) any streams. If you elect not to store streams within the music "
-"folder, then these will be saved in your local config folder - and will only "
-"be accessible to yourself.</i>"
-msgstr ""
-
-#. i18n: file: gui/initialsettingswizard.ui:801
-#. i18n: ectx: property (text), widget (QLabel, persNote_2)
-#: po/rc.cpp:524 rc.cpp:524
+#. i18n: file: gui/initialsettingswizard.ui:722
+#. i18n: ectx: property (text), widget (NoteLabel, persNote_2)
+#: po/rc.cpp:530 rc.cpp:530
msgid ""
-"<i><b>NOTE:</b> Cantata can only save backdrops and artist images within the "
-"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
-"</i>"
+"Cantata can only save backdrops and artist images within the music folder "
+"hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:830
-#. i18n: ectx: property (text), widget (StateLabel, httpNote)
-#: po/rc.cpp:527 rc.cpp:527
+#. i18n: file: gui/initialsettingswizard.ui:729
+#. i18n: ectx: property (text), widget (NoteLabel, httpNote)
+#: po/rc.cpp:533 rc.cpp:533
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' is set to a HTTP address, and Cantata "
-"currently cannot upload files to external HTTP servers. Therefore, the above "
-"settings should be left un-checked.</i>"
+"The 'Music folder' is set to a HTTP address, and Cantata currently cannot "
+"upload files to external HTTP servers. Therefore, the above settings should "
+"be left un-checked."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:866
+#. i18n: file: gui/initialsettingswizard.ui:759
#. i18n: ectx: property (text), widget (QLabel, label_6)
-#: po/rc.cpp:530 rc.cpp:530
+#: po/rc.cpp:536 rc.cpp:536
msgid "Finished!"
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:889
+#. i18n: file: gui/initialsettingswizard.ui:782
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:533 rc.cpp:533
+#: po/rc.cpp:539 rc.cpp:539
msgid ""
"Cantata is now configured!<br/><br/>Cantata's configuration dialog maybe "
"used to customise Cantata's appearance, as well as to add extra MPD hosts, "
"etc."
msgstr ""
-#. i18n: file: gui/initialsettingswizard.ui:930
+#. i18n: file: gui/initialsettingswizard.ui:814
+#. i18n: ectx: property (text), widget (NoteLabel, albumArtistsNoteLabel)
+#: po/rc.cpp:542 rc.cpp:542
+msgid ""
+"Cantata will groups tracks into albums by using the 'AlbumArtist' tag if it "
+"is set, otherwise it will fallback to the 'Artist' tag. If you have albums "
+"with multiple artists, you <b>must</b> set the 'AlbumArtist' tag for the "
+"grouping to function correctly. It is suggested to use 'Various Artists' in "
+"this scenario."
+msgstr ""
+
+#. i18n: file: gui/initialsettingswizard.ui:846
#. i18n: ectx: property (text), widget (QLabel, groupWarningLabel)
-#: po/rc.cpp:536 rc.cpp:536
+#: po/rc.cpp:545 rc.cpp:545
msgid ""
"<b>Warning:</b> You are not currently a member of the 'users' group. Cantata "
"will function better (saving of album covers, lyrics, etc. with the correct "
@@ -4813,258 +4841,295 @@ msgstr ""
#. i18n: file: gui/interfacesettings.ui:36
#. i18n: ectx: attribute (title), widget (QWidget, sidebarTab)
-#: po/rc.cpp:539 rc.cpp:539
+#: po/rc.cpp:548 rc.cpp:548
msgid "Sidebar"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
-#: po/rc.cpp:542 rc.cpp:542
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#. i18n: file: gui/interfacesettings.ui:42
+#. i18n: ectx: property (title), widget (QGroupBox, viewsGroup)
+#. i18n: file: gui/interfacesettings.ui:135
+#. i18n: ectx: attribute (title), widget (QWidget, tab)
+#: po/rc.cpp:551 po/rc.cpp:578 rc.cpp:551 rc.cpp:578
msgid "Views"
msgstr ""
#. i18n: file: gui/interfacesettings.ui:48
#. i18n: ectx: property (text), widget (QLabel, label_2)
-#: po/rc.cpp:545 rc.cpp:545
+#: po/rc.cpp:554 rc.cpp:554
msgid "Use the checkboxes below to configure the list of active views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:77
-#. i18n: ectx: property (text), widget (StateLabel, sbPlayQueueLabel)
-#: po/rc.cpp:548 rc.cpp:548
+#. i18n: file: gui/interfacesettings.ui:61
+#. i18n: ectx: property (text), widget (NoteLabel, sbPlayQueueLabel)
+#: po/rc.cpp:557 rc.cpp:557
msgid ""
-"<i><b>NOTE:</b> By default, the play queue appears to the side of the other "
-"views. If you enable the option above, then it will be merged into the "
-"sidebar as per other views.</i>"
+"By default, the play queue appears to the side of the other views, and the "
+"Info view is accessible by pressing its icon in the main toolbar. Checking "
+"the appropriate option above will cause the view to be merged into the "
+"sidebar as per other views."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:109
-#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel)
-#: po/rc.cpp:551 rc.cpp:551
-msgid ""
-"<i><b>NOTE:</b> By default, the 'Info' (current song information) view is "
-"accessible by pressing its icon in the main toolbar. If you enable the "
-"option above, then it will be merged into the sidebar as per other views.</i>"
-msgstr ""
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#. i18n: file: gui/interfacesettings.ui:82
+#. i18n: ectx: property (text), widget (BuddyLabel, sbStyleLabel)
+#. i18n: file: gui/interfacesettings.ui:153
+#. i18n: ectx: property (text), widget (BuddyLabel, label)
+#. i18n: file: gui/interfacesettings.ui:195
+#. i18n: ectx: property (text), widget (BuddyLabel, label_xx)
+#. i18n: file: gui/interfacesettings.ui:236
+#. i18n: ectx: property (text), widget (BuddyLabel, label_3)
+#. i18n: file: gui/interfacesettings.ui:359
+#. i18n: ectx: property (text), widget (BuddyLabel, playQueueViewLabel)
+#: po/rc.cpp:563 po/rc.cpp:584 po/rc.cpp:596 po/rc.cpp:605 po/rc.cpp:632
+#: rc.cpp:563 rc.cpp:584 rc.cpp:596 rc.cpp:605 rc.cpp:632
+msgid "Style:"
+msgstr "视图:"
-#. i18n: file: gui/interfacesettings.ui:150
+#. i18n: file: gui/interfacesettings.ui:95
#. i18n: ectx: property (text), widget (BuddyLabel, sbPositionLabel)
-#: po/rc.cpp:560 rc.cpp:560
+#: po/rc.cpp:566 rc.cpp:566
msgid "Position:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:163
+#. i18n: file: gui/interfacesettings.ui:108
#. i18n: ectx: property (text), widget (QCheckBox, sbIconsOnly)
-#: po/rc.cpp:563 rc.cpp:563
+#: po/rc.cpp:569 rc.cpp:569
msgid "Only show icons, no text"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:170
+#. i18n: file: gui/interfacesettings.ui:115
#. i18n: ectx: property (text), widget (QCheckBox, sbMonoIcons)
-#: po/rc.cpp:566 rc.cpp:566
+#: po/rc.cpp:572 rc.cpp:572
msgid "Use monochrome icons"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:177
+#. i18n: file: gui/interfacesettings.ui:122
#. i18n: ectx: property (text), widget (QCheckBox, sbAutoHide)
-#: po/rc.cpp:569 rc.cpp:569
+#: po/rc.cpp:575 rc.cpp:575
msgid "Auto-hide"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#. i18n: file: gui/interfacesettings.ui:212
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5b)
-#. i18n: file: gui/interfacesettings.ui:303
-#. i18n: ectx: property (text), widget (BuddyLabel, label_5c)
-#: po/rc.cpp:578 po/rc.cpp:597 rc.cpp:578 rc.cpp:597
-msgid "Covers:"
-msgstr "封面:"
-
-#. i18n: file: gui/interfacesettings.ui:225
-#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
-#: po/rc.cpp:581 rc.cpp:581
-msgid "Show artist images"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:232
+#. i18n: file: gui/interfacesettings.ui:166
#. i18n: ectx: property (text), widget (QCheckBox, libraryYear)
-#: po/rc.cpp:584 rc.cpp:584
+#: po/rc.cpp:587 rc.cpp:587
msgid "Sort albums by year"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, label_8)
-#: po/rc.cpp:587 rc.cpp:587
-msgid ""
-"<i><b>NOTE:</b> When looking for artist images, Cantata will look for either "
-"artist.jpg, artist.png, 'Artist'.jpg, or 'Artist'.png,\n"
-"within the folder of the current track, or within its parent folder. If no "
-"image is found, Cantata will attempt to download one.</i>"
+#. i18n: file: gui/interfacesettings.ui:173
+#. i18n: ectx: property (text), widget (QCheckBox, libraryArtistImage)
+#: po/rc.cpp:590 rc.cpp:590
+msgid "Show artist images"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:316
+#. i18n: file: gui/interfacesettings.ui:208
#. i18n: ectx: property (text), widget (BuddyLabel, label_5x)
-#: po/rc.cpp:600 rc.cpp:600
-msgid "Sort albums:"
-msgstr "专辑分类:"
+#: po/rc.cpp:599 rc.cpp:599
+msgid "Sort:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#. i18n: file: gui/interfacesettings.ui:352
+#. i18n: file: gui/interfacesettings.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, playListsStartClosed)
-#. i18n: file: gui/interfacesettings.ui:454
+#. i18n: file: gui/interfacesettings.ui:372
#. i18n: ectx: property (text), widget (QCheckBox, playQueueStartClosed)
-#: po/rc.cpp:609 po/rc.cpp:636 rc.cpp:609 rc.cpp:636
+#: po/rc.cpp:608 po/rc.cpp:635 rc.cpp:608 rc.cpp:635
msgid "Initially collapse albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:360
-#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
-#: po/rc.cpp:612 rc.cpp:612
+#. i18n: file: gui/interfacesettings.ui:259
+#. i18n: ectx: property (title), widget (QGroupBox, otherViewGroupBox)
+#: po/rc.cpp:611 rc.cpp:611
msgid "Other Views"
msgstr "其他视图"
-#. i18n: file: gui/interfacesettings.ui:369
+#. i18n: file: gui/interfacesettings.ui:271
#. i18n: ectx: property (text), widget (BuddyLabel, folderViewLabel)
-#: po/rc.cpp:615 rc.cpp:615
-msgid "Folder view style:"
-msgstr "文件夹视图:"
+#: po/rc.cpp:614 rc.cpp:614
+msgid "Folders:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:382
+#. i18n: file: gui/interfacesettings.ui:284
#. i18n: ectx: property (text), widget (BuddyLabel, streamsViewLabel)
-#: po/rc.cpp:618 rc.cpp:618
-msgid "Streams view style:"
-msgstr "流媒体视图:"
+#: po/rc.cpp:617 rc.cpp:617
+msgid "Streams:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:395
+#. i18n: file: gui/interfacesettings.ui:297
#. i18n: ectx: property (text), widget (BuddyLabel, onlineViewLabel)
-#: po/rc.cpp:621 rc.cpp:621
-msgid "Online view style:"
-msgstr "在线视图:"
+#: po/rc.cpp:620 rc.cpp:620
+msgid "Online:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:408
+#. i18n: file: gui/interfacesettings.ui:310
#. i18n: ectx: property (text), widget (BuddyLabel, devicesViewLabel)
-#: po/rc.cpp:624 rc.cpp:624
-msgid "Devices view style:"
-msgstr "设备查看模式:"
+#: po/rc.cpp:623 rc.cpp:623
+msgid "Devices:"
+msgstr ""
-#. i18n: file: gui/interfacesettings.ui:421
+#. i18n: file: gui/interfacesettings.ui:323
#. i18n: ectx: property (text), widget (QLabel, label_5)
-#: po/rc.cpp:627 rc.cpp:627
-msgid "Search view style:"
-msgstr ""
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#. i18n: file: gui/interfacesettings.ui:323
+#. i18n: ectx: property (text), widget (QLabel, label_5)
+#. i18n: file: support/shortcutssettingswidget.ui:22
+#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
+#: po/rc.cpp:626 po/rc.cpp:975 rc.cpp:626 rc.cpp:975
+msgid "Search:"
+msgstr "搜索:"
-#. i18n: file: gui/interfacesettings.ui:461
+#. i18n: file: gui/interfacesettings.ui:379
#. i18n: ectx: property (text), widget (QCheckBox, playQueueAutoExpand)
-#: po/rc.cpp:639 rc.cpp:639
+#: po/rc.cpp:638 rc.cpp:638
msgid "Automatically expand current album"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:468
+#. i18n: file: gui/interfacesettings.ui:386
#. i18n: ectx: property (text), widget (QCheckBox, playQueueScroll)
-#: po/rc.cpp:642 rc.cpp:642
+#: po/rc.cpp:641 rc.cpp:641
msgid "Scroll to current track"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:475
+#. i18n: file: gui/interfacesettings.ui:393
#. i18n: ectx: property (text), widget (QCheckBox, playQueueConfirmClear)
-#: po/rc.cpp:645 rc.cpp:645
+#: po/rc.cpp:644 rc.cpp:644
msgid "Prompt before clearing"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:501
+#. i18n: file: gui/interfacesettings.ui:400
+#. i18n: ectx: property (text), widget (QCheckBox, playQueueSearch)
+#: po/rc.cpp:647 rc.cpp:647
+msgid "Separate action (and shortcut) for play queue search"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:442
#. i18n: ectx: property (text), widget (QRadioButton, playQueueBackground_cover)
-#: po/rc.cpp:654 rc.cpp:654
+#: po/rc.cpp:656 rc.cpp:656
msgid "Current album cover"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:648
+#. i18n: file: gui/interfacesettings.ui:589
+#. i18n: ectx: attribute (title), widget (QWidget, toolbarTab)
+#: po/rc.cpp:675 rc.cpp:675
+msgid "Toolbar"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:598
+#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
+#: po/rc.cpp:678 rc.cpp:678
+msgid "Show stop button"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:605
+#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
+#: po/rc.cpp:681 rc.cpp:681
+msgid "Show cover of current track"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:612
+#. i18n: ectx: property (text), widget (QCheckBox, showRatingWidget)
+#: po/rc.cpp:684 rc.cpp:684
+msgid "Show track rating"
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:620
#. i18n: ectx: attribute (title), widget (QWidget, tab_7)
-#: po/rc.cpp:673 rc.cpp:673
+#: po/rc.cpp:687 rc.cpp:687
msgid "External"
msgstr "外部"
-#. i18n: file: gui/interfacesettings.ui:654
+#. i18n: file: gui/interfacesettings.ui:626
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayPopup)
-#: po/rc.cpp:676 rc.cpp:676
+#: po/rc.cpp:690 rc.cpp:690
msgid "Show popup messages when changing tracks"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:664
+#. i18n: file: gui/interfacesettings.ui:636
#. i18n: ectx: property (text), widget (QCheckBox, systemTrayCheckBox)
-#: po/rc.cpp:679 rc.cpp:679
+#: po/rc.cpp:693 rc.cpp:693
msgid "Show icon in notification area"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:674
+#. i18n: file: gui/interfacesettings.ui:646
#. i18n: ectx: property (text), widget (QCheckBox, minimiseOnClose)
-#: po/rc.cpp:682 rc.cpp:682
+#: po/rc.cpp:696 rc.cpp:696
msgid "Minimize to notification area when closed"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:681
+#. i18n: file: gui/interfacesettings.ui:653
#. i18n: ectx: property (title), widget (QGroupBox, startupState)
-#: po/rc.cpp:685 rc.cpp:685
+#: po/rc.cpp:699 rc.cpp:699
msgid "On Start-up"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:687
+#. i18n: file: gui/interfacesettings.ui:659
#. i18n: ectx: property (text), widget (QRadioButton, startupStateShow)
-#: po/rc.cpp:688 rc.cpp:688
+#: po/rc.cpp:702 rc.cpp:702
msgid "Show main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:694
+#. i18n: file: gui/interfacesettings.ui:666
#. i18n: ectx: property (text), widget (QRadioButton, startupStateHide)
-#: po/rc.cpp:691 rc.cpp:691
+#: po/rc.cpp:705 rc.cpp:705
msgid "Hide main window"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:701
+#. i18n: file: gui/interfacesettings.ui:673
#. i18n: ectx: property (text), widget (QRadioButton, startupStateRestore)
-#: po/rc.cpp:694 rc.cpp:694
+#: po/rc.cpp:708 rc.cpp:708
msgid "Restore previous state"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:725
+#. i18n: file: gui/interfacesettings.ui:697
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
-#: po/rc.cpp:697 streams/streamproviderlistdialog.cpp:216 rc.cpp:697
+#: po/rc.cpp:711 streams/streamproviderlistdialog.cpp:216 rc.cpp:711
msgid "General"
msgstr "流派"
-#. i18n: file: gui/interfacesettings.ui:736
+#. i18n: file: gui/interfacesettings.ui:708
#. i18n: ectx: property (toolTip), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:700 rc.cpp:700
+#: po/rc.cpp:714 rc.cpp:714
msgid "Place albums with only one track under 'Various Artists/Single Tracks'"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:739
+#. i18n: file: gui/interfacesettings.ui:711
#. i18n: ectx: property (text), widget (QCheckBox, groupSingle)
-#: po/rc.cpp:703 rc.cpp:703
+#: po/rc.cpp:717 rc.cpp:717
msgid "Group single track albums"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:746
+#. i18n: file: gui/interfacesettings.ui:718
#. i18n: ectx: property (toolTip), widget (QCheckBox, useComposer)
-#: po/rc.cpp:706 rc.cpp:706
+#: po/rc.cpp:720 rc.cpp:720
msgid ""
"Use the 'Composer' tag, and not 'Artist' or 'Album Artist', to group albums."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:749
+#. i18n: file: gui/interfacesettings.ui:721
#. i18n: ectx: property (text), widget (QCheckBox, useComposer)
-#: po/rc.cpp:709 rc.cpp:709
+#: po/rc.cpp:723 rc.cpp:723
msgid "Group albums by composer"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:756
+#. i18n: file: gui/interfacesettings.ui:728
#. i18n: ectx: property (toolTip), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:712 rc.cpp:712
+#: po/rc.cpp:726 rc.cpp:726
msgid ""
"<p>When adding artists, or albums to the playqueue, or editing tags, etc, "
"then only use songs that pass the current Genre or string filter.</p><p>e.g. "
@@ -5073,39 +5138,33 @@ msgid ""
"to 'Metal'."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:759
+#. i18n: file: gui/interfacesettings.ui:731
#. i18n: ectx: property (text), widget (QCheckBox, filteredOnly)
-#: po/rc.cpp:715 rc.cpp:715
+#: po/rc.cpp:729 rc.cpp:729
msgid "Only act on songs that pass filtering"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:766
+#. i18n: file: gui/interfacesettings.ui:738
#. i18n: ectx: property (text), widget (QCheckBox, fetchCovers)
-#: po/rc.cpp:718 rc.cpp:718
+#: po/rc.cpp:732 rc.cpp:732
msgid "Fetch missing covers from Last.fm"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:773
-#. i18n: ectx: property (text), widget (QCheckBox, cacheScaledCovers)
-#: po/rc.cpp:721 rc.cpp:721
-msgid "Cache scaled covers"
-msgstr ""
-
-#. i18n: file: gui/interfacesettings.ui:780
+#. i18n: file: gui/interfacesettings.ui:745
#. i18n: ectx: property (text), widget (QCheckBox, showDeleteAction)
-#: po/rc.cpp:724 rc.cpp:724
+#: po/rc.cpp:735 rc.cpp:735
msgid "Show delete action in context menus"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:787
+#. i18n: file: gui/interfacesettings.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, forceSingleClick)
-#: po/rc.cpp:727 rc.cpp:727
+#: po/rc.cpp:738 rc.cpp:738
msgid "Enforce single-click activation of items"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:795
+#. i18n: file: gui/interfacesettings.ui:760
#. i18n: ectx: property (toolTip), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:731 rc.cpp:731
+#: po/rc.cpp:742 rc.cpp:742
#, no-c-format
msgid ""
"<p>This will change Cantata's interface as detailed:\n"
@@ -5113,155 +5172,160 @@ msgid ""
"be 'flickable'</li><li>To drag items, you will need to 'touch' the top-left "
"corner</li><li>Scrollbars will only be a few pixels wide</li><li>Actions (e."
"g. 'Add To Play Queue') will always be visible (not just when item is under "
-"mouse)</li><li>Spin buttons with have + and - buttons at the side of the "
+"mouse)</li><li>Spin buttons will have + and - buttons at the side of the "
"text field</li></ul></p>"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:798
+#. i18n: file: gui/interfacesettings.ui:763
#. i18n: ectx: property (text), widget (QCheckBox, touchFriendly)
-#: po/rc.cpp:735 rc.cpp:735
+#: po/rc.cpp:746 rc.cpp:746
msgid "Make interface more touch friendly"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:805
-#. i18n: ectx: property (text), widget (QCheckBox, showStopButton)
-#: po/rc.cpp:738 rc.cpp:738
-msgid "Show stop button in toolbar"
+#. i18n: file: gui/interfacesettings.ui:770
+#. i18n: ectx: property (text), widget (QCheckBox, infoTooltips)
+#: po/rc.cpp:749 rc.cpp:749
+msgid "Show song information tooltips"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:812
-#. i18n: ectx: property (text), widget (QCheckBox, showCoverWidget)
-#: po/rc.cpp:741 rc.cpp:741
-msgid "Show cover of current track in toolbar"
+#. i18n: file: gui/interfacesettings.ui:777
+#. i18n: ectx: property (text), widget (QCheckBox, retinaSupport)
+#: po/rc.cpp:752 rc.cpp:752
+msgid "Support retina displays"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:819
+#. i18n: file: gui/interfacesettings.ui:784
#. i18n: ectx: property (text), widget (BuddyLabel, langLabel)
-#: po/rc.cpp:744 rc.cpp:744
+#: po/rc.cpp:755 rc.cpp:755
msgid "Language:"
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:850
-#. i18n: ectx: property (text), widget (StateLabel, singleClickLabel)
-#: po/rc.cpp:747 rc.cpp:747
+#. i18n: file: gui/interfacesettings.ui:799
+#. i18n: ectx: property (text), widget (NoteLabel, singleClickLabel)
+#: po/rc.cpp:758 rc.cpp:758
msgid ""
-"<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
-"setting will require a re-start of Cantata.</i>"
+"Changing the 'Enforce single-click activation of items' setting will require "
+"a re-start of Cantata."
+msgstr ""
+
+#. i18n: file: gui/interfacesettings.ui:806
+#. i18n: ectx: property (text), widget (NoteLabel, langNoteLabel)
+#: po/rc.cpp:761 rc.cpp:761
+msgid "Changing the language setting will require a re-start of Cantata."
msgstr ""
-"<i><b>注意:</b> 启用\"强制使用单击激活项目\"后必须重新启动 Cantata。</i>"
-#. i18n: file: gui/interfacesettings.ui:882
-#. i18n: ectx: property (text), widget (StateLabel, langNoteLabel)
-#: po/rc.cpp:750 rc.cpp:750
+#. i18n: file: gui/interfacesettings.ui:813
+#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel)
+#: po/rc.cpp:764 rc.cpp:764
msgid ""
-"<i><b>NOTE:</b> Changing the language setting will require a re-start of "
-"Cantata.</i>"
+"Changing the 'touch friendly' setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/interfacesettings.ui:914
-#. i18n: ectx: property (text), widget (StateLabel, touchFriendlyNoteLabel)
-#: po/rc.cpp:753 rc.cpp:753
+#. i18n: file: gui/interfacesettings.ui:820
+#. i18n: ectx: property (text), widget (NoteLabel, retinaSupportNoteLabel)
+#: po/rc.cpp:767 rc.cpp:767
msgid ""
-"<i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-"
-"start of Cantata.</i>"
+"Enabling support for retina displays will produce sharper icons on the "
+"retina display, but may produce less sharp icons on non-retina displays. "
+"Changing this setting will require a re-start of Cantata."
msgstr ""
-#. i18n: file: gui/mainwindow.ui:197
+#. i18n: file: gui/mainwindow.ui:181
#. i18n: ectx: property (text), widget (QLabel, dynamicLabel)
-#: po/rc.cpp:756 rc.cpp:756
+#: po/rc.cpp:770 rc.cpp:770
msgid "[Dynamic]"
msgstr "[动态]"
-#. i18n: file: gui/mainwindow.ui:220
+#. i18n: file: gui/mainwindow.ui:204
#. i18n: ectx: property (text), widget (UrlLabel, fullScreenLabel)
-#: po/rc.cpp:759 rc.cpp:759
+#: po/rc.cpp:773 rc.cpp:773
msgid "Exit Full Screen"
msgstr ""
#. i18n: file: gui/playbacksettings.ui:38
#. i18n: ectx: property (text), widget (BuddyLabel, label_6b)
-#: po/rc.cpp:765 rc.cpp:765
+#: po/rc.cpp:779 rc.cpp:779
msgid "Fadeout on stop:"
msgstr "停止时淡出:"
#. i18n: file: gui/playbacksettings.ui:58
#. i18n: ectx: property (text), widget (QCheckBox, stopOnExit)
-#: po/rc.cpp:774 rc.cpp:774
+#: po/rc.cpp:788 rc.cpp:788
msgid "Stop playback on exit"
msgstr "退出时停止回放"
#. i18n: file: gui/playbacksettings.ui:65
#. i18n: ectx: property (text), widget (QCheckBox, inhibitSuspend)
-#: po/rc.cpp:777 rc.cpp:777
+#: po/rc.cpp:791 rc.cpp:791
msgid "Inhibit suspend whilst playing"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:88
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:780 rc.cpp:780
+#. i18n: file: gui/playbacksettings.ui:72
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:794 rc.cpp:794
msgid ""
-"<i><b>NOTE:</b> If you press and hold the stop button, then a menu will be "
-"shown allowing you to choose whether to stop playback now, or after the "
-"current track.</i>"
+"If you press and hold the stop button, then a menu will be shown allowing "
+"you to choose whether to stop playback now, or after the current track. (The "
+"stop button can be enabled in the Interface/Toolbar section)"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:104
+#. i18n: file: gui/playbacksettings.ui:82
#. i18n: ectx: property (title), widget (QGroupBox, outputBox)
-#: po/rc.cpp:783 rc.cpp:783
+#: po/rc.cpp:797 rc.cpp:797
msgid "Output"
msgstr "输出"
-#. i18n: file: gui/playbacksettings.ui:128
+#. i18n: file: gui/playbacksettings.ui:106
#. i18n: ectx: property (text), widget (BuddyLabel, crossfadingLabel)
-#: po/rc.cpp:789 rc.cpp:789
+#: po/rc.cpp:803 rc.cpp:803
msgid "Crossfade between tracks:"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:138
+#. i18n: file: gui/playbacksettings.ui:116
#. i18n: ectx: property (suffix), widget (QSpinBox, crossfading)
-#: po/rc.cpp:792 rc.cpp:792
+#: po/rc.cpp:806 rc.cpp:806
msgid " s"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:151
+#. i18n: file: gui/playbacksettings.ui:129
#. i18n: ectx: property (text), widget (BuddyLabel, replayGainLabel)
-#: po/rc.cpp:798 rc.cpp:798
+#: po/rc.cpp:812 rc.cpp:812
msgid "Replay gain:"
msgstr "播放增益:"
-#. i18n: file: gui/playbacksettings.ui:194
+#. i18n: file: gui/playbacksettings.ui:172
#. i18n: ectx: property (text), widget (UrlLabel, aboutReplayGain)
-#: po/rc.cpp:801 rc.cpp:801
+#: po/rc.cpp:815 rc.cpp:815
msgid "About replay gain"
msgstr ""
-#. i18n: file: gui/playbacksettings.ui:203
+#. i18n: file: gui/playbacksettings.ui:181
#. i18n: ectx: property (text), widget (QLabel, outputsViewLabel)
-#: po/rc.cpp:804 rc.cpp:804
+#: po/rc.cpp:818 rc.cpp:818
msgid "Use the checkboxes below to control the active outputs."
msgstr ""
#. i18n: file: gui/serversettings.ui:35
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:807 rc.cpp:807
+#: po/rc.cpp:821 rc.cpp:821
msgid "Collection:"
msgstr ""
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
#. i18n: file: gui/serversettings.ui:142
#. i18n: ectx: property (text), widget (BuddyLabel, coverNameLabel)
-#. i18n: file: gui/serversettings.ui:328
+#. i18n: file: gui/serversettings.ui:246
#. i18n: ectx: property (text), widget (BuddyLabel, basicCoverNameLabel)
-#: po/rc.cpp:825 po/rc.cpp:847 rc.cpp:825 rc.cpp:847
+#: po/rc.cpp:839 po/rc.cpp:861 rc.cpp:839 rc.cpp:861
msgid "Cover filename:"
msgstr "封面名称:"
#. i18n: file: gui/serversettings.ui:152
#. i18n: ectx: property (toolTip), widget (LineEdit, coverName)
-#: po/rc.cpp:829 rc.cpp:829
+#: po/rc.cpp:843 rc.cpp:843
#, no-c-format
msgid ""
"<p>Filename (without extension) to save downloaded covers as.<br/>If left "
@@ -5272,138 +5336,138 @@ msgstr ""
#. i18n: file: gui/serversettings.ui:159
#. i18n: ectx: property (text), widget (BuddyLabel, streamUrlLabel)
-#: po/rc.cpp:832 rc.cpp:832
+#: po/rc.cpp:846 rc.cpp:846
msgid "HTTP stream URL:"
msgstr ""
-#. i18n: file: gui/serversettings.ui:190
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel)
-#: po/rc.cpp:835 rc.cpp:835
+#. i18n: file: gui/serversettings.ui:174
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel)
+#: po/rc.cpp:849 rc.cpp:849
msgid ""
-"<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
-"(either the value specified above, or <code>cover.jpg / cover.png</code> if "
-"not set). If you also have write permissions to this folder (and it's sub-"
-"folders), then Cantata will save any downloaded covers into the respective "
-"album folder.</i>"
+"The 'Music folder' setting is used to lookup cover-art (either the value "
+"specified above, or <code>cover.jpg / cover.png</code> if not set). If you "
+"also have write permissions to this folder (and it's sub-folders), then "
+"Cantata will save any downloaded covers into the respective album folder."
msgstr ""
-"<i><b>注意:</b> '音乐文件夹' 将被用来查找专辑封面 (如果未指定值,默认使用 "
-"<code>cover.jpg/cover.png</code>). 如果有文件夹及子文件的写入权限,Cantata 将"
-"自动下载专辑封面到专辑文件夹</i>"
-#. i18n: file: gui/serversettings.ui:264
-#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel)
-#: po/rc.cpp:841 rc.cpp:841
+#. i18n: file: gui/serversettings.ui:188
+#. i18n: ectx: property (text), widget (NoteLabel, streamUrlNoteLabel)
+#: po/rc.cpp:855 rc.cpp:855
msgid ""
-"<i><b>NOTE:</b> 'HTTP Stream URL' is only of use if you have MPD configured "
-"to output to a HTTP stream, and you wish Cantata to be able to play that "
-"stream.</i>"
+"'HTTP Stream URL' is only of use if you have MPD configured to output to a "
+"HTTP stream, and you wish Cantata to be able to play that stream."
msgstr ""
-#. i18n: file: gui/serversettings.ui:343
-#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel)
-#: po/rc.cpp:850 rc.cpp:850
+#. i18n: file: gui/serversettings.ui:261
+#. i18n: ectx: property (text), widget (NoteLabel, basicMusicFolderNoteLabel)
+#: po/rc.cpp:864 rc.cpp:864
msgid ""
-"<i><b>NOTE:</b> If you change the 'Music folder' setting, then you will need "
-"to manually update the music database. This can be performed by pressing the "
-"'Refresh Database' button in the 'Artists' or 'Albums' views.</i>"
+"If you change the 'Music folder' setting, then you will need to manually "
+"update the music database. This can be performed by pressing the 'Refresh "
+"Database' button in the 'Artists' or 'Albums' views."
msgstr ""
-#. i18n: file: gui/serversettings.ui:372
-#. i18n: ectx: property (text), widget (QLabel, musicFolderNoteLabel_2)
-#: po/rc.cpp:853 rc.cpp:853
+#. i18n: file: gui/serversettings.ui:268
+#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2)
+#: po/rc.cpp:867 rc.cpp:867
msgid ""
-"<i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata "
-"will use a default of <code>cover</code> </i>"
+"If no setting is specified for 'Cover filename, then Cantata will use a "
+"default of <code>cover</code>"
msgstr ""
#. i18n: file: http/httpserversettings.ui:25
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:856 rc.cpp:856
+#: po/rc.cpp:870 rc.cpp:870
msgid "Network interface:"
msgstr ""
-#. i18n: file: http/httpserversettings.ui:57
-#. i18n: ectx: property (text), widget (QLabel, label_4)
-#: po/rc.cpp:859 rc.cpp:859
+#. i18n: file: http/httpserversettings.ui:40
+#. i18n: ectx: property (text), widget (NoteLabel, label_4)
+#: po/rc.cpp:873 rc.cpp:873
msgid ""
-"<i><b>NOTE:</b> MPD usually only plays songs that are stored within its "
-"folders. Cantata contains a minimal HTTP server that can be used to serve "
-"other files to MPD. This, however, will only work whilst Cantata is running."
-"<br/><br/>\n"
-"<b>NOTE:</b> If you choose 'Local loopback' for 'Network interface', then "
-"MPD <b>must</b> also be on this computer.</i>"
+"MPD usually only plays songs that are stored within its folders. Cantata "
+"contains a minimal HTTP server that can be used to serve other files to MPD. "
+"This, however, will only work whilst Cantata is running."
+msgstr ""
+
+#. i18n: file: http/httpserversettings.ui:47
+#. i18n: ectx: property (text), widget (NoteLabel, label_4b)
+#: po/rc.cpp:876 rc.cpp:876
+msgid ""
+"If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> "
+"also be on this computer."
msgstr ""
#. i18n: file: network/proxysettings.ui:26
#. i18n: ectx: property (text), widget (BuddyLabel, modeLabel)
-#: po/rc.cpp:863 rc.cpp:863
+#: po/rc.cpp:879 rc.cpp:879
msgid "Mode:"
msgstr ""
#. i18n: file: network/proxysettings.ui:50
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:869 rc.cpp:869
+#: po/rc.cpp:885 rc.cpp:885
msgid "HTTP Proxy"
msgstr "HTTP 代理"
#. i18n: file: network/proxysettings.ui:55
#. i18n: ectx: property (text), item, widget (QComboBox, proxyType)
-#: po/rc.cpp:872 rc.cpp:872
+#: po/rc.cpp:888 rc.cpp:888
msgid "SOCKS Proxy"
msgstr "SOCKS 代理"
#. i18n: file: online/onlinesettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:887 rc.cpp:887
+#: po/rc.cpp:903 rc.cpp:903
msgid "Use the checkboxes below to configure the list of active services."
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:29
+#. i18n: file: scrobbling/scrobblingsettings.ui:32
#. i18n: ectx: property (text), widget (BuddyLabel, scrobblerLabel)
-#: po/rc.cpp:893 rc.cpp:893
+#: po/rc.cpp:909 rc.cpp:909
msgid "Scrobble using:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#. i18n: file: scrobbling/scrobblingsettings.ui:72
-#. i18n: ectx: property (text), widget (BuddyLabel, statusLabel)
-#. i18n: file: streams/digitallyimportedsettings.ui:91
+#. i18n: file: scrobbling/scrobblingsettings.ui:88
+#. i18n: ectx: property (text), widget (QLabel, statusLabel)
+#. i18n: file: streams/digitallyimportedsettings.ui:94
#. i18n: ectx: property (text), widget (BuddyLabel, label_5)
-#: po/rc.cpp:902 po/rc.cpp:929 rc.cpp:902 rc.cpp:929
+#: po/rc.cpp:918 po/rc.cpp:945 rc.cpp:918 rc.cpp:945
msgid "Status:"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: scrobbling/scrobblingsettings.ui:103
+#. i18n: file: scrobbling/scrobblingsettings.ui:114
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#. i18n: file: streams/digitallyimportedsettings.ui:122
+#. i18n: file: streams/digitallyimportedsettings.ui:120
#. i18n: ectx: property (text), widget (QPushButton, loginButton)
-#: po/rc.cpp:905 po/rc.cpp:932 streams/digitallyimportedsettings.cpp:138
-#: streams/digitallyimportedsettings.cpp:144 rc.cpp:905 rc.cpp:932
+#: po/rc.cpp:921 po/rc.cpp:948 streams/digitallyimportedsettings.cpp:138
+#: streams/digitallyimportedsettings.cpp:144 rc.cpp:921 rc.cpp:948
msgid "Login"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:122
+#. i18n: file: scrobbling/scrobblingsettings.ui:131
#. i18n: ectx: property (text), widget (QCheckBox, enableScrobbling)
-#: po/rc.cpp:908 rc.cpp:908
+#: po/rc.cpp:924 rc.cpp:924
msgid "Scrobble tracks"
msgstr ""
-#. i18n: file: scrobbling/scrobblingsettings.ui:129
+#. i18n: file: scrobbling/scrobblingsettings.ui:138
#. i18n: ectx: property (text), widget (QCheckBox, showLove)
-#: po/rc.cpp:911 rc.cpp:911
+#: po/rc.cpp:927 rc.cpp:927
msgid "Show 'Love' button"
msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:29
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:914 rc.cpp:914
+#: po/rc.cpp:930 rc.cpp:930
msgid ""
"You can listen for free without an account, but Premium members can listen "
"to higher quality streams without advertisements. Visit <a href=\"http://www."
@@ -5413,133 +5477,149 @@ msgstr ""
#. i18n: file: streams/digitallyimportedsettings.ui:42
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
-#: po/rc.cpp:917 rc.cpp:917
+#: po/rc.cpp:933 rc.cpp:933
msgid "Premium Account"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:78
+#. i18n: file: streams/digitallyimportedsettings.ui:81
#. i18n: ectx: property (text), widget (BuddyLabel, label_4)
-#: po/rc.cpp:926 rc.cpp:926
+#: po/rc.cpp:942 rc.cpp:942
msgid "Stream type:"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:131
+#. i18n: file: streams/digitallyimportedsettings.ui:127
#. i18n: ectx: property (text), widget (QLabel, expiryLabel)
-#: po/rc.cpp:935 rc.cpp:935
+#: po/rc.cpp:951 rc.cpp:951
msgid "Session expiry:"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:161
-#. i18n: ectx: property (text), widget (QLabel, noteLabel)
-#: po/rc.cpp:938 rc.cpp:938
+#. i18n: file: streams/digitallyimportedsettings.ui:157
+#. i18n: ectx: property (text), widget (NoteLabel, noteLabel)
+#: po/rc.cpp:954 rc.cpp:954
msgid ""
-"<i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, "
-"RockRadio.com, and Sky.fm</i>"
+"These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, "
+"and Sky.fm"
msgstr ""
-#. i18n: file: streams/digitallyimportedsettings.ui:174
-#. i18n: ectx: property (text), widget (QLabel, note2Label)
-#: po/rc.cpp:941 rc.cpp:941
+#. i18n: file: streams/digitallyimportedsettings.ui:164
+#. i18n: ectx: property (text), widget (NoteLabel, note2Label)
+#: po/rc.cpp:957 rc.cpp:957
msgid ""
-"<i><b>NOTE:</b> If you enter account details, then a 'DI' status item will "
-"appear under the list of streams. This will indicate if you are logged in or "
-"not</i>"
+"If you enter account details, then a 'DI' status item will appear under the "
+"list of streams. This will indicate if you are logged in or not."
msgstr ""
#. i18n: file: streams/streamssettings.ui:12
#. i18n: ectx: property (text), widget (QLabel, label)
-#: po/rc.cpp:944 rc.cpp:944
+#: po/rc.cpp:960 rc.cpp:960
msgid "Use the checkboxes below to configure the list of active providers."
msgstr ""
#. i18n: file: streams/streamssettings.ui:47
#. i18n: ectx: property (text), widget (QPushButton, configureButton)
-#: po/rc.cpp:947 rc.cpp:947
+#: po/rc.cpp:963 rc.cpp:963
msgid "Configure Provider"
msgstr ""
#. i18n: file: streams/streamssettings.ui:60
#. i18n: ectx: property (text), widget (QPushButton, installButton)
-#: po/rc.cpp:950 rc.cpp:950
+#: po/rc.cpp:966 rc.cpp:966
msgid "Install"
msgstr ""
#. i18n: file: streams/streamssettings.ui:80
-#. i18n: ectx: property (text), widget (QLabel, note)
-#: po/rc.cpp:956 rc.cpp:956
-msgid ""
-"<i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be "
-"removed.</i>"
+#. i18n: ectx: property (text), widget (PlainNoteLabel, note)
+#: po/rc.cpp:972 rc.cpp:972
+msgid "Built-in categories are shown in italic, and these cannot be removed."
msgstr ""
-#. i18n: file: support/shortcutssettingswidget.ui:22
-#. i18n: ectx: property (text), widget (BuddyLabel, label_2)
-#: po/rc.cpp:959 rc.cpp:959
-msgid "Search:"
-msgstr "搜索:"
-
#. i18n: file: support/shortcutssettingswidget.ui:65
#. i18n: ectx: property (title), widget (QGroupBox, actionBox)
-#: po/rc.cpp:962 rc.cpp:962
+#: po/rc.cpp:978 rc.cpp:978
msgid "Shortcut for Selected Action"
msgstr "选定动作的快捷键"
#. i18n: file: support/shortcutssettingswidget.ui:71
#. i18n: ectx: property (text), widget (QRadioButton, useDefault)
-#: po/rc.cpp:965 rc.cpp:965
+#: po/rc.cpp:981 rc.cpp:981
msgid "Default:"
msgstr "默认:"
#. i18n: file: support/shortcutssettingswidget.ui:85
#. i18n: ectx: property (text), widget (QRadioButton, useCustom)
-#: po/rc.cpp:971 rc.cpp:971
+#: po/rc.cpp:987 rc.cpp:987
msgid "Custom:"
msgstr "自定义:"
-#. i18n: file: tags/tageditor.ui:64
+#. i18n: file: tags/tageditor.ui:80
#. i18n: ectx: property (text), widget (StateLabel, albumArtistLabel)
-#: po/rc.cpp:983 rc.cpp:983
+#: po/rc.cpp:999 rc.cpp:999
msgid "Album artist:"
msgstr "专辑艺术家:"
-#. i18n: file: tags/tageditor.ui:103
+#. i18n: file: tags/tageditor.ui:119
#. i18n: ectx: property (text), widget (StateLabel, trackLabel)
-#: po/rc.cpp:992 rc.cpp:992
+#: po/rc.cpp:1008 rc.cpp:1008
msgid "Track number:"
msgstr "音轨号:"
-#. i18n: file: tags/tageditor.ui:116
+#. i18n: file: tags/tageditor.ui:132
#. i18n: ectx: property (text), widget (StateLabel, discLabel)
-#: po/rc.cpp:995 rc.cpp:995
+#: po/rc.cpp:1011 rc.cpp:1011
msgid "Disc number:"
msgstr "碟片序号:"
+#. i18n: file: tags/tageditor.ui:171
+#. i18n: ectx: property (text), widget (StateLabel, ratingLabel)
+#: po/rc.cpp:1020 rc.cpp:1020
+msgid "Rating:"
+msgstr ""
+
#. i18n: file: tags/tageditor.ui:186
-#. i18n: ectx: property (text), widget (QLabel, label_7x)
-#: po/rc.cpp:1007 rc.cpp:1007
+#. i18n: ectx: property (text), widget (QLabel, ratingVarious)
+#: po/rc.cpp:1023 rc.cpp:1023
+msgid "<i>(Various)</i>"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:210
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x)
+#: po/rc.cpp:1029 rc.cpp:1029
+msgid ""
+"Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')"
+msgstr ""
+
+#. i18n: file: tags/tageditor.ui:217
+#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7y)
+#: po/rc.cpp:1032 rc.cpp:1032
msgid ""
-"<i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. "
-"'Rock;Hard Rock')</i>"
+"Ratings are stored in an external database, and <b>not</b> in the song's "
+"file."
msgstr ""
#. i18n: file: tags/trackorganiser.ui:115
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1031 rc.cpp:1031
+#: po/rc.cpp:1056 rc.cpp:1056
msgid "Original Name"
msgstr "原始名称"
#. i18n: file: tags/trackorganiser.ui:120
#. i18n: ectx: property (text), widget (QTreeWidget, files)
-#: po/rc.cpp:1034 rc.cpp:1034
+#: po/rc.cpp:1059 rc.cpp:1059
msgid "New Name"
msgstr "新名称"
-#: po/rc.cpp:1038 rc.cpp:1038
+#. i18n: file: tags/trackorganiser.ui:137
+#. i18n: ectx: property (text), widget (UrlNoteLabel, ratingsNote)
+#: po/rc.cpp:1065 rc.cpp:1065
+msgid "Ratings will be lost if a file is renamed."
+msgstr ""
+
+#: po/rc.cpp:1066 rc.cpp:1066
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "姓名"
-#: po/rc.cpp:1039 rc.cpp:1039
+#: po/rc.cpp:1067 rc.cpp:1067
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "你的 E-mail"
@@ -5590,7 +5670,7 @@ msgstr ""
#: replaygain/rgdialog.cpp:226 replaygain/rgdialog.cpp:227
#: replaygain/rgdialog.cpp:235 replaygain/rgdialog.cpp:236
-#: streams/streamproviderlistdialog.cpp:388 tags/trackorganiser.cpp:173
+#: streams/streamproviderlistdialog.cpp:370 tags/trackorganiser.cpp:175
msgid "Abort"
msgstr ""
@@ -5600,8 +5680,8 @@ msgstr ""
#: replaygain/rgdialog.cpp:261
msgid ""
-"Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain "
-"tags.</i>"
+"Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags."
+"</i>"
msgstr ""
#: replaygain/rgdialog.cpp:263
@@ -5624,17 +5704,17 @@ msgstr ""
msgid "Reading existing tags..."
msgstr "读取标签..."
-#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:893
+#: replaygain/rgdialog.cpp:392 tags/tageditor.cpp:1169
msgctxt "filename (Corrupt tags?)"
msgid "%1 (Corrupt tags?)"
msgstr ""
-#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:902
+#: replaygain/rgdialog.cpp:405 tags/tageditor.cpp:1178
msgid "Failed to update the tags of the following tracks:"
msgstr "下列歌曲标签更新失败:"
-#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:976
-#: tags/trackorganiser.cpp:548
+#: replaygain/rgdialog.cpp:446 tags/tageditor.cpp:1254
+#: tags/trackorganiser.cpp:557
msgid "Device is not connected."
msgstr "设备未连接."
@@ -5658,63 +5738,63 @@ msgstr ""
msgid "Original: %1"
msgstr ""
-#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:465
+#: replaygain/rgdialog.cpp:628 tags/trackorganiser.cpp:467
msgid "Remove the selected tracks from the list?"
msgstr ""
-#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:466
+#: replaygain/rgdialog.cpp:629 tags/trackorganiser.cpp:468
msgid "Remove Tracks"
msgstr ""
-#: scrobbling/scrobbler.cpp:91
+#: scrobbling/scrobbler.cpp:92
msgid "Invalid service"
msgstr ""
-#: scrobbling/scrobbler.cpp:92
+#: scrobbling/scrobbler.cpp:93
msgid "Invalid method"
msgstr ""
-#: scrobbling/scrobbler.cpp:93
+#: scrobbling/scrobbler.cpp:94
msgid "Authentication failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:94
+#: scrobbling/scrobbler.cpp:95
msgid "Invalid format"
msgstr ""
-#: scrobbling/scrobbler.cpp:95
+#: scrobbling/scrobbler.cpp:96
msgid "Invalid parameters"
msgstr ""
-#: scrobbling/scrobbler.cpp:96
+#: scrobbling/scrobbler.cpp:97
msgid "Invalid resource specified"
msgstr ""
-#: scrobbling/scrobbler.cpp:97
+#: scrobbling/scrobbler.cpp:98
msgid "Operation failed"
msgstr ""
-#: scrobbling/scrobbler.cpp:98
+#: scrobbling/scrobbler.cpp:99
msgid "Invalid session key"
msgstr ""
-#: scrobbling/scrobbler.cpp:99
+#: scrobbling/scrobbler.cpp:100
msgid "Invalid API key"
msgstr ""
-#: scrobbling/scrobbler.cpp:100
+#: scrobbling/scrobbler.cpp:101
msgid "Service offline"
msgstr ""
-#: scrobbling/scrobbler.cpp:101
+#: scrobbling/scrobbler.cpp:102
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
-#: scrobbling/scrobbler.cpp:102
+#: scrobbling/scrobbler.cpp:103
msgid "Rate-limit exceeded"
msgstr ""
-#: scrobbling/scrobbler.cpp:571
+#: scrobbling/scrobbler.cpp:539 scrobbling/scrobbler.cpp:654
msgid "%1 error: %2"
msgstr ""
@@ -5726,29 +5806,29 @@ msgstr ""
msgid "%1: Love Current Track"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:54
+#: scrobbling/scrobblingsettings.cpp:59
msgctxt "scrobbler name (via MPD)"
msgid "%1 (via MPD)"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:66
+#: scrobbling/scrobblingsettings.cpp:78
msgid ""
-"<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such "
-"as %1), then you will need to have this already started and running. Cantata "
-"can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>"
+"If you use a scrobbler which is marked as '(via MPD)' (such as %1), then you "
+"will need to have this already started and running. Cantata can only 'Love' "
+"tracks via this, and cannot enable/disable scrobbling."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:99
+#: scrobbling/scrobblingsettings.cpp:115
#: streams/digitallyimportedsettings.cpp:113
msgid "Authenticating..."
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:123
msgid "Authenticated"
msgstr ""
-#: scrobbling/scrobblingsettings.cpp:116
+#: scrobbling/scrobblingsettings.cpp:132
#: streams/digitallyimportedsettings.cpp:110
#: streams/digitallyimportedsettings.cpp:123
msgid "Not Authenticated"
@@ -5778,27 +5858,27 @@ msgstr ""
msgid "Logout"
msgstr ""
-#: streams/streamdialog.cpp:55
+#: streams/streamdialog.cpp:56
msgid "URL:"
msgstr ""
-#: streams/streamdialog.cpp:61
+#: streams/streamdialog.cpp:62
msgid "Just add to play queue, do not save"
msgstr ""
-#: streams/streamdialog.cpp:62
+#: streams/streamdialog.cpp:63
msgid "Add to play queue, and save to favorites"
msgstr ""
-#: streams/streamdialog.cpp:72
+#: streams/streamdialog.cpp:74
msgid "Add Stream"
msgstr "添加流媒体"
-#: streams/streamdialog.cpp:84
+#: streams/streamdialog.cpp:86
msgid "Edit Stream"
msgstr "编辑流媒体"
-#: streams/streamdialog.cpp:120
+#: streams/streamdialog.cpp:121
msgid "<i><b>ERROR:</b> Invalid protocol</i>"
msgstr "<i><b>错误:</b>协议无效</i>"
@@ -5843,39 +5923,39 @@ msgid "Installing/updating %1"
msgstr ""
#: streams/streamproviderlistdialog.cpp:257
-msgid "Failed to install <b>%1</b>"
+msgid "Failed to install '%1'"
msgstr ""
#: streams/streamproviderlistdialog.cpp:266
-msgid "Failed to download <b>%1</b>"
+msgid "Failed to download '%1'"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:327
-msgid "ListenLive"
+#: streams/streamproviderlistdialog.cpp:356
+msgid "Install/update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:364
-msgid "Install the following?"
+#: streams/streamproviderlistdialog.cpp:358
+msgid "Install the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:374
-msgid "Update the following?"
+#: streams/streamproviderlistdialog.cpp:360
+msgid "Update the selected stream providers?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:381
-#: streams/streamproviderlistdialog.cpp:463
+#: streams/streamproviderlistdialog.cpp:363
+#: streams/streamproviderlistdialog.cpp:445
msgid "Install/Update"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:388
+#: streams/streamproviderlistdialog.cpp:370
msgid "Abort installation/update?"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:446
+#: streams/streamproviderlistdialog.cpp:428
msgid "Downloading %1"
msgstr ""
-#: streams/streamproviderlistdialog.cpp:465
+#: streams/streamproviderlistdialog.cpp:447
msgid "Update all updateable providers"
msgstr ""
@@ -5891,192 +5971,195 @@ msgstr ""
msgid "Add New Stream To Favorites"
msgstr ""
-#: streams/streamspage.cpp:125
+#: streams/streamspage.cpp:124
msgctxt "Service name"
msgid "Digitally Imported"
msgstr ""
-#: streams/streamspage.cpp:203
+#: streams/streamspage.cpp:215
msgid "*.xml *.xml.gz *.cantata|XML Streams"
msgstr ""
-#: streams/streamspage.cpp:203 streams/streamspage.cpp:205
+#: streams/streamspage.cpp:215 streams/streamspage.cpp:217
msgid "Import Streams"
msgstr "导入流媒体"
-#: streams/streamspage.cpp:206
+#: streams/streamspage.cpp:218
msgid "XML Streams (*.xml *.xml.gz *.cantata)"
msgstr ""
-#: streams/streamspage.cpp:223
+#: streams/streamspage.cpp:235
msgid "*.xml|XML Streams"
msgstr ""
-#: streams/streamspage.cpp:223 streams/streamspage.cpp:225
+#: streams/streamspage.cpp:235 streams/streamspage.cpp:237
msgid "Export Streams"
msgstr "导出流媒体"
-#: streams/streamspage.cpp:225
+#: streams/streamspage.cpp:237
msgid "XML Streams (*.xml.gz)"
msgstr ""
-#: streams/streamspage.cpp:237
-msgid "Failed to create <b>%1</b>!"
-msgstr "<b>%1</b> 创建失败!"
+#: streams/streamspage.cpp:249
+msgid "Failed to create '%1'!"
+msgstr ""
-#: streams/streamspage.cpp:254 streams/streamspage.cpp:435
-msgid "Stream already exists!<br/><b>%1</b>"
-msgstr "流媒体已经存在! <br/><b>%1</b>"
+#: streams/streamspage.cpp:266 streams/streamspage.cpp:447
+msgid "Stream '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:256 streams/streamspage.cpp:437
-msgid "A stream named <b>%1</b> already exists!"
-msgstr "已经有名为 <b>%1</b> 的流媒体!"
+#: streams/streamspage.cpp:268 streams/streamspage.cpp:449
+msgid "A stream named '%1' already exists!"
+msgstr ""
-#: streams/streamspage.cpp:275
+#: streams/streamspage.cpp:287
msgid "Bookmark added"
msgstr ""
-#: streams/streamspage.cpp:277
+#: streams/streamspage.cpp:289
msgid "Already bookmarked"
msgstr ""
-#: streams/streamspage.cpp:319
+#: streams/streamspage.cpp:331
msgid "Already in favorites"
msgstr ""
-#: streams/streamspage.cpp:344
-msgid "Reload <b>%1</b> streams?"
+#: streams/streamspage.cpp:356
+msgid "Reload '%1' streams?"
msgstr ""
-#: streams/streamspage.cpp:362
-msgid "Are you sure you wish to remove bookmark to <b>%1</b>?"
+#: streams/streamspage.cpp:374
+msgid "Are you sure you wish to remove bookmark to '%1'?"
msgstr ""
-#: streams/streamspage.cpp:368
-msgid "Are you sure you wish to remove all <b>%1</b> bookmarks?"
+#: streams/streamspage.cpp:380
+msgid "Are you sure you wish to remove all '%1' bookmarks?"
msgstr ""
-#: streams/streamspage.cpp:392
+#: streams/streamspage.cpp:404
msgid "Are you sure you wish to remove the %1 selected streams?"
msgstr "确定移除选择的流媒体 %1 ?"
-#: streams/streamspage.cpp:396 streams/streamssettings.cpp:271
-msgid "Are you sure you wish to remove <b>%1</b>?"
-msgstr "确定要移除 <b>%1</b> ?"
+#: streams/streamspage.cpp:408 streams/streamssettings.cpp:277
+msgid "Are you sure you wish to remove '%1'?"
+msgstr "确定要移除 '%1'?"
-#: streams/streamspage.cpp:503 streams/streamspage.cpp:519
+#: streams/streamspage.cpp:520 streams/streamspage.cpp:536
msgid "Search %1:"
msgstr ""
-#: streams/streamspage.cpp:626
+#: streams/streamspage.cpp:642
msgid "Added '%1'' to favorites"
msgstr ""
-#: streams/streamssettings.cpp:73
+#: streams/streamssettings.cpp:74
msgid "From File..."
msgstr ""
-#: streams/streamssettings.cpp:74
+#: streams/streamssettings.cpp:75
msgid "Download..."
msgstr ""
-#: streams/streamssettings.cpp:133
+#: streams/streamssettings.cpp:134
msgid "*.streams|Cantata Streams"
msgstr ""
-#: streams/streamssettings.cpp:133 streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:134 streams/streamssettings.cpp:136
msgid "Install Streams"
msgstr ""
-#: streams/streamssettings.cpp:135
+#: streams/streamssettings.cpp:136
msgid "Cantata Streams (*.streams)"
msgstr ""
-#: streams/streamssettings.cpp:150
-msgid "A category named <b>%1</b> already exists!<br/>Overwrite?"
+#: streams/streamssettings.cpp:151
+msgid ""
+"A category named '%1' already exists!\n"
+"\n"
+"Overwrite?"
msgstr ""
-#: streams/streamssettings.cpp:176
-msgid "Failed top open package file"
+#: streams/streamssettings.cpp:182
+msgid "Failed top open package file."
msgstr ""
-#: streams/streamssettings.cpp:196 streams/streamssettings.cpp:245
+#: streams/streamssettings.cpp:202 streams/streamssettings.cpp:251
msgid "Invalid file format!"
msgstr ""
-#: streams/streamssettings.cpp:205
+#: streams/streamssettings.cpp:211
msgid "Failed to create stream category folder!"
msgstr ""
-#: streams/streamssettings.cpp:213
+#: streams/streamssettings.cpp:219
msgid "Failed to save stream list!"
msgstr ""
-#: streams/streamssettings.cpp:278
+#: streams/streamssettings.cpp:284
msgid "Failed to remove streams folder!"
msgstr ""
-#: support/dialog.cpp:81
+#: support/dialog.cpp:150
msgid "&OK"
msgstr ""
-#: support/dialog.cpp:82
+#: support/dialog.cpp:151
msgid "&Cancel"
msgstr ""
-#: support/dialog.cpp:83
+#: support/dialog.cpp:152
msgid "&Yes"
msgstr ""
-#: support/dialog.cpp:84
+#: support/dialog.cpp:153
msgid "&No"
msgstr ""
-#: support/dialog.cpp:85
+#: support/dialog.cpp:154
msgid "&Discard"
msgstr ""
-#: support/dialog.cpp:86
+#: support/dialog.cpp:155
msgid "&Save"
msgstr ""
-#: support/dialog.cpp:87
+#: support/dialog.cpp:156
msgid "&Apply"
msgstr ""
-#: support/dialog.cpp:88
+#: support/dialog.cpp:157
msgid "&Close"
msgstr ""
-#: support/dialog.cpp:90
+#: support/dialog.cpp:159
msgid "&Overwrite"
msgstr ""
-#: support/dialog.cpp:91
+#: support/dialog.cpp:160
msgid "&Reset"
msgstr ""
-#: support/dialog.cpp:92
+#: support/dialog.cpp:161
msgid "&Continue"
msgstr ""
-#: support/dialog.cpp:93
+#: support/dialog.cpp:162
msgid "&Delete"
msgstr ""
-#: support/dialog.cpp:94
+#: support/dialog.cpp:163
msgid "&Stop"
msgstr ""
-#: support/dialog.cpp:95
+#: support/dialog.cpp:164
msgid "&Remove"
msgstr ""
-#: support/dialog.cpp:96
+#: support/dialog.cpp:165
msgid "&Previous"
msgstr ""
-#: support/dialog.cpp:97
+#: support/dialog.cpp:166
msgid "&Next"
msgstr ""
@@ -6088,14 +6171,32 @@ msgstr "密码"
msgid "Please enter password:"
msgstr "请输入密码:"
-#: support/messagebox.cpp:50 support/messagebox.cpp:124
+#: support/kmessagewidget.cpp:113 support/osxstyle.cpp:76
+msgid "Close"
+msgstr ""
+
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:174
msgid "Warning"
msgstr "警告"
-#: support/messagebox.cpp:50 support/messagebox.cpp:119
+#: support/messagebox.cpp:94 support/messagebox.cpp:98
+#: support/messagebox.cpp:169
msgid "Question"
msgstr "问题"
+#: support/osxstyle.cpp:75
+msgid "&Window"
+msgstr ""
+
+#: support/osxstyle.cpp:77
+msgid "Minimize"
+msgstr ""
+
+#: support/osxstyle.cpp:78
+msgid "Zoom"
+msgstr ""
+
#: support/pathrequester.cpp:50
msgid "Select Folder"
msgstr "选择文件夹"
@@ -6104,126 +6205,240 @@ msgstr "选择文件夹"
msgid "Select File"
msgstr "选择文件"
-#: support/utils.cpp:397 support/utils.cpp:405
+#: support/utils.cpp:424 support/utils.cpp:432
msgid "%1 B"
msgstr "%1 B"
-#: support/utils.cpp:398
+#: support/utils.cpp:425
msgid "%1 kB"
msgstr ""
-#: support/utils.cpp:399
+#: support/utils.cpp:426
msgid "%1 MB"
msgstr "%1 MB"
-#: support/utils.cpp:401
+#: support/utils.cpp:428
msgid "%1 GB"
msgstr "%1 GB"
-#: support/utils.cpp:406
+#: support/utils.cpp:433
msgid "%1 KiB"
msgstr "%1 KiB"
-#: support/utils.cpp:407
+#: support/utils.cpp:434
msgid "%1 MiB"
msgstr "%1 MiB"
-#: support/utils.cpp:409
+#: support/utils.cpp:436
msgid "%1 GiB"
msgstr "%1 GiB"
-#: support/utils.cpp:609
+#: support/utils.cpp:636
msgid "1 day %2"
msgid_plural "%1 days %2"
msgstr[0] "%1 天 %2"
-#: tags/tageditor.cpp:180
+#: tags/tageditor.cpp:190
+msgid "Tags"
+msgstr "标签"
+
+#: tags/tageditor.cpp:202
msgid "Set 'Album Artist' from 'Artist'"
msgstr ""
-#: tags/tageditor.cpp:291 tags/tageditor.cpp:681
+#: tags/tageditor.cpp:206
+msgid "Read Ratings from File"
+msgstr ""
+
+#: tags/tageditor.cpp:207
+msgid "Write Ratings to File"
+msgstr ""
+
+#: tags/tageditor.cpp:329 tags/tageditor.cpp:857
msgid "All tracks"
msgstr "所有音轨"
-#: tags/tageditor.cpp:457
+#: tags/tageditor.cpp:525
msgid "Apply \"Various Artists\" workaround to <b>all</b> tracks?"
msgstr "应用\"多个艺术家\" 环境到 <b>所有</b> 音轨?"
-#: tags/tageditor.cpp:499
+#: tags/tageditor.cpp:528
+msgid ""
+"<i>This will set 'Album artist' and 'Artist' to \"Various Artists\", and set "
+"'Title' to \"TrackArtist - TrackTitle\"</i>"
+msgstr ""
+"<i>'专辑艺人' 和 '艺术家'将被设置成 '多个艺术家','标题'将被设置为'音轨艺人 "
+"- 音轨标题'。</i>"
+
+#: tags/tageditor.cpp:567
msgid "Revert \"Various Artists\" workaround on <b>all</b> tracks?"
msgstr "确定恢复 \"多个艺术家\" 环境到 <b>所有</b>音轨?"
-#: tags/tageditor.cpp:549
+#: tags/tageditor.cpp:568
+msgid "Revert \"Various Artists\" workaround"
+msgstr "恢复 \"多个艺术家\" 环境"
+
+#: tags/tageditor.cpp:570
+msgid ""
+"<i>Where the 'Album artist' is the same as 'Artist' and the 'Title' is of "
+"the format \"TrackArtist - TrackTitle\", 'Artist' will be taken from 'Title' "
+"and 'Title' itself will be set to just the title. e.g. <br/><br/>If 'Title' "
+"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' "
+"will be set to \"Wobble\"</i>"
+msgstr ""
+
+#: tags/tageditor.cpp:617
msgid ""
"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for <b>all</b> "
"tracks?"
msgstr ""
"获取\"专辑艺人\"标签并应用到\"艺术家(如果为空)\" 环境到 <b>所有</b> 音轨?"
-#: tags/tageditor.cpp:550
+#: tags/tageditor.cpp:618
msgid "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty)?"
msgstr "获取\"专辑艺人\"标签并应用到\"艺术家(如果为空)\" ?"
-#: tags/tageditor.cpp:551
+#: tags/tageditor.cpp:619
msgid "Album Artist from Artist"
msgstr ""
-#: tags/tageditor.cpp:584
+#: tags/tageditor.cpp:652
msgid ""
-"Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
-"'Album' of <b>all</b> tracks?"
-msgstr "<b>所有</b>音轨的'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写?"
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of "
+"<b>all</b> tracks?"
+msgstr ""
-#: tags/tageditor.cpp:617
+#: tags/tageditor.cpp:654
+msgid ""
+"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"
+msgstr ""
+
+#: tags/tageditor.cpp:684
msgid "Adjust the value of each track number by:"
msgstr "调整每个音轨号按:"
-#: tags/tageditor.cpp:675
+#: tags/tageditor.cpp:715
+msgid "Read ratings for all tracks from the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:716
+msgid "Read rating from music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:717 tags/tageditor.cpp:782
+msgid "Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:718
+msgid "Read Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:745
+msgid "Read, and updated, ratings from the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:765
+msgid "Not all Song ratings have been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:766 tags/tageditor.cpp:774
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database. In order to save these into the actual file, Cantata must first "
+"read them from MPD."
+msgstr ""
+
+#: tags/tageditor.cpp:773
+msgid "Song rating has not been read from MPD!"
+msgstr ""
+
+#: tags/tageditor.cpp:780
+msgid "Write ratings for all tracks to the music files?"
+msgstr ""
+
+#: tags/tageditor.cpp:781
+msgid "Write rating to music file?"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Ratings"
+msgstr ""
+
+#: tags/tageditor.cpp:783
+msgid "Write Rating"
+msgstr ""
+
+#: tags/tageditor.cpp:807
+msgid "Failed to write ratings of the following tracks:"
+msgstr ""
+
+#: tags/tageditor.cpp:814
+msgid "Failed to write rating to music file!"
+msgstr ""
+
+#: tags/tageditor.cpp:851
msgid "All tracks [modified]"
msgstr "所有音轨 [已修改]"
-#: tags/tageditor.cpp:677
+#: tags/tageditor.cpp:853
msgid "%1 [modified]"
msgstr "%1 [已修改]"
-#: tags/tageditor.cpp:908
+#: tags/tageditor.cpp:1184
msgid ""
"Would you also like to rename your song files, so as to match your tags?"
msgstr ""
-#: tags/tageditor.cpp:909
+#: tags/tageditor.cpp:1185
msgid "Rename Files"
msgstr ""
-#: tags/trackorganiser.cpp:173
+#: tags/trackorganiser.cpp:175
msgid "Abort renaming of files?"
msgstr ""
-#: tags/trackorganiser.cpp:278
-msgid "Source file does not exist!<br/>%1"
+#: tags/trackorganiser.cpp:280
+msgid "Source file does not exist!"
msgstr ""
-#: tags/trackorganiser.cpp:297
-msgid "Destination file already exists!<br/>%1"
-msgstr "目标文件已存在!<br/>%1"
+#: tags/trackorganiser.cpp:299
+msgid "Destination file already exists!"
+msgstr ""
+
+#: tags/trackorganiser.cpp:321
+msgid "Failed to create destination folder!"
+msgstr ""
-#: tags/trackorganiser.cpp:319
-msgid "Failed to create destination folder!<br/>%1"
-msgstr "文件夹 <br/>%1 创建失败!"
+#: tags/trackorganiser.cpp:342
+msgid "Failed to rename '%1' to '%2'"
+msgstr ""
-#: tags/trackorganiser.cpp:340
-msgid "Failed to rename %1 to %2"
-msgstr "无法把 %1 重命名为 %2"
+#: tags/trackorganiser.cpp:492
+msgid ""
+"Song ratings are not stored in the song files, but within MPD's 'sticker' "
+"database.\n"
+"\n"
+"If you rename a file (or the folder it is within), then the rating "
+"associated with the song will be lost."
+msgstr ""
-#: ubuntu/backend/mpdbackend.cpp:410 widgets/nowplayingwidget.cpp:294
+#: ubuntu/backend/mpdbackend.cpp:409 widgets/nowplayingwidget.cpp:322
msgid "(Stream)"
msgstr "(流媒体)"
-#: widgets/coverwidget.cpp:87
+#: widgets/coverwidget.cpp:75
msgid "<tr><td align=\"right\"><b>Composer:</b></td><td>%1</td></tr>"
msgstr ""
-#: widgets/coverwidget.cpp:89
+#: widgets/coverwidget.cpp:78
+msgid "<tr><td align=\"right\"><b>Performer:</b></td><td>%1</td></tr>"
+msgstr ""
+
+#: widgets/coverwidget.cpp:80
msgid ""
"<tr><td align=\"right\"><b>Artist:</b></td><td>%1</td></tr><tr><td align="
"\"right\"><b>Album:</b></td><td>%2</td></tr><tr><td align=\"right\"><b>Year:"
@@ -6241,7 +6456,7 @@ msgstr ""
msgid "All Genres"
msgstr "所有流派"
-#: widgets/itemview.cpp:628
+#: widgets/itemview.cpp:681
msgid "Go Back"
msgstr ""
@@ -6249,15 +6464,19 @@ msgstr ""
msgid "Menu"
msgstr ""
-#: widgets/playqueueview.cpp:300
+#: widgets/notelabel.cpp:67
+msgid "<i><b>NOTE:</b> %1</i>"
+msgstr ""
+
+#: widgets/playqueueview.cpp:141
msgid "Remove From Play Queue"
msgstr "从播放队列中删除"
-#: widgets/searchwidget.cpp:63
+#: widgets/searchwidget.cpp:70
msgid "Search..."
msgstr ""
-#: widgets/searchwidget.cpp:67
+#: widgets/searchwidget.cpp:72
msgid "Close Search Bar"
msgstr ""
@@ -6271,17 +6490,20 @@ msgstr ""
#: widgets/songdialog.cpp:49
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check Cantata's \"Music folder"
-"\" setting, and MPD's \"music_directory\" setting.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory"
+"\" setting."
msgstr ""
#: widgets/songdialog.cpp:52
msgid ""
-"<p>Cannot access song files!<br/><br/>Please check that the device is still "
-"attached.</p>"
+"Cannot access song files!\n"
+"\n"
+"Please check that the device is still attached."
msgstr ""
-#: widgets/tableview.cpp:88
+#: widgets/tableview.cpp:92
msgid "Stretch Columns To Fit Window"
msgstr ""
@@ -6417,6 +6639,195 @@ msgctxt "Plural (N!=1)"
msgid "%1 Updates available"
msgstr ""
+#~ msgid ""
+#~ "There is insufficient space left on the destination device.\n"
+#~ "The selected songs consume %1, but there is only %2 left.\n"
+#~ "The songs will need to be transcoded to a smaller filesize in order to be "
+#~ "successfully copied."
+#~ msgstr ""
+#~ "设备剩余空间不足.\n"
+#~ "歌曲需要 %1 但是设备中仅有 %2.\n"
+#~ "歌曲需要转码成较小的文件大小才能复制."
+
+#~ msgid ""
+#~ "There is insufficient space left on the destination.\n"
+#~ "The selected songs consume %1, but there is only %2 left."
+#~ msgstr ""
+#~ "设备剩余空间不足.\n"
+#~ "歌曲需要 %1 但是设备中仅有 %2."
+
+#~ msgid ""
+#~ "<p>You have not configured the destination device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr "<p>没有设置目标设备。<br/>使用默认设置然后继续?</p>"
+
+#~ msgid ""
+#~ "<p>You have not configured the source device.<br/>Continue with the "
+#~ "default settings?</p>"
+#~ msgstr "<p>没有设置来源设备。<br/>使用默认设置然后继续?</p>"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album'"
+#~ msgstr "'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写。"
+
+#~ msgid ""
+#~ "<p>Which type of refresh do you wish to perform?<ul><li>Partial - Only "
+#~ "new songs are scanned <i>(quick)</i></li><li>Full - All songs are "
+#~ "rescanned <i>(slow)</i></li></ul></p>"
+#~ msgstr ""
+#~ "<p>你希望选择刷新哪一类?<ul><li>部分 - 仅扫描新增歌曲<i>(较快)</i></"
+#~ "li><li>全部 - 扫描所有的歌曲<i>(较慢)</i></li></ul></p>"
+
+#~ msgid ""
+#~ "A remote device named \"%1\" already exists!\n"
+#~ "Please choose a different name"
+#~ msgstr ""
+#~ "已经有名为 \"%1\" 的远程设备!\n"
+#~ "请选择其他名称"
+
+#~ msgid ""
+#~ "A set of rules named '%1' already exists!\n"
+#~ "Overwrite?"
+#~ msgstr ""
+#~ "已经有名为 '%1' 的规则!\n"
+#~ "覆盖吗?"
+
+#~ msgid "<p>Delete all from the following?<ul>%1</ul></p>"
+#~ msgstr "<p>删除下面所有的项目吗?<ul>%1</ul></p>"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not download to temporary file!"
+#~ msgstr ""
+#~ "设置封面失败!\n"
+#~ "无法下载临时文件!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not make copy!"
+#~ msgstr ""
+#~ "设置封面失败!\n"
+#~ "复制图片失败!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not backup original!"
+#~ msgstr ""
+#~ "设置封面失败!\n"
+#~ "备份原封面失败!"
+
+#~ msgid ""
+#~ "Failed to set cover!\n"
+#~ "Could not copy file to '%1'!"
+#~ msgstr ""
+#~ "设置封面失败!\n"
+#~ "无法文件复制到 '%1'!"
+
+#~ msgid "Medium"
+#~ msgstr "中"
+
+#~ msgid "Extra Large"
+#~ msgstr "非常大"
+
+#~ msgid "Icon/List"
+#~ msgstr "图标/列表"
+
+#~ msgid "Edit Song Tags"
+#~ msgstr "编辑歌曲标签"
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Add to that playlist?"
+#~ msgstr "已经有名为 <b>%1</b>的播放列表!<br/>添加到它吗?"
+
+#~ msgid ""
+#~ "Are you sure you wish to remove the selected playlists?\n"
+#~ "This cannot be undone."
+#~ msgstr ""
+#~ "确定删除选择的列表?\n"
+#~ "操作将无法恢复。"
+
+#~ msgid "A playlist named <b>%1</b> already exists!<br/>Overwrite?"
+#~ msgstr "已经有名为 <b>%1</b>的播放列表!<br/><br/>覆盖吗?"
+
+#~ msgid "Edit Tags"
+#~ msgstr "编辑标签"
+
+#~ msgid "<b>(Priority: %1)</b>"
+#~ msgstr "<b>(属性: %1)</b>"
+
+#~ msgid ""
+#~ "<i><b>NOTE</b> Only enter values for the tags you wish to be search on. </"
+#~ "i>"
+#~ msgstr "<i><b>注意</b> 输入你所需要搜索的标签。 </i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> When using a local socket the full absolute path to the "
+#~ "socket needs to be set. (Port number is not required.)</i>"
+#~ msgstr ""
+#~ "<i><b>注意:</b> 使用本地 Socket 时请输入完整路径。 (端口号可以省略).</i>"
+
+#~ msgid "Covers:"
+#~ msgstr "封面:"
+
+#~ msgid "Sort albums:"
+#~ msgstr "专辑分类:"
+
+#~ msgid "Folder view style:"
+#~ msgstr "文件夹视图:"
+
+#~ msgid "Streams view style:"
+#~ msgstr "流媒体视图:"
+
+#~ msgid "Online view style:"
+#~ msgstr "在线视图:"
+
+#~ msgid "Devices view style:"
+#~ msgstr "设备查看模式:"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' "
+#~ "setting will require a re-start of Cantata.</i>"
+#~ msgstr ""
+#~ "<i><b>注意:</b> 启用\"强制使用单击激活项目\"后必须重新启动 Cantata。</i>"
+
+#~ msgid ""
+#~ "<i><b>NOTE:</b> The 'Music folder' setting is used to lookup cover-art "
+#~ "(either the value specified above, or <code>cover.jpg / cover.png</code> "
+#~ "if not set). If you also have write permissions to this folder (and it's "
+#~ "sub-folders), then Cantata will save any downloaded covers into the "
+#~ "respective album folder.</i>"
+#~ msgstr ""
+#~ "<i><b>注意:</b> '音乐文件夹' 将被用来查找专辑封面 (如果未指定值,默认使用 "
+#~ "<code>cover.jpg/cover.png</code>). 如果有文件夹及子文件的写入权限,"
+#~ "Cantata 将自动下载专辑封面到专辑文件夹</i>"
+
+#~ msgid "Failed to create <b>%1</b>!"
+#~ msgstr "<b>%1</b> 创建失败!"
+
+#~ msgid "Stream already exists!<br/><b>%1</b>"
+#~ msgstr "流媒体已经存在! <br/><b>%1</b>"
+
+#~ msgid "A stream named <b>%1</b> already exists!"
+#~ msgstr "已经有名为 <b>%1</b> 的流媒体!"
+
+#~ msgid "Are you sure you wish to remove <b>%1</b>?"
+#~ msgstr "确定要移除 <b>%1</b> ?"
+
+#~ msgid ""
+#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
+#~ "'Album' of <b>all</b> tracks?"
+#~ msgstr ""
+#~ "<b>所有</b>音轨的'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写?"
+
+#~ msgid "Destination file already exists!<br/>%1"
+#~ msgstr "目标文件已存在!<br/>%1"
+
+#~ msgid "Failed to create destination folder!<br/>%1"
+#~ msgstr "文件夹 <br/>%1 创建失败!"
+
+#~ msgid "Failed to rename %1 to %2"
+#~ msgstr "无法把 %1 重命名为 %2"
+
#~ msgid "TextLabel"
#~ msgstr "文本标签"
@@ -6663,9 +7074,6 @@ msgstr ""
#~ msgid "Disc %1"
#~ msgstr "碟片 %1"
-#~ msgid "Are you sure you wish to forget '%1'?"
-#~ msgstr "确定要清除历史 '%1'?"
-
#~ msgid "Stop Immediately"
#~ msgstr "立即停止"
@@ -6726,9 +7134,6 @@ msgstr ""
#~ msgid "Online Music"
#~ msgstr "在线音乐"
-#~ msgid "Are you sure you wish to remove '%1'?"
-#~ msgstr "确定要移除 '%1'?"
-
#~ msgid "Are you sure you wish to unload '%1'?"
#~ msgstr "确定要移除 '%1'?"
diff --git a/replaygain/CMakeLists.txt b/replaygain/CMakeLists.txt
index f80e364..b73e751 100644
--- a/replaygain/CMakeLists.txt
+++ b/replaygain/CMakeLists.txt
@@ -1,5 +1,5 @@
if (FFMPEG_FOUND OR MPG123_FOUND)
- include_directories(${QTINCLUDES} ${ZLIB_INCLUDE_DIRS})
+ include_directories(${QTINCLUDES} ${ZLIB_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR})
if (FFMPEG_FOUND)
set(CANTATA_RG_SRCS ${CANTATA_RG_SRCS} ffmpeginput.cpp)
include_directories(${FFMPEG_INCLUDE_DIRS})
@@ -14,7 +14,7 @@ if (FFMPEG_FOUND OR MPG123_FOUND)
if (ENABLE_KDE_SUPPORT)
kde4_add_executable(cantata-replaygain ${CANTATA_RG_SRCS} ${CANTATA_RG_MOC_SRCS})
- install(TARGETS cantata-replaygain RUNTIME DESTINATION lib/cantata)
+ install(TARGETS cantata-replaygain RUNTIME DESTINATION ${LINUX_LIB_DIR}/cantata)
else (ENABLE_KDE_SUPPORT)
if (ENABLE_QT5)
QT5_WRAP_CPP(CANTATA_RG_MOC_SRCS ${CANTATA_RG_MOC_HDRS})
@@ -26,14 +26,14 @@ if (FFMPEG_FOUND OR MPG123_FOUND)
if (WIN32)
set(CMAKE_BUILD_TYPE "Release")
ADD_EXECUTABLE(cantata-replaygain WIN32 ${CANTATA_RG_SRCS} ${CANTATA_RG_MOC_SRCS} ${CANTATA_PO})
- install(TARGETS cantata-replaygain DESTINATION ${CMAKE_INSTALL_PREFIX}/helpers)
+ install(TARGETS cantata-replaygain DESTINATION ${CMAKE_INSTALL_PREFIX})
elseif (APPLE)
set(CMAKE_BUILD_TYPE "Release")
ADD_EXECUTABLE(cantata-replaygain ${CANTATA_RG_SRCS} ${CANTATA_RG_MOC_SRCS} ${CANTATA_PO})
- install(TARGETS cantata-replaygain DESTINATION ${MACOSX_BUNDLE_RESOURCES}/helpers)
+ install(TARGETS cantata-replaygain DESTINATION ${MACOSX_BUNDLE_APP_DIR})
else (WIN32)
ADD_EXECUTABLE(cantata-replaygain ${CANTATA_RG_SRCS} ${CANTATA_RG_MOC_SRCS})
- install(TARGETS cantata-replaygain RUNTIME DESTINATION lib/cantata)
+ install(TARGETS cantata-replaygain RUNTIME DESTINATION ${LINUX_LIB_DIR}/cantata)
endif (WIN32)
endif (ENABLE_KDE_SUPPORT)
diff --git a/replaygain/ffmpeginput.cpp b/replaygain/ffmpeginput.cpp
index d3bae99..e41d54c 100644
--- a/replaygain/ffmpeginput.cpp
+++ b/replaygain/ffmpeginput.cpp
@@ -8,7 +8,6 @@
*/
/* See LICENSE file for copyright and license details. */
-#define _POSIX_C_SOURCE 1
#ifdef __cplusplus
#define __STDC_CONSTANT_MACROS
#ifdef _STDINT_H
@@ -48,19 +47,53 @@ struct FfmpegInput::Handle {
: formatContext(0)
, codecContext(0)
, codec(0)
+ #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 35, 0)
+ , frame(0)
+ , gotFrame(0)
+ , packetLeft(false)
+ , flushing(false)
+ #endif
, audioStream(0)
, currentBytes(0) {
av_init_packet(&packet);
audioBuffer = (int16_t*)av_malloc(BUFFER_SIZE);
+ #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 35, 0)
+ #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 39, 101)
+ frame = avcodec_alloc_frame();
+ #else
+ frame = av_frame_alloc();
+ packet.data = NULL;
+ origPacket.size = 0;
+ origPacket.data=NULL;
+ #endif
+ #endif
}
~Handle() {
if (audioBuffer) {
av_free(audioBuffer);
}
+ #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 35, 0)
+ if (frame) {
+ #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(54, 23, 100)
+ av_free(&frame);
+ #elif LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 39, 101)
+ avcodec_free_frame(&frame);
+ #else
+ av_frame_free(&frame);
+ #endif
+ }
+ #endif
}
AVFormatContext *formatContext;
AVCodecContext *codecContext;
AVCodec *codec;
+ #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 35, 0)
+ AVFrame *frame;
+ int gotFrame;
+ bool packetLeft;
+ bool flushing;
+ AVPacket origPacket;
+ #endif
AVPacket packet;
int audioStream;
int16_t *audioBuffer;
@@ -303,17 +336,166 @@ size_t FfmpegInput::readFrames()
return bufferPosition / sizeof(float) / channels();
}
+#if LIBAVCODEC_VERSION_MAJOR >= 54
+static int decodePacket(FfmpegInput::Handle *handle)
+{
+ int ret = avcodec_decode_audio4(handle->codecContext, handle->frame, &handle->gotFrame, &handle->packet);
+ if (ret < 0) {
+ return ret;
+ }
+ return FFMIN(ret, handle->packet.size);
+}
+
+size_t FfmpegInput::readOnePacket()
+{
+ if (!handle) {
+ return 0;
+ }
+
+start:
+ if (handle->flushing) {
+ handle->packet.data = NULL;
+ handle->packet.size = 0;
+ decodePacket(handle);
+ if (!handle->gotFrame) {
+ return 0;
+ } else {
+ goto write_to_buffer;
+ }
+ }
+
+ if (handle->packetLeft) {
+ goto packetLeft;
+ }
+
+//next_frame:
+ for (;;) {
+ if (av_read_frame(handle->formatContext, &handle->packet) < 0) {
+ handle->flushing = true;
+ goto start;
+ }
+ if (handle->packet.stream_index != handle->audioStream) {
+ av_free_packet(&handle->packet);
+ continue;
+ } else {
+ break;
+ }
+ }
+
+ int ret;
+ handle->origPacket = handle->packet;
+packetLeft:
+ ret = decodePacket(handle);
+ if (ret < 0) {
+ goto free_packet;
+ }
+ handle->packet.data += ret;
+ handle->packet.size -= ret;
+ if (handle->packet.size > 0) {
+ handle->packetLeft = true;
+ } else {
+free_packet:
+ av_free_packet(&handle->origPacket);
+ handle->packetLeft = false;
+ }
+
+ if (!handle->gotFrame) {
+ goto start;
+ }
+
+write_to_buffer: ;
+ size_t numberRead=handle->frame->nb_samples;
+ /* TODO: fix this */
+ int numChannels = handle->codecContext->channels;
+ // channels = handle->frame->channels;
+
+ if (handle->frame->nb_samples * numChannels > (int)sizeof handle->buffer) {
+ return 0;
+ }
+
+ switch (handle->codecContext->sample_fmt) {
+ case AV_SAMPLE_FMT_S16: {
+ int16_t *dataShort = (int16_t*)handle->frame->extended_data[0];
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ handle->buffer[i] = ((float) dataShort[i])/qMax(-(float) SHRT_MIN, (float) SHRT_MAX);
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_S32: {
+ int32_t *dataInt = (int32_t*)handle->frame->extended_data[0];
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ handle->buffer[i] = ((float) dataInt[i])/qMax(-(float) INT_MIN, (float) INT_MAX);
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_FLT: {
+ float *dataFloat = (float*)handle->frame->extended_data[0];
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ handle->buffer[i] = dataFloat[i];
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_DBL: {
+ double *dataDouble = (double*)handle->frame->extended_data[0];
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ handle->buffer[i] = (float)dataDouble[i];
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_S16P: {
+ uint8_t **ed = handle->frame->extended_data;
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ int currentChannel = i / handle->frame->nb_samples;
+ int currentSample = i % handle->frame->nb_samples;
+ handle->buffer[currentSample * numChannels + currentChannel] = ((float)((int16_t*) ed[currentChannel])[currentSample])/qMax(-(float)SHRT_MIN, (float)SHRT_MAX);
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_S32P: {
+ uint8_t **ed = handle->frame->extended_data;
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ int currentChannel = i / handle->frame->nb_samples;
+ int currentSample = i % handle->frame->nb_samples;
+ handle->buffer[currentSample * numChannels + currentChannel] = ((float) ((int32_t*) ed[currentChannel])[currentSample])/qMax(-(float)INT_MIN, (float)INT_MAX);
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_FLTP: {
+ uint8_t **ed = handle->frame->extended_data;
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ int currentChannel = i / handle->frame->nb_samples;
+ int currentSample = i % handle->frame->nb_samples;
+ handle->buffer[currentSample * numChannels + currentChannel] = ((float*) ed[currentChannel])[currentSample];
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_DBLP:{
+ uint8_t **ed = handle->frame->extended_data;
+ for (int i = 0; i < handle->frame->nb_samples * numChannels; ++i) {
+ int currentChannel = i / handle->frame->nb_samples;
+ int currentSample = i % handle->frame->nb_samples;
+ handle->buffer[currentSample * numChannels + currentChannel] = ((double*) ed[currentChannel])[currentSample];
+ }
+ break;
+ }
+ case AV_SAMPLE_FMT_U8:
+ case AV_SAMPLE_FMT_NONE:
+ case AV_SAMPLE_FMT_NB:
+ default:
+ numberRead=0;
+ goto out;
+ }
+
+ out:
+ return numberRead;
+}
+#else
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 35, 0)
static int decodeAudio(FfmpegInput::Handle *handle, int *frame_size_ptr)
{
- #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 39, 101)
- AVFrame *frame = avcodec_alloc_frame();
- #else
- AVFrame *frame = av_frame_alloc();
- #endif
int ret, got_frame = 0;
- if (!frame) {
+ if (!handle->frame) {
return AVERROR(ENOMEM);
}
@@ -324,23 +506,23 @@ static int decodeAudio(FfmpegInput::Handle *handle, int *frame_size_ptr)
}
#endif
- ret = avcodec_decode_audio4(handle->codecContext, frame, &got_frame, &handle->packet);
+ ret = avcodec_decode_audio4(handle->codecContext, handle->frame, &got_frame, &handle->packet);
if (ret >= 0 && got_frame) {
int ch, plane_size;
int planar = av_sample_fmt_is_planar(handle->codecContext->sample_fmt);
int data_size = av_samples_get_buffer_size(&plane_size, handle->codecContext->channels,
- frame->nb_samples, handle->codecContext->sample_fmt, 1);
+ handle->frame->nb_samples, handle->codecContext->sample_fmt, 1);
if (*frame_size_ptr < data_size) {
return AVERROR(EINVAL);
}
- memcpy(handle->audioBuffer, frame->extended_data[0], plane_size);
+ memcpy(handle->audioBuffer, handle->frame->extended_data[0], plane_size);
if (planar && handle->codecContext->channels > 1) {
uint8_t *out = ((uint8_t *)(handle->audioBuffer)) + plane_size;
for (ch = 1; ch < handle->codecContext->channels; ch++) {
- memcpy(out, frame->extended_data[ch], plane_size);
+ memcpy(out, handle->frame->extended_data[ch], plane_size);
out += plane_size;
}
}
@@ -349,13 +531,6 @@ static int decodeAudio(FfmpegInput::Handle *handle, int *frame_size_ptr)
*frame_size_ptr = 0;
}
- #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(54, 23, 100)
- av_free(&frame);
- #elif LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 39, 101)
- avcodec_free_frame(&frame);
- #else
- av_frame_free(&frame);
- #endif
return ret;
}
#endif
@@ -387,7 +562,6 @@ size_t FfmpegInput::readOnePacket()
#else
int len = avcodec_decode_audio2(handle->codecContext, handle->audioBuffer, &dataSize, handle->packet.data, handle->packet.size);
#endif
-
if (len < 0) {
goto out;
}
@@ -397,14 +571,8 @@ size_t FfmpegInput::readOnePacket()
av_free_packet(&handle->packet);
goto next_frame;
}
-
switch (handle->codecContext->sample_fmt) {
- #if LIBAVCODEC_VERSION_MAJOR >= 54
- case AV_SAMPLE_FMT_S16:
- #else
- case SAMPLE_FMT_S16:
- #endif
- {
+ case SAMPLE_FMT_S16: {
int16_t *dataShort = (int16_t*) handle->audioBuffer;
numberRead = (size_t) dataSize / sizeof(int16_t) / (size_t) handle->codecContext->channels;
for (unsigned int i = 0; i < (size_t) dataSize / sizeof(int16_t); ++i) {
@@ -412,12 +580,7 @@ size_t FfmpegInput::readOnePacket()
}
break;
}
- #if LIBAVCODEC_VERSION_MAJOR >= 54
- case AV_SAMPLE_FMT_S32:
- #else
- case SAMPLE_FMT_S32:
- #endif
- {
+ case SAMPLE_FMT_S32: {
int32_t *dataInt = (int32_t*) handle->audioBuffer;
numberRead = (size_t) dataSize / sizeof(int32_t) / (size_t) handle->codecContext->channels;
for (unsigned int i = 0; i < (size_t) dataSize / sizeof(int32_t); ++i) {
@@ -425,12 +588,7 @@ size_t FfmpegInput::readOnePacket()
}
break;
}
- #if LIBAVCODEC_VERSION_MAJOR >= 54
- case AV_SAMPLE_FMT_FLT:
- #else
- case SAMPLE_FMT_FLT:
- #endif
- {
+ case SAMPLE_FMT_FLT: {
float *dataFloat = (float*) handle->audioBuffer;
numberRead = (size_t) dataSize / sizeof(float) / (size_t) handle->codecContext->channels;
for (unsigned int i = 0; i < (size_t) dataSize / sizeof(float); ++i) {
@@ -438,12 +596,7 @@ size_t FfmpegInput::readOnePacket()
}
break;
}
- #if LIBAVCODEC_VERSION_MAJOR >= 54
- case AV_SAMPLE_FMT_DBL:
- #else
- case SAMPLE_FMT_DBL:
- #endif
- {
+ case SAMPLE_FMT_DBL: {
double *dataDouble = (double*) handle->audioBuffer;
numberRead = (size_t) dataSize / sizeof(double) / (size_t) handle->codecContext->channels;
for (unsigned int i = 0; i < (size_t) dataSize / sizeof(double); ++i) {
@@ -451,15 +604,9 @@ size_t FfmpegInput::readOnePacket()
}
break;
}
- #if LIBAVCODEC_VERSION_MAJOR >= 54
- case AV_SAMPLE_FMT_U8:
- case AV_SAMPLE_FMT_NONE:
- case AV_SAMPLE_FMT_NB:
- #else
case SAMPLE_FMT_U8:
case SAMPLE_FMT_NONE:
case SAMPLE_FMT_NB:
- #endif
default:
numberRead=0;
goto out;
@@ -469,6 +616,7 @@ size_t FfmpegInput::readOnePacket()
av_free_packet(&handle->packet);
return numberRead;
}
+#endif
bool FfmpegInput::isFloatCodec() const
{
diff --git a/replaygain/mpg123input.cpp b/replaygain/mpg123input.cpp
index 2c84b83..7d71323 100644
--- a/replaygain/mpg123input.cpp
+++ b/replaygain/mpg123input.cpp
@@ -8,7 +8,6 @@
*/
/* See LICENSE file for copyright and license details. */
-#define _POSIX_C_SOURCE 1
#ifdef __cplusplus
extern "C" {
#endif
@@ -133,7 +132,7 @@ float * Mpg123Input::buffer() const
bool Mpg123Input::setChannelMap(int *st) const
{
- Q_UNUSED(st);
+ Q_UNUSED(st)
return false;
}
diff --git a/replaygain/replaygain.cpp b/replaygain/replaygain.cpp
index 98c00cc..a538f0d 100644
--- a/replaygain/replaygain.cpp
+++ b/replaygain/replaygain.cpp
@@ -110,7 +110,7 @@ void ReplayGain::showResults()
for (int i=0; i<files.count(); ++i) {
TrackScanner *s=scanners[i];
const Track &t=tracks[i];
- if (t.success) {
+ if (t.success && s->ok()) {
printf("TRACK: %d %s %s\n", i, formatDouble(TrackScanner::reference(s->results().loudness)).toLatin1().constData(),
formatDouble(s->results().peakValue()).toLatin1().constData());
okScanners.append(s);
diff --git a/replaygain/rgdialog.cpp b/replaygain/rgdialog.cpp
index 4637a74..d540b55 100644
--- a/replaygain/rgdialog.cpp
+++ b/replaygain/rgdialog.cpp
@@ -136,7 +136,7 @@ RgDialog::RgDialog(QWidget *parent)
qRegisterMetaType<Tags::ReplayGain>("Tags::ReplayGain");
connect(combo, SIGNAL(currentIndexChanged(int)), SLOT(toggleDisplay()));
connect(view, SIGNAL(itemSelectionChanged()), SLOT(controlRemoveAct()));
- connect(removeAct, SIGNAL(triggered(bool)), SLOT(removeItems()));
+ connect(removeAct, SIGNAL(triggered()), SLOT(removeItems()));
italic=font();
italic.setItalic(true);
@@ -258,7 +258,7 @@ void RgDialog::startScanning()
{
bool all=origTags.isEmpty() ||
(origTags.count()==origSongs.count()
- ? MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Scan <b>all</b> tracks?<br><br><i>NOTE: All tracks have existing ReplyGain tags.</i>"), QString(),
+ ? MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Scan <b>all</b> tracks?<br/><br/><i>All tracks have existing ReplayGain tags.</i>"), QString(),
GuiItem(i18n("Scan")), StdGuiItem::cancel())
: MessageBox::No==MessageBox::questionYesNo(this, i18n("Do you wish to scan all tracks, or only tracks without existing tags?"), QString(),
GuiItem(i18n("Untagged Tracks")), GuiItem(i18n("All Tracks"))));
diff --git a/replaygain/trackscanner.h b/replaygain/trackscanner.h
index 4cf55d4..db17ccd 100644
--- a/replaygain/trackscanner.h
+++ b/replaygain/trackscanner.h
@@ -59,6 +59,7 @@ public:
void setFile(const QString &fileName);
const Data & results() const { return data; }
int index() const { return idx; }
+ bool ok() const { return data.peakValue()>0.00001; }
private:
void run();
diff --git a/scrobbling/scrobbler.cpp b/scrobbling/scrobbler.cpp
index 918d09d..2af3c76 100644
--- a/scrobbling/scrobbler.cpp
+++ b/scrobbling/scrobbler.cpp
@@ -305,7 +305,8 @@ void Scrobbler::love()
return;
}
- if (currentSong.title.isEmpty() || currentSong.artist.isEmpty() || loveSent) {
+ const Track &song=isEnabled() ? currentSong : inactiveSong;
+ if (song.title.isEmpty() || song.artist.isEmpty() || loveSent) {
return;
}
@@ -322,11 +323,11 @@ void Scrobbler::love()
QMap<QString, QString> params;
params["method"] = "track.love";
- params["track"] = currentSong.title;
- params["artist"] = currentSong.artist;
+ params["track"] = song.title;
+ params["artist"] = song.artist;
params["sk"] = sessionKey;
sign(params);
- DBUG << currentSong.title << currentSong.artist;
+ DBUG << song.title << song.artist;
loveSent=true;
if (!fakeScrobbling) {
QNetworkReply *job=NetworkAccessManager::self()->postFormData(QUrl(scrobblerUrl()), format(params));
@@ -381,6 +382,9 @@ void Scrobbler::setSong(const Song &s)
{
DBUG << isEnabled() << s.isStandardStream() << s.time << s.file << s.title << s.artist << s.album << s.albumartist;
if (!scrobbleViaMpd && !isEnabled()) {
+ if (inactiveSong.artist != s.artist || inactiveSong.title!=s.title || inactiveSong.album!=s.album) {
+ emit songChanged(!s.isStandardStream() && !s.isEmpty());
+ }
inactiveSong=s;
return;
}
diff --git a/scrobbling/scrobblingsettings.cpp b/scrobbling/scrobblingsettings.cpp
index 73ffd74..16e6b6c 100644
--- a/scrobbling/scrobblingsettings.cpp
+++ b/scrobbling/scrobblingsettings.cpp
@@ -75,10 +75,14 @@ ScrobblingSettings::ScrobblingSettings(QWidget *parent)
if (firstMpdClient.isEmpty()) {
REMOVE(noteLabel)
} else {
- noteLabel->setText(i18n("<i><b>NOTE:</b> If you use a scrobbler which is marked as '(via MPD)' (such as %1), "
+ noteLabel->setText(i18n("If you use a scrobbler which is marked as '(via MPD)' (such as %1), "
"then you will need to have this already started and running. "
- "Cantata can only 'Love' tracks via this, and cannot enable/disable scrobbling.</i>", firstMpdClient));
+ "Cantata can only 'Love' tracks via this, and cannot enable/disable scrobbling.", firstMpdClient));
}
+
+ #ifdef Q_OS_MAC
+ expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
+ #endif
}
void ScrobblingSettings::load()
diff --git a/scrobbling/scrobblingsettings.ui b/scrobbling/scrobblingsettings.ui
index a2f9c3c..98cec1d 100644
--- a/scrobbling/scrobblingsettings.ui
+++ b/scrobbling/scrobblingsettings.ui
@@ -83,46 +83,39 @@
</widget>
</item>
<item row="3" column="0">
- <widget class="BuddyLabel" name="statusLabel">
+ <widget class="QLabel" name="statusLabel">
<property name="text">
<string>Status:</string>
</property>
- <property name="buddy">
- <cstring>loginButton</cstring>
- </property>
</widget>
</item>
<item row="3" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="loginStatusLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="loginButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Login</string>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="QLabel" name="loginStatusLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
</item>
- <item row="4" column="0" colspan="2">
+ <item row="4" column="1">
+ <widget class="QPushButton" name="loginButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Login</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" colspan="2">
<widget class="MessageWidget" name="messageWidget">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
@@ -132,58 +125,32 @@
</property>
</widget>
</item>
- <item row="5" column="0" colspan="2">
+ <item row="6" column="0" colspan="2">
<widget class="QCheckBox" name="enableScrobbling">
<property name="text">
<string>Scrobble tracks</string>
</property>
</widget>
</item>
- <item row="6" column="0" colspan="2">
+ <item row="7" column="0" colspan="2">
<widget class="QCheckBox" name="showLove">
<property name="text">
<string>Show 'Love' button</string>
</property>
</widget>
</item>
- <item row="7" column="0">
- <spacer name="verticalSpacer_3x">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
- </property>
- </spacer>
- </item>
<item row="8" column="0" colspan="2">
- <widget class="QLabel" name="noteLabel">
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
- </property>
- </widget>
+ <widget class="NoteLabel" name="noteLabel"/>
</item>
<item row="9" column="0">
- <spacer name="verticalSpacer">
+ <spacer name="expandingSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>6</height>
+ <height>0</height>
</size>
</property>
</spacer>
@@ -202,6 +169,11 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
+ <class>NoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
<class>MessageWidget</class>
<extends>QFrame</extends>
<header>support/messagewidget.h</header>
diff --git a/streams/digitallyimportedsettings.ui b/streams/digitallyimportedsettings.ui
index e4e8839..31b9189 100644
--- a/streams/digitallyimportedsettings.ui
+++ b/streams/digitallyimportedsettings.ui
@@ -93,49 +93,42 @@
<property name="text">
<string>Status:</string>
</property>
- <property name="buddy">
- <cstring>loginButton</cstring>
- </property>
</widget>
</item>
<item row="3" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="loginStatusLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="loginButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Login</string>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="QLabel" name="loginStatusLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
</item>
- <item row="4" column="0">
+ <item row="4" column="1">
+ <widget class="QPushButton" name="loginButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Login</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
<widget class="QLabel" name="expiryLabel">
<property name="text">
<string>Session expiry:</string>
</property>
</widget>
</item>
- <item row="4" column="1">
+ <item row="5" column="1">
<widget class="QLabel" name="expiry">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
@@ -145,7 +138,7 @@
</property>
</widget>
</item>
- <item row="5" column="0" colspan="2">
+ <item row="6" column="0" colspan="2">
<widget class="MessageWidget" name="messageWidget">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
@@ -159,28 +152,16 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="noteLabel">
+ <widget class="NoteLabel" name="noteLabel">
<property name="text">
- <string><i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, and Sky.fm</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, and Sky.fm</string>
</property>
</widget>
</item>
<item>
- <widget class="QLabel" name="note2Label">
+ <widget class="NoteLabel" name="note2Label">
<property name="text">
- <string><i><b>NOTE:</b> If you enter account details, then a 'DI' status item will appear under the list of streams. This will indicate if you are logged in or not</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>If you enter account details, then a 'DI' status item will appear under the list of streams. This will indicate if you are logged in or not.</string>
</property>
</widget>
</item>
@@ -211,6 +192,11 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
+ <class>NoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
<class>MessageWidget</class>
<extends>QFrame</extends>
<header>support/messagewidget.h</header>
diff --git a/streams/streamdialog.cpp b/streams/streamdialog.cpp
index 67eec82..5f49857 100644
--- a/streams/streamdialog.cpp
+++ b/streams/streamdialog.cpp
@@ -28,10 +28,11 @@
#include "streamdialog.h"
#include "gui/settings.h"
#include "models/streamsmodel.h"
-#include "support/localize.h"
#include "widgets/icons.h"
#include "mpd/mpdconnection.h"
#include "support/buddylabel.h"
+#include "support/localize.h"
+#include "support/utils.h"
#include "config.h"
StreamDialog::StreamDialog(QWidget *parent, bool addToPlayQueue)
@@ -67,6 +68,7 @@ StreamDialog::StreamDialog(QWidget *parent, bool addToPlayQueue)
}
layout->setWidget(row, QFormLayout::LabelRole, nameLabel);
layout->setWidget(row++, QFormLayout::FieldRole, nameEntry);
+ layout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
layout->setWidget(row++, QFormLayout::SpanningRole, statusText);
setCaption(i18n("Add Stream"));
@@ -100,8 +102,7 @@ void StreamDialog::setWidgetVisiblity()
bool s=save();
nameEntry->setVisible(s);
nameLabel->setVisible(s);
- QApplication::processEvents();
- adjustSize();
+ Utils::resizeWindow(this, true, false);
}
void StreamDialog::changed()
diff --git a/streams/streamproviderlistdialog.cpp b/streams/streamproviderlistdialog.cpp
index 782b661..0ca6b7a 100644
--- a/streams/streamproviderlistdialog.cpp
+++ b/streams/streamproviderlistdialog.cpp
@@ -254,7 +254,7 @@ void StreamProviderListDialog::jobFinished()
temp.write(j->readAll());
temp.close();
if (!p->install(temp.fileName(), item->text(0), false)) {
- MessageBox::error(this, i18n("Failed to install <b>%1</b>", item->text(0)));
+ MessageBox::error(this, i18n("Failed to install '%1'", item->text(0)));
setState(false);
} else {
item->setCheckState(0, Qt::Unchecked);
@@ -263,7 +263,7 @@ void StreamProviderListDialog::jobFinished()
doNext();
}
} else {
- MessageBox::error(this, i18n("Failed to download <b>%1</b>", item->text(0)));
+ MessageBox::error(this, i18n("Failed to download '%1'", item->text(0)));
setState(false);
}
}
@@ -321,21 +321,13 @@ void StreamProviderListDialog::readProviders(QIODevice *dev)
updateView();
}
-static QString nameString(QTreeWidgetItem *i)
-{
- if (Cat_ListenLive==i->data(0, Role_Category).toInt()) {
- return i->text(0)+QLatin1String(" <i>(")+i18n("ListenLive")+QLatin1String(")</i>");
- }
- return i->text(0);
-}
-
void StreamProviderListDialog::slotButtonClicked(int button)
{
switch (button) {
case User2:
case User1: {
- QStringList update;
- QStringList install;
+ bool update=false;
+ bool install=false;
processItems.clear();
if (User2==button) {
processItems.clear();
@@ -344,7 +336,7 @@ void StreamProviderListDialog::slotButtonClicked(int button)
for (int c=0; c<tli->childCount(); ++c) {
QTreeWidgetItem *ci=tli->child(c);
if (ci->data(0, Role_Updateable).toBool()) {
- update.append(nameString(ci));
+ update=true;
processItems.append(ci);
}
}
@@ -352,30 +344,20 @@ void StreamProviderListDialog::slotButtonClicked(int button)
} else {
foreach (QTreeWidgetItem *i, checkedItems) {
if (installedProviders.keys().contains(i->text(0))) {
- update.append(nameString(i));
+ update=true;
} else {
- install.append(nameString(i));
+ install=true;
}
processItems.append(i);
}
}
- QString message="<p>";
- if (!install.isEmpty()) {
- message+=i18n("Install the following?")+"</p><ul>";
- foreach (const QString &n, install) {
- message+="<li>"+n+"</li>";
- }
- message+="</ul>";
- if (!update.isEmpty()) {
- message+="<p>";
- }
- }
- if (!update.isEmpty()) {
- message+=i18n("Update the following?")+"</p><ul>";
- foreach (const QString &n, update) {
- message+="<li>"+n+"</li>";
- }
- message+="</ul>";
+ QString message;
+ if (install && update) {
+ message=i18n("Install/update the selected stream providers?");
+ } else if (install) {
+ message=i18n("Install the selected stream providers?");
+ } else if (update) {
+ message=i18n("Update the selected stream providers?");
}
if (!message.isEmpty() && MessageBox::Yes==MessageBox::questionYesNo(this, message, i18n("Install/Update"))) {
diff --git a/streams/streamspage.cpp b/streams/streamspage.cpp
index 32baff0..7ce5ae1 100644
--- a/streams/streamspage.cpp
+++ b/streams/streamspage.cpp
@@ -69,14 +69,14 @@ StreamsPage::StreamsPage(QWidget *p)
connect(searchView, SIGNAL(searchItems()), this, SLOT(searchItems()));
connect(searchView, SIGNAL(searchIsActive(bool)), this, SLOT(controlSearch(bool)));
connect(searchView, SIGNAL(itemsSelected(bool)), SLOT(controlActions()));
- connect(addAction, SIGNAL(triggered(bool)), this, SLOT(add()));
- connect(StreamsModel::self()->addBookmarkAct(), SIGNAL(triggered(bool)), this, SLOT(addBookmark()));
- connect(StreamsModel::self()->addToFavouritesAct(), SIGNAL(triggered(bool)), this, SLOT(addToFavourites()));
- connect(StreamsModel::self()->configureAct(), SIGNAL(triggered(bool)), this, SLOT(configureStreams()));
- connect(StreamsModel::self()->reloadAct(), SIGNAL(triggered(bool)), this, SLOT(reload()));
- connect(editAction, SIGNAL(triggered(bool)), this, SLOT(edit()));
- connect(importAction, SIGNAL(triggered(bool)), this, SLOT(importXml()));
- connect(exportAction, SIGNAL(triggered(bool)), this, SLOT(exportXml()));
+ connect(addAction, SIGNAL(triggered()), this, SLOT(add()));
+ connect(StreamsModel::self()->addBookmarkAct(), SIGNAL(triggered()), this, SLOT(addBookmark()));
+ connect(StreamsModel::self()->addToFavouritesAct(), SIGNAL(triggered()), this, SLOT(addToFavourites()));
+ connect(StreamsModel::self()->configureAct(), SIGNAL(triggered()), this, SLOT(configureStreams()));
+ connect(StreamsModel::self()->reloadAct(), SIGNAL(triggered()), this, SLOT(reload()));
+ connect(editAction, SIGNAL(triggered()), this, SLOT(edit()));
+ connect(importAction, SIGNAL(triggered()), this, SLOT(importXml()));
+ connect(exportAction, SIGNAL(triggered()), this, SLOT(exportXml()));
connect(StreamsModel::self(), SIGNAL(error(const QString &)), this, SIGNAL(error(const QString &)));
connect(StreamsModel::self(), SIGNAL(loading()), view, SLOT(showSpinner()));
connect(StreamsModel::self(), SIGNAL(loaded()), view, SLOT(hideSpinner()));
@@ -98,13 +98,12 @@ StreamsPage::StreamsPage(QWidget *p)
menu->addSeparator();
QAction *configAction=new QAction(Icons::self()->configureIcon, i18n("Configure..."), this);
menu->addAction(configAction);
- connect(configAction, SIGNAL(triggered(bool)), this, SLOT(showPreferencesPage()));
+ connect(configAction, SIGNAL(triggered()), this, SLOT(showPreferencesPage()));
menuButton->setMenu(menu);
Icon::init(replacePlayQueue);
view->setUniformRowHeights(true);
view->addAction(StdActions::self()->replacePlayQueueAction);
- view->addAction(StdActions::self()->addWithPriorityAction);
view->addAction(editAction);
view->addAction(StdActions::self()->removeAction);
view->addAction(StreamsModel::self()->addToFavouritesAct());
@@ -151,10 +150,9 @@ void StreamsPage::showEvent(QShowEvent *e)
QWidget::showEvent(e);
}
-void StreamsPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty, bool randomAlbums)
+void StreamsPage::addSelectionToPlaylist(const QString &name, bool replace, quint8 priorty)
{
Q_UNUSED(name)
- Q_UNUSED(randomAlbums)
addItemsToPlayQueue(itemView()->selectedIndexes(), replace, priorty);
}
@@ -248,7 +246,7 @@ void StreamsPage::exportXml()
}
if (!StreamsModel::self()->exportFavourites(fileName)) {
- MessageBox::error(this, i18n("Failed to create <b>%1</b>!", fileName));
+ MessageBox::error(this, i18n("Failed to create '%1'!", fileName));
}
}
@@ -265,9 +263,9 @@ void StreamsPage::add()
QString existingNameForUrl=StreamsModel::self()->favouritesNameForUrl(url);
if (!existingNameForUrl.isEmpty()) {
- MessageBox::error(this, i18n("Stream already exists!<br/><b>%1</b>", existingNameForUrl));
+ MessageBox::error(this, i18n("Stream '%1' already exists!", existingNameForUrl));
} else if (StreamsModel::self()->nameExistsInFavourites(name)) {
- MessageBox::error(this, i18n("A stream named <b>%1</b> already exists!", name));
+ MessageBox::error(this, i18n("A stream named '%1' already exists!", name));
} else {
StreamsModel::self()->addToFavourites(url, name);
}
@@ -355,7 +353,7 @@ void StreamsPage::reload()
return;
}
- if (cat->children.isEmpty() || cat->cacheName.isEmpty() || MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Reload <b>%1</b> streams?", cat->name))) {
+ if (cat->children.isEmpty() || cat->cacheName.isEmpty() || MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Reload '%1' streams?", cat->name))) {
StreamsModel::self()->reload(mapped);
}
}
@@ -373,13 +371,13 @@ void StreamsPage::removeItems()
const StreamsModel::Item *item=static_cast<const StreamsModel::Item *>(mapped.internalPointer());
if (item->isCategory() && item->parent) {
if (item->parent->isBookmarks) {
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove bookmark to <b>%1</b>?", item->name))) {
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove bookmark to '%1'?", item->name))) {
return;
}
StreamsModel::self()->removeBookmark(mapped);
return;
} else if (static_cast<const StreamsModel::CategoryItem *>(item)->isBookmarks) {
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove all <b>%1</b> bookmarks?", item->parent->name))) {
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove all '%1' bookmarks?", item->parent->name))) {
return;
}
StreamsModel::self()->removeAllBookmarks(mapped);
@@ -407,7 +405,7 @@ void StreamsPage::removeItems()
return;
}
} else {
- if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove <b>%1</b>?",
+ if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove '%1'?",
StreamsModel::self()->data(useable.first(), Qt::DisplayRole).toString()))) {
return;
}
@@ -446,9 +444,9 @@ void StreamsPage::edit()
QString existingNameForUrl=newUrl!=url ? StreamsModel::self()->favouritesNameForUrl(newUrl) : QString();
if (!existingNameForUrl.isEmpty()) {
- MessageBox::error(this, i18n("Stream already exists!<br/><b>%1</b>", existingNameForUrl));
+ MessageBox::error(this, i18n("Stream '%1' already exists!", existingNameForUrl));
} else if (newName!=name && StreamsModel::self()->nameExistsInFavourites(newName)) {
- MessageBox::error(this, i18n("A stream named <b>%1</b> already exists!", newName));
+ MessageBox::error(this, i18n("A stream named '%1' already exists!", newName));
} else {
StreamsModel::self()->updateFavouriteStream(newUrl, newName, index);
}
@@ -617,7 +615,6 @@ void StreamsPage::controlActions()
}
}
StdActions::self()->replacePlayQueueAction->setEnabled(haveSelection && onlyStreamsSelected);
- StdActions::self()->addWithPriorityAction->setEnabled(haveSelection && onlyStreamsSelected);
menuButton->controlState();
}
diff --git a/streams/streamspage.h b/streams/streamspage.h
index d516830..c379fd7 100644
--- a/streams/streamspage.h
+++ b/streams/streamspage.h
@@ -42,7 +42,7 @@ public:
StreamsPage(QWidget *p);
virtual ~StreamsPage();
- void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0, bool randomAlbums=false);
+ void addSelectionToPlaylist(const QString &name=QString(), bool replace=false, quint8 priorty=0);
void setView(int v) { view->setMode((ItemView::Mode)v); searchView->setMode((ItemView::Mode)v); }
void focusSearch();
void goBack() { itemView()->backActivated(); }
diff --git a/streams/streamssettings.cpp b/streams/streamssettings.cpp
index a94ba51..0bf630d 100644
--- a/streams/streamssettings.cpp
+++ b/streams/streamssettings.cpp
@@ -39,6 +39,7 @@
#else
#include <QFileDialog>
#endif
+#include <QTimer>
enum Roles {
KeyRole = Qt::UserRole,
@@ -147,7 +148,7 @@ void StreamsSettings::installFromFile()
name=name.replace("\\", "_");
#endif
- if (get(name) && MessageBox::No==MessageBox::warningYesNo(this, i18n("A category named <b>%1</b> already exists!<br/>Overwrite?", name))) {
+ if (get(name) && MessageBox::No==MessageBox::warningYesNo(this, i18n("A category named '%1' already exists!\n\nOverwrite?", name))) {
return;
}
install(fileName, name);
@@ -166,6 +167,11 @@ void StreamsSettings::installFromWeb()
}
providerDialog->show(installed);
+ #ifdef Q_OS_MAC
+ // Under OSX when stream providers are installed/updated, and the dialog closed, it
+ // puts the pref dialog below the main window! This hack fixes this...
+ QTimer::singleShot(0, this, SLOT(raiseWindow()));
+ #endif
}
bool StreamsSettings::install(const QString &fileName, const QString &name, bool showErrors)
@@ -173,7 +179,7 @@ bool StreamsSettings::install(const QString &fileName, const QString &name, bool
Tar tar(fileName);
if (!tar.open()) {
if (showErrors) {
- MessageBox::error(this, i18n("Failed top open package file"));
+ MessageBox::error(this, i18n("Failed top open package file."));
}
return false;
}
@@ -268,7 +274,7 @@ void StreamsSettings::remove()
}
QListWidgetItem *item=categories->item(row);
- if (!item->data(BuiltInRole).toBool() && MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove <b>%1</b>?", item->text()))) {
+ if (!item->data(BuiltInRole).toBool() && MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove '%1'?", item->text()))) {
return;
}
@@ -299,6 +305,13 @@ void StreamsSettings::configure()
DigitallyImportedSettings(this).show();
}
+void StreamsSettings::raiseWindow()
+{
+ #ifdef Q_OS_MAC
+ Utils::raiseWindow(topLevelWidget());
+ #endif
+}
+
QListWidgetItem * StreamsSettings::get(const QString &name)
{
for (int i=0; i<categories->count(); ++i) {
diff --git a/streams/streamssettings.h b/streams/streamssettings.h
index 2d4e145..0f475b3 100644
--- a/streams/streamssettings.h
+++ b/streams/streamssettings.h
@@ -46,6 +46,7 @@ private Q_SLOTS:
void installFromWeb();
void remove();
void configure();
+ void raiseWindow();
private:
bool install(const QString &fileName, const QString &name, bool showErrors=true);
diff --git a/streams/streamssettings.ui b/streams/streamssettings.ui
index 59c2b20..ff3af63 100644
--- a/streams/streamssettings.ui
+++ b/streams/streamssettings.ui
@@ -75,20 +75,21 @@
</widget>
</item>
<item row="3" column="0" colspan="4">
- <widget class="QLabel" name="note">
+ <widget class="PlainNoteLabel" name="note">
<property name="text">
- <string><i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be removed.</i></string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
+ <string>Built-in categories are shown in italic, and these cannot be removed.</string>
</property>
</widget>
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>PlainNoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections/>
</ui>
diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt
index 83c2130..01c38fb 100644
--- a/support/CMakeLists.txt
+++ b/support/CMakeLists.txt
@@ -14,18 +14,32 @@ add_library(support-core STATIC ${SUPPORT_CORE_MOC_SRCS} ${SUPPORT_CORE_SRCS})
if (NOT ENABLE_UBUNTU)
set(SUPPORT_SRCS icon.cpp fancytabwidget.cpp messagewidget.cpp buddylabel.cpp action.cpp actioncollection.cpp flickcharm.cpp
configuration.cpp lineedit.cpp gtkstyle.cpp spinner.cpp messagebox.cpp inputdialog.cpp thread.cpp squeezedtextlabel.cpp
- touchproxystyle.cpp combobox.cpp)
+ proxystyle.cpp touchproxystyle.cpp pagewidget.cpp combobox.cpp configdialog.cpp)
- set(SUPPORT_MOC_HDRS fancytabwidget.h messagewidget.h inputdialog.h pagewidget.h action.h actioncollection.h flickcharm.h)
+ set(SUPPORT_MOC_HDRS fancytabwidget.h messagewidget.h inputdialog.h pagewidget.h action.h actioncollection.h flickcharm.h
+ configdialog.h)
if (ENABLE_QT5)
set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} combobox.h)
endif (ENABLE_QT5)
if (NOT WIN32 AND NOT APPLE)
- set(SUPPORT_SRCS ${SUPPORT_SRCS} windowmanager.cpp gtkproxystyle.cpp shortcuthandler.cpp)
- set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} windowmanager.h shortcuthandler.h)
+ set(SUPPORT_SRCS ${SUPPORT_SRCS} gtkproxystyle.cpp shortcuthandler.cpp)
+ set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} shortcuthandler.h)
add_subdirectory(themes)
endif (NOT WIN32 AND NOT APPLE)
+ if (NOT WIN32)
+ set(SUPPORT_SRCS ${SUPPORT_SRCS} windowmanager.cpp)
+ set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} windowmanager.h)
+ endif (NOT WIN32)
+ if (APPLE)
+ set(SUPPORT_SRCS ${SUPPORT_SRCS} osxstyle.cpp flattoolbutton.cpp)
+ set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} osxstyle.h)
+ if (ENABLE_QT5)
+ qt5_add_resources(SUPPORT_RC_SRCS support_mac_icons.qrc)
+ else (ENABLE_QT5)
+ qt4_add_resources(SUPPORT_RC_SRCS support_mac_icons.qrc)
+ endif (ENABLE_QT5)
+ endif (APPLE)
if (ENABLE_KDE_SUPPORT)
include_directories(${KDE4_INCLUDES})
@@ -37,15 +51,15 @@ if (NOT ENABLE_UBUNTU)
kde4_add_ui_files(SUPPORT_UI_HDRS ${SUPPORT_UIS})
set(SUPPORT_SRCS ${SUPPORT_SRCS} dialog.cpp)
else (ENABLE_KDE_SUPPORT)
- set(SUPPORT_SRCS ${SUPPORT_SRCS} pathrequester.cpp kmessagewidget.cpp dialog.cpp pagewidget.cpp shortcutsmodel.cpp
- shortcutssettingswidget.cpp keysequencewidget.cpp acceleratormanager.cpp proxystyle.cpp urllabel.cpp)
+ set(SUPPORT_SRCS ${SUPPORT_SRCS} pathrequester.cpp kmessagewidget.cpp dialog.cpp shortcutsmodel.cpp
+ shortcutssettingswidget.cpp keysequencewidget.cpp acceleratormanager.cpp urllabel.cpp)
set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} pathrequester.h kmessagewidget.h urllabel.h
dialog.h shortcutsmodel.h shortcutssettingswidget.h keysequencewidget.h spinner.h acceleratormanager_private.h)
set(SUPPORT_UIS shortcutssettingswidget.ui)
if (ENABLE_QT5)
- if (Qt5Gui_VERSION_MAJOR LESS 5 OR Qt5Gui_VERSION_MINOR LESS 2)
+ # if (Qt5Gui_VERSION_MAJOR LESS 5 OR Qt5Gui_VERSION_MINOR LESS 2)
set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} lineedit.h)
- endif (Qt5Gui_VERSION_MAJOR LESS 5 OR Qt5Gui_VERSION_MINOR LESS 2)
+ # endif (Qt5Gui_VERSION_MAJOR LESS 5 OR Qt5Gui_VERSION_MINOR LESS 2)
qt5_wrap_ui(SUPPORT_UI_HDRS ${SUPPORT_UIS})
else (ENABLE_QT5)
set(SUPPORT_MOC_HDRS ${SUPPORT_MOC_HDRS} lineedit.h)
@@ -59,7 +73,7 @@ if (NOT ENABLE_UBUNTU)
qt4_wrap_cpp(SUPPORT_MOC_SRCS ${SUPPORT_MOC_HDRS})
endif (ENABLE_QT5)
- add_library(support STATIC ${SUPPORT_MOC_SRCS} ${SUPPORT_SRCS} ${SUPPORT_UI_HDRS})
+ add_library(support STATIC ${SUPPORT_MOC_SRCS} ${SUPPORT_SRCS} ${SUPPORT_UI_HDRS} ${SUPPORT_RC_SRCS})
if (X11_FOUND)
target_link_libraries(support ${X11_LIBRARIES})
diff --git a/support/action.cpp b/support/action.cpp
index b9d65f9..de01b68 100644
--- a/support/action.cpp
+++ b/support/action.cpp
@@ -99,7 +99,7 @@ void Action::updateToolTip(QAction *act)
}
act->setToolTip(QString::fromLatin1("%1 <span style=\"color: gray; font-size: small\">%2</span>")
.arg(tt)
- .arg(sc.toString()));
+ .arg(sc.toString(QKeySequence::NativeText)));
}
}
diff --git a/support/actioncollection.cpp b/support/actioncollection.cpp
index 175049b..243fc66 100644
--- a/support/actioncollection.cpp
+++ b/support/actioncollection.cpp
@@ -116,7 +116,7 @@ QList<QAction *> ActionCollection::actions() const {
Action *ActionCollection::addAction(const QString &name, Action *action) {
QAction *act = addAction(name, static_cast<QAction *>(action));
- Q_UNUSED(act);
+ Q_UNUSED(act)
Q_ASSERT(act == action);
return action;
}
diff --git a/support/combobox.cpp b/support/combobox.cpp
index 4cb7cee..f3812d1 100644
--- a/support/combobox.cpp
+++ b/support/combobox.cpp
@@ -23,14 +23,6 @@
#include "combobox.h"
#include "lineedit.h"
-#include "utils.h"
-#include <QAbstractItemView>
-#include <QDesktopWidget>
-#include <QApplication>
-#include "gtkstyle.h"
-
-// Max number of items before we try to force a scrollbar in popup menu...
-static int maxPopupItemCount=-1;
ComboBox::ComboBox(QWidget *p)
#ifdef ENABLE_KDE_SUPPORT
@@ -38,17 +30,7 @@ ComboBox::ComboBox(QWidget *p)
#else
: QComboBox(p)
#endif
- , toggleState(false)
{
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
- if (-1==maxPopupItemCount) {
- if (QApplication::desktop()) {
- maxPopupItemCount=((QApplication::desktop()->height()/(QApplication::fontMetrics().height()*1.5))*0.75)+0.5;
- } else {
- maxPopupItemCount=32;
- }
- }
- #endif
#if QT_VERSION >= 0x050000
connect(this, SIGNAL(editTextChanged(QString)), this, SIGNAL(textChanged(QString)));
#endif
@@ -62,67 +44,3 @@ void ComboBox::setEditable(bool editable)
setLineEdit(edit);
}
}
-
-#if !defined Q_OS_WIN && !defined Q_OS_MAC
-void ComboBox::showPopup()
-{
- if (GtkStyle::isActive() && count()>(maxPopupItemCount-2)) {
- toggleState=!isEditable();
-
- // Hacky, but if we set the combobox as editable - the style gives the
- // popup a scrollbar. This is more convenient if we have lots of items!
- if (toggleState) {
- setMaxVisibleItems(maxPopupItemCount);
- QComboBox::setEditable(true);
- lineEdit()->setReadOnly(true);
- }
- }
- QComboBox::showPopup();
-// if (Utils::touchFriendly()) {
-// view()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-// view()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-// }
-
- if (GtkStyle::isActive() && parentWidget() && view()->parentWidget() && count()>maxPopupItemCount) {
- // Also, if the size of the popup is more than required for 32 items, then
- // restrict its height...
- int maxHeight=maxPopupItemCount*view()->sizeHintForRow(0);
- QRect geo(view()->parentWidget()->geometry());
- QRect r(view()->parentWidget()->rect());
- if (geo.height()>maxHeight) {
- geo=QRect(geo.x(), geo.y()+(geo.height()-maxHeight), geo.width(), maxHeight);
- r=QRect(r.x(), r.y()+(r.height()-maxHeight), r.width(), maxHeight);
- }
- QPoint popupBot=view()->parentWidget()->mapToGlobal(r.bottomLeft());
- QPoint bot=mapToGlobal(rect().bottomLeft());
-
- if (popupBot.y()<bot.y()) {
- geo=QRect(geo.x(), geo.y()+(bot.y()-popupBot.y()), geo.width(), geo.height());
- } else {
- QPoint popupTop=view()->parentWidget()->mapToGlobal(r.topLeft());
- QPoint top=mapToGlobal(rect().topLeft());
- if (popupTop.y()>top.y()) {
- geo=QRect(geo.x(), geo.y()-(popupTop.y()-top.y()), geo.width(), geo.height());
- }
- }
- view()->parentWidget()->setGeometry(geo);
-
- #ifndef ENABLE_KDE_SUPPORT
- // Hide scrollers - these look ugly...
- foreach (QObject *c, view()->parentWidget()->children()) {
- if (0==qstrcmp("QComboBoxPrivateScroller", c->metaObject()->className())) {
- static_cast<QWidget *>(c)->setMaximumHeight(0);
- }
- }
- #endif
- }
-}
-
-void ComboBox::hidePopup()
-{
- if (GtkStyle::isActive() && count()>(maxPopupItemCount-2) && toggleState) {
- QComboBox::setEditable(false);
- }
- QComboBox::hidePopup();
-}
-#endif
diff --git a/support/combobox.h b/support/combobox.h
index 7096657..a5502e7 100644
--- a/support/combobox.h
+++ b/support/combobox.h
@@ -45,18 +45,11 @@ public:
virtual ~ComboBox() { }
void setEditable(bool editable);
- #if !defined Q_OS_WIN && !defined Q_OS_MAC
- void showPopup();
- void hidePopup();
- #endif
#if QT_VERSION >= 0x050000
Q_SIGNALS:
void textChanged(const QString &t);
#endif
-
-private:
- bool toggleState;
};
#endif
diff --git a/support/configdialog.cpp b/support/configdialog.cpp
new file mode 100644
index 0000000..1fda94a
--- /dev/null
+++ b/support/configdialog.cpp
@@ -0,0 +1,451 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "configdialog.h"
+#include "utils.h"
+#ifdef __APPLE__
+#include <QBoxLayout>
+#include <QToolBar>
+#include <QToolButton>
+#include <QDialogButtonBox>
+#include <QBoxLayout>
+#include <QPushButton>
+#include <QButtonGroup>
+#include <QStackedWidget>
+#include <QStylePainter>
+#include <QPainter>
+#include <QColor>
+#include <QRect>
+#include <QLinearGradient>
+#include <QStyleOptionToolButton>
+#include <QPointF>
+#include <QKeyEvent>
+#include <QComboBox>
+#include <QLineEdit>
+#include <QTextEdit>
+#include <QAbstractItemView>
+#include <QTimer>
+#include <QPropertyAnimation>
+#include <QSysInfo>
+#include <QDesktopWidget>
+#include "icon.h"
+#include "osxstyle.h"
+#else
+#include "pagewidget.h"
+#endif
+
+#ifdef __APPLE__
+static void drawFadedLine(QPainter *p, const QRect &r, const QColor &col, bool horiz, double fadeSize)
+{
+ QPointF start(r.x()+0.5, r.y()+0.5);
+ QPointF end(r.x()+(horiz ? r.width()-1 : 0)+0.5,
+ r.y()+(horiz ? 0 : r.height()-1)+0.5);
+ QLinearGradient grad(start, end);
+ QColor fade(col);
+
+ fade.setAlphaF(0.0);
+ grad.setColorAt(0, fade);
+ grad.setColorAt(fadeSize, col);
+ grad.setColorAt(1.0-fadeSize, col);
+ grad.setColorAt(1, fade);
+ p->setPen(QPen(QBrush(grad), 1));
+ p->drawLine(start, end);
+}
+
+class ConfigDialogToolButton : public QToolButton
+{
+public:
+ ConfigDialogToolButton(QWidget *p)
+ : QToolButton(p)
+ {
+ setStyleSheet("QToolButton {border: 0}");
+ setMinimumWidth(56);
+ }
+
+ void paintEvent(QPaintEvent *e)
+ {
+ if (isChecked()) {
+ QPainter p(this);
+ QColor col(Qt::black);
+ QRect r(rect());
+
+ if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_9) {
+ col.setAlphaF(0.1);
+ p.setClipRect(r);
+ p.setRenderHint(QPainter::Antialiasing, true);
+ p.fillPath(Utils::buildPath(r.adjusted(0, 0, 0, 32), 4), col);
+ } else {
+ QLinearGradient bgndGrad(r.topLeft(), r.bottomLeft());
+ col.setAlphaF(0.01);
+ bgndGrad.setColorAt(0, col);
+ bgndGrad.setColorAt(1, col);
+ col.setAlphaF(0.1);
+ bgndGrad.setColorAt(0.25, col);
+ bgndGrad.setColorAt(0.75, col);
+ p.fillRect(r, bgndGrad);
+ p.setRenderHint(QPainter::Antialiasing, true);
+ col.setAlphaF(0.25);
+ drawFadedLine(&p, QRect(r.x(), r.y(), r.x(), r.y()+r.height()-1), col, false, 0.25);
+ drawFadedLine(&p, QRect(r.x()+r.width()-1, r.y(), r.x()+1, r.y()+r.height()-1), col, false, 0.25);
+ }
+ }
+ QStylePainter p(this);
+ QStyleOptionToolButton opt;
+ initStyleOption(&opt);
+ if (isDown()) {
+ opt.state&=QStyle::State_Sunken;
+ }
+ p.drawComplexControl(QStyle::CC_ToolButton, opt);
+ }
+};
+
+static const int constMinPad=16;
+#endif
+
+ConfigDialog::ConfigDialog(QWidget *parent, const QString &name, const QSize &defSize, bool instantApply)
+ #ifdef __APPLE__
+ : QMainWindow(parent)
+ , shown(false)
+ , resizeAnim(0)
+ #else
+ : Dialog(parent, name, defSize)
+ #endif
+{
+ instantApply=false; // TODO!!!!
+
+ #ifdef __APPLE__
+ Q_UNUSED(defSize)
+ Q_UNUSED(name)
+
+ setUnifiedTitleAndToolBarOnMac(true);
+ toolBar=addToolBar("ToolBar");
+ toolBar->setMovable(false);
+ toolBar->setContextMenuPolicy(Qt::PreventContextMenu);
+ toolBar->setStyleSheet("QToolBar { spacing:0px} ");
+ QWidget *left=new QWidget(toolBar);
+ left->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ toolBar->addWidget(left);
+ QWidget *right=new QWidget(toolBar);
+ right->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ rightSpacer=toolBar->addWidget(right);
+ left->setMinimumWidth(constMinPad);
+ right->setMinimumWidth(constMinPad);
+ QWidget *mw=new QWidget(this);
+ QBoxLayout *lay=new QBoxLayout(QBoxLayout::TopToBottom, mw);
+ stack=new QStackedWidget(mw);
+ group=new QButtonGroup(toolBar);
+ lay->addWidget(stack);
+ if (instantApply) {
+ buttonBox=0;
+ setWindowFlags(Qt::Dialog);
+ } else {
+ buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel|QDialogButtonBox::Apply, Qt::Horizontal, mw);
+ lay->addWidget(buttonBox);
+ connect(buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(macButtonPressed(QAbstractButton *)));
+ buttonBox->setStyle(Dialog::buttonProxyStyle());
+ // Hide window buttons if not instany apply - dont want user just closing dialog
+ setWindowFlags(Qt::Dialog|Qt::WindowTitleHint|Qt::CustomizeWindowHint|Qt::WindowMaximizeButtonHint );
+ }
+
+ group->setExclusive(true);
+ setCentralWidget(mw);
+
+ #else
+
+ bool limitedHeight=Utils::limitedHeight(this);
+ pageWidget = new PageWidget(this, limitedHeight, !limitedHeight);
+ setMainWidget(pageWidget);
+ if (instantApply) {
+ // TODO: What???
+ } else {
+ setButtons(Dialog::Ok|Dialog::Cancel|Dialog::Apply);
+ }
+ #endif
+}
+
+ConfigDialog::~ConfigDialog()
+{
+ #ifdef __APPLE__
+ OSXStyle::self()->removeWindow(this);
+ #endif
+}
+
+void ConfigDialog::addPage(const QString &id, QWidget *widget, const QString &name, const Icon &icon, const QString &header)
+{
+ #ifdef __APPLE__
+
+ Page newPage;
+ newPage.item=new ConfigDialogToolButton(this);
+ newPage.item->setText(name);
+ newPage.item->setIcon(icon);
+ newPage.item->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ newPage.item->setCheckable(true);
+ newPage.item->setChecked(false);
+ newPage.item->setProperty("id", id);
+ newPage.item->ensurePolished();
+ toolBar->insertWidget(rightSpacer, newPage.item);
+ newPage.widget=widget;
+ newPage.index=stack->count();
+ stack->addWidget(widget);
+ group->addButton(newPage.item);
+ pages.insert(id, newPage);
+ connect(newPage.item, SIGNAL(toggled(bool)), this, SLOT(activatePage()));
+ int sz=0;
+ QMap<QString, Page>::const_iterator it=pages.begin();
+ QMap<QString, Page>::const_iterator end=pages.end();
+ for (; it!=end; ++it) {
+ sz+=it.value().item->sizeHint().width()+4;
+ }
+ setMinimumWidth(sz+(2*constMinPad)+48);
+ #else
+
+ pages.insert(id, pageWidget->addPage(widget, name, icon, header));
+
+ #endif
+}
+
+bool ConfigDialog::setCurrentPage(const QString &id)
+{
+ if (!pages.contains(id)) {
+ return false;
+ }
+
+ #ifdef __APPLE__
+ QMap<QString, Page>::const_iterator it=pages.find(id);
+ if (it!=pages.end()) {
+ stack->setCurrentIndex(it.value().index);
+ setCaption(it.value().item->text());
+ it.value().item->setChecked(true);
+ }
+ if (isVisible()) {
+ it.value().widget->ensurePolished();
+ ensurePolished();
+ }
+ int newH=buttonBox
+ ? (it.value().widget->sizeHint().height()+toolBar->height()+buttonBox->height()+layout()->spacing()+(2*layout()->margin()))
+ : (it.value().widget->sizeHint().height()+toolBar->height()+(2*layout()->margin()));
+
+ if (isVisible()) {
+ if (newH!=height()) {
+ if (!resizeAnim) {
+ resizeAnim=new QPropertyAnimation(this, "h");
+ resizeAnim->setDuration(250);
+ }
+ resizeAnim->setStartValue(height());
+ resizeAnim->setEndValue(newH);
+ resizeAnim->start();
+ }
+ } else {
+ setFixedHeight(newH);
+ resize(width(), newH);
+ setMaximumHeight(QWIDGETSIZE_MAX);
+ }
+ #else
+ pageWidget->setCurrentPage(pages[id]);
+ #endif
+ return true;
+}
+
+#ifdef __APPLE__
+void ConfigDialog::setH(int h)
+{
+ if (h==resizeAnim->endValue().toInt()) {
+ setMaximumHeight(QWIDGETSIZE_MAX);
+ resize(width(), h);
+ } else {
+ setFixedHeight(h);
+ }
+}
+#endif
+
+QWidget * ConfigDialog::getPage(const QString &id) const
+{
+ if (!pages.contains(id)) {
+ return 0;
+ }
+
+ #ifdef __APPLE__
+ return pages[id].widget;
+ #else
+ return pages[id]->widget();
+ #endif
+}
+
+void ConfigDialog::slotButtonClicked(int button)
+{
+ switch (button) {
+ case Dialog::Ok:
+ case Dialog::Apply:
+ save();
+ break;
+ case Dialog::Cancel:
+ cancel();
+ reject();
+ #ifndef __APPLE__
+ // Need to call this - if not, when dialog is closed by window X control, it is not deleted!!!!
+ Dialog::slotButtonClicked(button);
+ #endif
+ break;
+ default:
+ break;
+ }
+
+ if (Dialog::Ok==button) {
+ accept();
+ }
+
+ #ifndef __APPLE__
+ Dialog::slotButtonClicked(button);
+ #endif
+}
+
+void ConfigDialog::activatePage()
+{
+ #ifdef __APPLE__
+ QToolButton *item=qobject_cast<QToolButton *>(sender());
+ if (item && item->isChecked()) {
+ setCurrentPage(item->property("id").toString());
+ }
+ #endif
+}
+
+#ifdef __APPLE__
+void ConfigDialog::accept()
+{
+ close();
+}
+
+void ConfigDialog::reject()
+{
+ close();
+}
+
+void ConfigDialog::keyPressEvent(QKeyEvent *e)
+{
+ // Only act on Esc if we are instant-apply (in which case there will be no button box)...
+ if (!buttonBox && Qt::Key_Escape==e->key() && Qt::NoModifier==e->modifiers()) {
+ close();
+ }
+}
+
+void ConfigDialog::hideEvent(QHideEvent *e)
+{
+ OSXStyle::self()->removeWindow(this);
+ QMainWindow::hideEvent(e);
+}
+
+void ConfigDialog::closeEvent(QCloseEvent *e)
+{
+ OSXStyle::self()->removeWindow(this);
+ QMainWindow::closeEvent(e);
+}
+
+static bool isFocusable(QWidget *w)
+{
+ if (/*qobject_cast<QAbstractButton *>(w) || qobject_cast<QComboBox *>(w) ||*/ qobject_cast<QLineEdit *>(w) ||
+ qobject_cast<QTextEdit *>(w) || qobject_cast<QAbstractItemView *>(w)) {
+ if (w->isVisible() && w->isEnabled()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+static QWidget *firstFocusableWidget(QWidget *w)
+{
+ if (!w) {
+ return 0;
+ }
+ if (isFocusable(w)) {
+ return w;
+ }
+
+ QObjectList children=w->children();
+ // Try each child first...
+ foreach (QObject *c, children) {
+ if (qobject_cast<QWidget *>(c)) {
+ QWidget *cw=static_cast<QWidget *>(c);
+ if (isFocusable(cw)) {
+ return cw;
+ }
+ }
+ }
+ // Now try grandchildren...
+ foreach (QObject *c, children) {
+ if (qobject_cast<QWidget *>(c)) {
+ QWidget *f=firstFocusableWidget(static_cast<QWidget *>(c));
+ if (f) {
+ return f;
+ }
+ }
+ }
+ return 0;
+}
+
+void ConfigDialog::showEvent(QShowEvent *e)
+{
+ if (!shown) {
+ QTimer::singleShot(0, this, SLOT(setFocus()));
+ shown=true;
+ ensurePolished();
+
+ QDesktopWidget *dw=QApplication::desktop();
+ if (dw) {
+ move(QPoint((dw->availableGeometry(this).size().width()-width())/2, 86));
+ }
+ }
+ OSXStyle::self()->addWindow(this);
+ QMainWindow::showEvent(e);
+}
+#endif
+
+void ConfigDialog::setFocus()
+{
+ #ifdef __APPLE__
+ // When the pref dialog is shown, no widget has focus - and there is a small (4px x 4px?) upper left
+ // corner of a focus highlight drawn in the upper left of the dialog.
+ // To work-around this, after the dialog is shown, look for a widget that can be set to have focus...
+ QWidget *w=firstFocusableWidget(stack->currentWidget());
+ if (w) {
+ w->setFocus();
+ }
+ #endif
+}
+
+void ConfigDialog::macButtonPressed(QAbstractButton *b)
+{
+ #ifdef __APPLE__
+ if (!buttonBox) {
+ return;
+ }
+ if (b==buttonBox->button(QDialogButtonBox::Ok)) {
+ slotButtonClicked(Dialog::Ok);
+ } else if (b==buttonBox->button(QDialogButtonBox::Apply)) {
+ slotButtonClicked(Dialog::Apply);
+ } else if (b==buttonBox->button(QDialogButtonBox::Cancel)) {
+ slotButtonClicked(Dialog::Cancel);
+ }
+ #else
+ Q_UNUSED(b)
+ #endif
+}
diff --git a/support/configdialog.h b/support/configdialog.h
new file mode 100644
index 0000000..514bfaf
--- /dev/null
+++ b/support/configdialog.h
@@ -0,0 +1,116 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef CONFIG_DIALOG_H
+#define CONFIG_DIALOG_H
+
+#include "dialog.h"
+#include "config.h"
+#include <QMap>
+
+#ifdef __APPLE__
+#include <QMainWindow>
+class QToolBar;
+class QToolButton;
+class QButtonGroup;
+class QStackedWidget;
+class QDialogButtonBox;
+class QPropertyAnimation;
+class QAction;
+#else
+class PageWidget;
+class PageWidgetItem;
+#endif
+class Icon;
+class QAbstractButton;
+
+class ConfigDialog : public
+ #ifdef __APPLE__
+ QMainWindow
+ #else
+ Dialog
+ #endif
+{
+ Q_OBJECT
+ #ifdef __APPLE__
+ Q_PROPERTY(int h READ getH WRITE setH)
+ #endif
+
+public:
+ ConfigDialog(QWidget *parent, const QString &name=QString(), const QSize &defSize=QSize(), bool instantApply=false);
+ virtual ~ConfigDialog();
+
+ void addPage(const QString &id, QWidget *widget, const QString &name, const Icon &icon, const QString &header);
+ bool setCurrentPage(const QString &id);
+ QWidget *getPage(const QString &id) const;
+
+ #ifdef __APPLE__
+ void setCaption(const QString &c) { setWindowTitle(c); }
+ void accept();
+ void reject();
+ int getH() const { return height(); }
+ void setH(int h);
+ #endif
+
+ virtual void save()=0;
+ virtual void cancel()=0;
+
+public Q_SLOTS:
+ void slotButtonClicked(int button);
+
+private Q_SLOTS:
+ void activatePage();
+ void macButtonPressed(QAbstractButton *b);
+ void setFocus();
+
+private:
+ #ifdef __APPLE__
+ void keyPressEvent(QKeyEvent *e);
+ void showEvent(QShowEvent *e);
+ void hideEvent(QHideEvent *e);
+ void closeEvent(QCloseEvent *e);
+ #endif
+
+private:
+ #ifdef __APPLE__
+ struct Page {
+ Page() : item(0), widget(0), index(0) { }
+ QToolButton *item;
+ QWidget *widget;
+ int index;
+ };
+ QToolBar *toolBar;
+ QAction *rightSpacer;
+ QButtonGroup *group;
+ QStackedWidget *stack;
+ QDialogButtonBox *buttonBox;
+ QMap<QString, Page> pages;
+ bool shown;
+ QPropertyAnimation *resizeAnim;
+ #else
+ PageWidget *pageWidget;
+ QMap<QString, PageWidgetItem *> pages;
+ #endif
+};
+
+#endif
diff --git a/support/configuration.cpp b/support/configuration.cpp
index f7472f5..26316fd 100644
--- a/support/configuration.cpp
+++ b/support/configuration.cpp
@@ -52,6 +52,24 @@ int Configuration::get(const QString &key, int def, int min, int max)
return v<min ? min : (v>max ? max : v);
}
+QString Configuration::getFilePath(const QString &key, const QString &def)
+{
+ #ifdef Q_OS_WIN
+ return Utils::fixPath(QDir::fromNativeSeparators(get(key, def)), false);
+ #else
+ return Utils::tildaToHome(Utils::fixPath(get(key, def), false));
+ #endif
+}
+
+QString Configuration::getDirPath(const QString &key, const QString &def)
+{
+ #ifdef Q_OS_WIN
+ return Utils::fixPath(QDir::fromNativeSeparators(get(key, def)));
+ #else
+ return Utils::tildaToHome(Utils::fixPath(get(key, def)));
+ #endif
+}
+
#ifdef ENABLE_KDE_SUPPORT
void Configuration::beginGroup(const QString &group)
{
diff --git a/support/configuration.h b/support/configuration.h
index 5ecda4e..52a7b01 100644
--- a/support/configuration.h
+++ b/support/configuration.h
@@ -36,6 +36,7 @@
#else
#include <QSettings>
#endif
+#include "utils.h"
class Configuration
#ifndef ENABLE_KDE_SUPPORT
@@ -97,6 +98,10 @@ public:
void removeEntry(const QString &key) { remove(key); }
#endif
int get(const QString &key, int def, int min, int max);
+ QString getFilePath(const QString &key, const QString &def);
+ void setFilePath(const QString &key, const QString &val) { return set(key, Utils::homeToTilda(val)); }
+ QString getDirPath(const QString &key, const QString &def);
+ void setDirPath(const QString &key, const QString &val) { return set(key, Utils::homeToTilda(val)); }
private:
#ifdef ENABLE_KDE_SUPPORT
diff --git a/support/dialog.cpp b/support/dialog.cpp
index d0b20ad..fb1030a 100644
--- a/support/dialog.cpp
+++ b/support/dialog.cpp
@@ -23,6 +23,9 @@
#include "dialog.h"
#include "configuration.h"
+#ifdef Q_OS_MAC
+#include "osxstyle.h"
+#endif
#ifdef ENABLE_KDE_SUPPORT
#define DLG_BASE KDialog
@@ -37,8 +40,8 @@ Dialog::Dialog(QWidget *parent, const QString &name, const QSize &defSize)
, buttonTypes(0)
, mw(0)
, buttonBox(0)
- , managedAccels(false)
#endif
+ , shown(false)
{
if (!name.isEmpty()) {
setObjectName(name);
@@ -50,25 +53,65 @@ Dialog::Dialog(QWidget *parent, const QString &name, const QSize &defSize)
DLG_BASE::resize(defSize);
}
}
+ #ifdef Q_OS_MAC
+ setWindowIcon(QIcon());
+ #endif
+}
+
+Dialog::~Dialog()
+{
+ if (!objectName().isEmpty() && size()!=cfgSize) {
+ Configuration cfg(objectName());
+ cfg.set("size", size());
+ }
+ #ifdef Q_OS_MAC
+ OSXStyle::self()->removeWindow(this);
+ #endif
}
void Dialog::resize(const QSize &sz)
{
if (cfgSize.isEmpty()) {
- QDialog::resize(sz);
+ DLG_BASE::resize(sz);
cfgSize=sz;
}
}
-Dialog::~Dialog()
+#ifdef ENABLE_KDE_SUPPORT
+#include <KDE/KPushButton>
+#include <QLayout>
+
+void Dialog::showEvent(QShowEvent *e)
{
- if (!objectName().isEmpty() && size()!=cfgSize) {
- Configuration cfg(objectName());
- cfg.set("size", size());
+ if (!shown) {
+ shown=true;
+ QSize mwSize=mainWidget()->minimumSize();
+
+ if (mwSize.width()<16 || mwSize.height()<16) {
+ mwSize=mainWidget()->minimumSizeHint();
+ }
+
+ if (mwSize.width()>15 && mwSize.height()>15) {
+ QSize btnSize(24, 32);
+ for (int i=0; i<15; ++i) {
+ int code=1<<i;
+ KPushButton *btn=KDialog::button((KDialog::ButtonCode)code);
+ if (btn) {
+ btnSize=btn->sizeHint();
+ break;
+ }
+ }
+ QLayout *lay=layout();
+ int sp=lay ? layout()->spacing() : KDialog::spacingHint();
+ int mar=lay ? layout()->margin() : KDialog::marginHint();
+ setMinimumHeight(qMax(minimumHeight(), btnSize.height()+sp+mwSize.height()+(2*mar)));
+ setMinimumWidth(qMax(minimumWidth(), mwSize.width()+(2*mar)));
+ }
}
+ KDialog::showEvent(e);
}
+#else
-#ifndef ENABLE_KDE_SUPPORT
#include "icon.h"
#include "acceleratormanager.h"
#include <QDialogButtonBox>
@@ -77,6 +120,32 @@ Dialog::~Dialog()
#include <QSettings>
#include <QStyle>
+#ifdef Q_OS_MAC
+Dialog::ButtonProxyStyle::ButtonProxyStyle()
+ : QProxyStyle()
+{
+ setBaseStyle(qApp->style());
+}
+
+int Dialog::ButtonProxyStyle::styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const
+{
+ if (QStyle::SH_DialogButtonLayout==stylehint) {
+ return QDialogButtonBox::GnomeLayout;
+ } else {
+ return QProxyStyle::styleHint(stylehint, opt, widget, returnData);
+ }
+}
+
+Dialog::ButtonProxyStyle * Dialog::buttonProxyStyle()
+{
+ static ButtonProxyStyle *style=0;
+ if (!style) {
+ style=new ButtonProxyStyle();
+ }
+ return style;
+}
+#endif
+
namespace StdGuiItem {
GuiItem ok() { return GuiItem(i18n("&OK"), "dialog-ok"); }
GuiItem cancel() { return GuiItem(i18n("&Cancel"), "dialog-cancel"); }
@@ -168,6 +237,9 @@ void Dialog::setButtons(ButtonCodes buttons)
userButtons.clear();
} else {
buttonBox = new QDialogButtonBox(btns, Qt::Horizontal, this);
+ #ifdef Q_OS_MAC
+ buttonBox->setStyle(buttonProxyStyle());
+ #endif
}
if (buttons&Help) {
@@ -346,15 +418,43 @@ QAbstractButton *Dialog::getButton(ButtonCode button)
void Dialog::showEvent(QShowEvent *e)
{
- if (!managedAccels) {
+ if (!shown) {
+ shown=true;
AcceleratorManager::manage(this);
- managedAccels=true;
+ if (defButton) {
+ setDefaultButton((ButtonCode)defButton);
+ }
+ if (buttonBox && mw) {
+ QSize mwSize=mw->minimumSize();
+ if (mwSize.width()<16 || mwSize.height()<16) {
+ mwSize=mw->minimumSizeHint();
+ }
+ if (mwSize.width()>15 && mwSize.height()>15) {
+ setMinimumHeight(qMax(minimumHeight(), buttonBox->height()+layout()->spacing()+mwSize.height()+(2*layout()->margin())));
+ setMinimumWidth(qMax(minimumWidth(), mwSize.width()+(2*layout()->margin())));
+ }
+ }
}
- if (defButton) {
- setDefaultButton((ButtonCode)defButton);
+ #ifdef Q_OS_MAC
+ if (!isModal()) {
+ OSXStyle::self()->addWindow(this);
}
+ #endif
QDialog::showEvent(e);
}
+#ifdef Q_OS_MAC
+void Dialog::hideEvent(QHideEvent *e)
+{
+ OSXStyle::self()->removeWindow(this);
+ QDialog::hideEvent(e);
+}
+
+void Dialog::closeEvent(QCloseEvent *e)
+{
+ OSXStyle::self()->removeWindow(this);
+ QDialog::closeEvent(e);
+}
#endif
+#endif
diff --git a/support/dialog.h b/support/dialog.h
index fe108e6..6ee7057 100644
--- a/support/dialog.h
+++ b/support/dialog.h
@@ -29,16 +29,19 @@
#ifdef ENABLE_KDE_SUPPORT
#include <KDE/KDialog>
#include <KDE/KStandardGuiItem>
-struct Dialog : public KDialog {
+class Dialog : public KDialog {
+public:
Dialog(QWidget *parent, const QString &name=QString(), const QSize &defSize=QSize());
virtual ~Dialog();
const QSize & configuredSize() const { return cfgSize; }
void resize(int w, int h) { resize(QSize(w, h)); }
void resize(const QSize &sz);
-
+private:
+ void showEvent(QShowEvent *e);
private:
QSize cfgSize;
+ bool shown;
};
typedef KGuiItem GuiItem;
namespace StdGuiItem {
@@ -68,6 +71,9 @@ namespace StdGuiItem {
#include <QSet>
#include <QApplication>
#include "localize.h"
+#ifdef Q_OS_MAC
+#include <QProxyStyle>
+#endif
struct GuiItem {
GuiItem(const QString &t=QString(), const QString &i=QString())
@@ -106,6 +112,19 @@ class Dialog : public QDialog {
Q_ENUMS(ButtonCode)
public:
+
+ #ifdef Q_OS_MAC
+ class ButtonProxyStyle : public QProxyStyle
+ {
+ public:
+ ButtonProxyStyle();
+
+ int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const;
+ };
+
+ static ButtonProxyStyle * buttonProxyStyle();
+ #endif
+
enum ButtonCode
{
None = 0x00000000,
@@ -152,6 +171,11 @@ public:
void resize(int w, int h) { resize(QSize(w, h)); }
void resize(const QSize &sz);
+ #ifdef Q_OS_MAC
+ virtual void hideEvent(QHideEvent *e);
+ virtual void closeEvent(QCloseEvent *e);
+ #endif
+
private Q_SLOTS:
void buttonPressed(QAbstractButton *button);
@@ -159,7 +183,7 @@ private:
void create();
QAbstractButton *getButton(ButtonCode button);
void setButtonGuiItem(QDialogButtonBox::StandardButton button, const GuiItem &item);
- void showEvent(QShowEvent *e);
+ virtual void showEvent(QShowEvent *e);
private:
int defButton;
@@ -168,7 +192,7 @@ private:
QDialogButtonBox *buttonBox;
QMap<ButtonCode, QAbstractButton *> userButtons;
QSize cfgSize;
- bool managedAccels;
+ bool shown;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(Dialog::ButtonCodes)
diff --git a/support/fancytabwidget.cpp b/support/fancytabwidget.cpp
index ea3fc0d..5cf4a85 100644
--- a/support/fancytabwidget.cpp
+++ b/support/fancytabwidget.cpp
@@ -39,6 +39,9 @@
#include "gtkstyle.h"
#include "action.h"
#include "utils.h"
+#ifdef Q_OS_MAC
+#include "osxstyle.h"
+#endif
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QPainter>
@@ -84,7 +87,12 @@ int FancyTabWidget::iconSize(bool large)
static void drawIcon(const QIcon &icon, const QRect &r, QPainter *p, const QSize &iconSize, bool selected)
{
QPixmap px = icon.pixmap(iconSize, selected ? QIcon::Selected : QIcon::Normal);
- p->drawPixmap(r.x()+(r.width()-px.width())/2.0, r.y()+(r.height()-px.height())/2.0, px.width(), px.height(), px);
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = px.size() / px.devicePixelRatio();
+ #else
+ QSize layoutSize = px.size();
+ #endif
+ p->drawPixmap(r.x()+(r.width()-layoutSize.width())/2.0, r.y()+(r.height()-layoutSize.height())/2.0, layoutSize.width(), layoutSize.height(), px);
}
void FancyTabProxyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *p, const QWidget *widget) const
@@ -202,13 +210,27 @@ void FancyTabProxyStyle::drawControl(ControlElement element, const QStyleOption
if (!selected && GtkStyle::isActive()) {
GtkStyle::drawSelection(styleOpt, p, (fader*1.0)/150.0);
} else {
+ #ifdef Q_OS_MAC
+ OSXStyle::self()->drawSelection(styleOpt, p, selected ? 1.0 : (fader*1.0)/150.0);
+ #else
+ #ifdef Q_OS_WIN
+ if (QPalette::Active!=styleOpt.palette.currentColorGroup()) {
+ styleOpt.palette.setColor(QPalette::Highlight, styleOpt.palette.color(QPalette::Window).darker(110));
+ }
+ #endif
QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &styleOpt, p, 0);
+ #endif
}
}
int textFlags = Qt::AlignTop | Qt::AlignVCenter;
+ #ifdef Q_OS_MAC
+ p->setPen(selected && option->state&State_Active
+ ? OSXStyle::self()->viewPalette().highlightedText().color() : OSXStyle::self()->viewPalette().foreground().color());
+ #else
p->setPen(selected && option->state&State_Active
? QApplication::palette().highlightedText().color() : QApplication::palette().foreground().color());
+ #endif
drawIcon(v3Opt->icon, iconRect, p, v3Opt->iconSize,
selected && option->state&State_Active);
@@ -241,6 +263,7 @@ void FancyTabProxyStyle::polish(QPalette &palette)
bool FancyTabProxyStyle::eventFilter(QObject* o, QEvent* e)
{
+ #ifndef Q_OS_MAC
QTabBar *bar = qobject_cast<QTabBar*>(o);
if (bar && (e->type() == QEvent::MouseMove || e->type() == QEvent::Leave)) {
QMouseEvent *event = static_cast<QMouseEvent*>(e);
@@ -252,6 +275,7 @@ bool FancyTabProxyStyle::eventFilter(QObject* o, QEvent* e)
bar->update();
}
}
+ #endif
return false;
}
@@ -259,25 +283,31 @@ bool FancyTabProxyStyle::eventFilter(QObject* o, QEvent* e)
FancyTab::FancyTab(FancyTabBar* tabbar)
: QWidget(tabbar), tabbar(tabbar), faderValue(0)
{
+ #ifndef Q_OS_MAC
animator.setPropertyName("fader");
animator.setTargetObject(this);
+ #endif
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
}
void FancyTab::fadeIn()
{
+ #ifndef Q_OS_MAC
animator.stop();
animator.setDuration(80);
animator.setEndValue(50);
animator.start();
+ #endif
}
void FancyTab::fadeOut()
{
+ #ifndef Q_OS_MAC
animator.stop();
animator.setDuration(160);
animator.setEndValue(0);
animator.start();
+ #endif
}
void FancyTab::setFader(float value)
@@ -490,7 +520,16 @@ void FancyTabBar::paintTab(QPainter *painter, int tabIndex, bool gtkStyle) const
if (!selected && gtkStyle) {
GtkStyle::drawSelection(styleOpt, painter, tabs[tabIndex]->fader()/150.0);
} else {
+ #ifdef Q_OS_MAC
+ OSXStyle::self()->drawSelection(styleOpt, painter, selected ? 1.0 : tabs[tabIndex]->fader()/150.0);
+ #else
+ #ifdef Q_OS_WIN
+ if (QPalette::Active!=styleOpt.palette.currentColorGroup()) {
+ styleOpt.palette.setColor(QPalette::Highlight, styleOpt.palette.color(QPalette::Window).darker(110));
+ }
+ #endif
QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &styleOpt, painter, 0);
+ #endif
}
}
@@ -500,7 +539,14 @@ void FancyTabBar::paintTab(QPainter *painter, int tabIndex, bool gtkStyle) const
QRect tabIconRect(tabTextRect);
tabIconRect.adjust(+4, +4, -4, -4);
tabTextRect.translate(0, -2);
- painter->setPen(selected ? palette().highlightedText().color() : palette().foreground().color());
+
+ #ifdef Q_OS_MAC
+ painter->setPen(selected ? OSXStyle::self()->viewPalette().highlightedText().color() : OSXStyle::self()->viewPalette().foreground().color());
+ #else
+// painter->setPen(selected ? QApplication::palette().highlightedText().color() : palette().foreground().color());
+ painter->setPen(selected && styleOpt.state&QStyle::State_Active
+ ? QApplication::palette().highlightedText().color() : QApplication::palette().foreground().color());
+ #endif
int textFlags = Qt::AlignCenter | Qt::AlignBottom;
painter->drawText(tabTextRect, textFlags, tabText);
diff --git a/support/fancytabwidget.h b/support/fancytabwidget.h
index f2143ca..2720a6c 100644
--- a/support/fancytabwidget.h
+++ b/support/fancytabwidget.h
@@ -93,7 +93,9 @@ protected:
void leaveEvent(QEvent *);
private:
+ #ifndef Q_OS_MAC
QPropertyAnimation animator;
+ #endif
FancyTabBar *tabbar;
float faderValue;
};
diff --git a/support/flattoolbutton.cpp b/support/flattoolbutton.cpp
new file mode 100644
index 0000000..8d01273
--- /dev/null
+++ b/support/flattoolbutton.cpp
@@ -0,0 +1,57 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "flattoolbutton.h"
+#include "utils.h"
+#include <QPainter>
+#include <QStylePainter>
+#include <QStyleOptionToolButton>
+
+FlatToolButton::FlatToolButton(QWidget *parent)
+ : QToolButton(parent)
+{
+ setStyleSheet("QToolButton {border: 0}");
+}
+
+void FlatToolButton::paintEvent(QPaintEvent *e)
+{
+ if (isChecked() || isDown()) {
+ QPainter p(this);
+ QColor col(palette().color(QPalette::WindowText));
+ QRect r(rect());
+ QPainterPath path=Utils::buildPath(QRectF(r.x()+0.5, r.y()+0.5, r.width()-1, r.height()-1), 2.5);
+ p.setRenderHint(QPainter::Antialiasing, true);
+ col.setAlphaF(0.4);
+ p.setPen(col);
+ p.drawPath(path);
+ col.setAlphaF(0.1);
+ p.fillPath(path, col);
+ }
+ QStylePainter p(this);
+ QStyleOptionToolButton opt;
+ initStyleOption(&opt);
+// if (isDown()) {
+// opt.state&=QStyle::State_Sunken;
+// }
+ p.drawComplexControl(QStyle::CC_ToolButton, opt);
+}
diff --git a/widgets/toolbutton.h b/support/flattoolbutton.h
similarity index 74%
copy from widgets/toolbutton.h
copy to support/flattoolbutton.h
index a77e4ac..de49229 100644
--- a/widgets/toolbutton.h
+++ b/support/flattoolbutton.h
@@ -21,24 +21,20 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef TOOLBUTTON_H
-#define TOOLBUTTON_H
+#ifndef FLATTOOLBUTTON_H
+#define FLATTOOLBUTTON_H
#include <QToolButton>
-class QMenu;
-class ToolButton : public QToolButton
+class FlatToolButton : public QToolButton
{
public:
- explicit ToolButton(QWidget *parent = 0);
- QSize sizeHint() const;
- void setMenu(QMenu *m);
+ #ifdef Q_OS_MAC
+ explicit FlatToolButton(QWidget *parent = 0);
void paintEvent(QPaintEvent *e);
- void setHideMenuIndicator(bool h) { hideMenuIndicator=h; }
-
-private:
- bool hideMenuIndicator;
- mutable QSize sh;
+ #else
+ explicit FlatToolButton(QWidget *parent = 0) : QToolButton(parent) { setAutoRaise(true); }
+ #endif
};
#endif // MENUBUTTON_H
diff --git a/support/gtkproxystyle.cpp b/support/gtkproxystyle.cpp
index 2854337..33b64d2 100644
--- a/support/gtkproxystyle.cpp
+++ b/support/gtkproxystyle.cpp
@@ -52,13 +52,14 @@ static bool useOverlayStyleScrollbars(bool use)
if (!env.isEmpty() && env!="1") {
return false;
}
+ QString mode=GtkStyle::readDconfSetting(QLatin1String("scrollbar-mode"), QLatin1String("/com/canonical/desktop/interface/"));
+ return mode!=QLatin1String("normal");
}
return use;
}
-GtkProxyStyle::GtkProxyStyle(bool thinSb, bool styleSpin, const QMap<QString, QString> &c, bool modView)
- : TouchProxyStyle(styleSpin, useOverlayStyleScrollbars(thinSb))
- , modViewFrame(modView)
+GtkProxyStyle::GtkProxyStyle(int modView, bool thinSb, bool styleSpin, const QMap<QString, QString> &c)
+ : TouchProxyStyle(modView, styleSpin, useOverlayStyleScrollbars(thinSb))
, css(c)
{
shortcutHander=new ShortcutHandler(this);
@@ -83,25 +84,6 @@ int GtkProxyStyle::styleHint(StyleHint hint, const QStyleOption *option, const Q
return TouchProxyStyle::styleHint(hint, option, widget, returnData);
}
-void GtkProxyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
-{
- TouchProxyStyle::drawPrimitive(element, option, painter, widget);
- if (modViewFrame && PE_Frame==element && widget && widget->property(GtkStyle::constHideFrameProp).isValid()) {
- const QRect &r=option->rect;
- if (option->palette.base().color()==Qt::transparent) {
- painter->setPen(QPen(QApplication::palette().color(QPalette::Base), 1));
- } else {
- painter->setPen(QPen(option->palette.base(), 1));
- }
- if (Qt::LeftToRight==option->direction) {
- painter->drawLine(r.topRight()+QPoint(0, 1), r.bottomRight()+QPoint(0, -1));
- } else {
- painter->drawLine(r.topLeft()+QPoint(0, 1), r.bottomLeft()+QPoint(0, -1));
- }
- }
-
-}
-
void GtkProxyStyle::polish(QWidget *widget)
{
#ifndef ENABLE_KDE_SUPPORT
diff --git a/support/gtkproxystyle.h b/support/gtkproxystyle.h
index e1a9ea3..2ae9c48 100644
--- a/support/gtkproxystyle.h
+++ b/support/gtkproxystyle.h
@@ -33,10 +33,9 @@ class ShortcutHandler;
class GtkProxyStyle : public TouchProxyStyle
{
public:
- GtkProxyStyle(bool thinSb, bool styleSpin, const QMap<QString, QString> &c, bool modView);
+ GtkProxyStyle(int modView, bool thinSb, bool styleSpin, const QMap<QString, QString> &c);
~GtkProxyStyle();
int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const;
- void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const;
void polish(QWidget *widget);
void polish(QPalette &pal);
@@ -46,7 +45,6 @@ public:
private:
ShortcutHandler *shortcutHander;
- bool modViewFrame;
QMap<QString, QString> css;
};
diff --git a/support/gtkstyle.cpp b/support/gtkstyle.cpp
index 1bd9f4d..4570690 100644
--- a/support/gtkstyle.cpp
+++ b/support/gtkstyle.cpp
@@ -105,27 +105,57 @@ void GtkStyle::drawSelection(const QStyleOptionViewItemV4 &opt, QPainter *painte
painter->setOpacity(opacityB4);
}
-#ifndef NO_GTK_SUPPORT
-// For some reason, dconf does not seem to terminate correctly when run under some desktops (e.g. KDE)
-// Destroying the QProcess seems to block, causing the app to appear to hang before starting.
-// So, create QProcess on the heap - and only wait 1.5s for response. Connect finished to deleteLater
-// so that the object is destroyed.
-static QString readDconfSetting(const QString &setting)
+QString GtkStyle::readDconfSetting(const QString &setting, const QString &scheme)
{
+ #ifdef NO_GTK_SUPPORT
+ Q_UNUSED(setting)
+ Q_UNUSED(scheme)
+ #else
+ // For some reason, dconf does not seem to terminate correctly when run under some desktops (e.g. KDE)
+ // Destroying the QProcess seems to block, causing the app to appear to hang before starting.
+ // So, create QProcess on the heap - and only wait 1.5s for response. Connect finished to deleteLater
+ // so that the object is destroyed.
+ static bool first=true;
+ static bool ok=true;
+
+ if (first) {
+ first=false;
+ } else if (!ok) { // Failed before, so dont bothe rcalling dconf again!
+ return QString();
+ }
+
+ QString schemeToUse=scheme.isEmpty() ? QLatin1String("/org/gnome/desktop/interface/") : scheme;
QProcess *process=new QProcess();
- process->start(QLatin1String("dconf"), QStringList() << QLatin1String("read") << QLatin1String("/org/gnome/desktop/interface/")+setting);
+ process->start(QLatin1String("dconf"), QStringList() << QLatin1String("read") << schemeToUse+setting);
QObject::connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater()));
if (process->waitForFinished(1500)) {
QString resp = process->readAllStandardOutput();
resp = resp.trimmed();
resp.remove('\'');
+
+ if (resp.isEmpty()) {
+ // Probably set to the default, and dconf does not store defaults! Therefore, need to read via gsettings...
+ schemeToUse=schemeToUse.mid(1, schemeToUse.length()-2).replace("/", ".");
+ QProcess *gsettingsProc=new QProcess();
+ gsettingsProc->start(QLatin1String("gsettings"), QStringList() << QLatin1String("get") << schemeToUse << setting);
+ QObject::connect(gsettingsProc, SIGNAL(finished(int)), process, SLOT(deleteLater()));
+ if (gsettingsProc->waitForFinished(1500)) {
+ resp = gsettingsProc->readAllStandardOutput();
+ resp = resp.trimmed();
+ resp.remove('\'');
+ } else {
+ gsettingsProc->kill();
+ }
+ }
return resp;
+ } else { // If we failed 1 time, dont bother next time!
+ ok=false;
}
process->kill();
+ #endif
return QString();
}
-#endif
#ifndef NO_GTK_SUPPORT
static QString iconThemeSetting;
@@ -238,8 +268,12 @@ static WindowManager *wm=0;
static QProxyStyle *proxyStyle=0;
static bool symbolicIcons=false;
static QColor symbolicIconColor(0, 0, 0);
+static bool thinSbar=false;
-const char * GtkStyle::constHideFrameProp="hide-frame";
+bool GtkStyle::thinScrollbars()
+{
+ return thinSbar;
+}
void GtkStyle::applyTheme(QWidget *widget)
{
@@ -248,9 +282,8 @@ void GtkStyle::applyTheme(QWidget *widget)
#else
if (widget && isActive()) {
QString theme=GtkStyle::themeName().toLower();
- bool thinSbar=false;
bool touchStyleSpin=false;
- bool modViewFrame=false;
+ int modViewFrame=0;
QMap<QString, QString> css;
if (!theme.isEmpty()) {
QFile cssFile(Utils::systemDir(QLatin1String("themes"))+theme+QLatin1String(".css"));
@@ -272,7 +305,11 @@ void GtkStyle::applyTheme(QWidget *widget)
thinSbar=true;
}
touchStyleSpin=line.contains("spinbox:touch");
- modViewFrame=line.contains("modview:true");
+ modViewFrame=line.contains("modview:ts")
+ ? ProxyStyle::VF_Side|ProxyStyle::VF_Top
+ : line.contains("modview:true")
+ ? ProxyStyle::VF_Side
+ : 0;
int pos=line.indexOf(symKey);
if (pos>0 && pos+6<line.length()) {
symbolicIcons=true;
@@ -288,17 +325,25 @@ void GtkStyle::applyTheme(QWidget *widget)
}
}
if (!proxyStyle) {
- proxyStyle=new GtkProxyStyle(thinSbar, touchStyleSpin || Utils::touchFriendly(), css, modViewFrame && !Utils::touchFriendly());
+ proxyStyle=new GtkProxyStyle(modViewFrame, thinSbar, touchStyleSpin || Utils::touchFriendly(), css);
}
}
#endif
+ #if defined Q_OS_WIN
+ int modViewFrame=ProxyStyle::VF_Side;
+ #elif defined Q_OS_MAC
+ int modViewFrame=ProxyStyle::VF_Side|ProxyStyle::VF_Top;
+ #else
+ int modViewFrame=0;
+ #endif
+
if (!proxyStyle && Utils::touchFriendly()) {
- proxyStyle=new TouchProxyStyle;
+ proxyStyle=new TouchProxyStyle(modViewFrame);
}
#ifndef ENABLE_KDE_SUPPORT
if (!proxyStyle) {
- proxyStyle=new ProxyStyle();
+ proxyStyle=new ProxyStyle(modViewFrame);
}
#endif
if (proxyStyle) {
diff --git a/support/gtkstyle.h b/support/gtkstyle.h
index 419f5a0..5976e41 100644
--- a/support/gtkstyle.h
+++ b/support/gtkstyle.h
@@ -32,14 +32,14 @@ class QWidget;
namespace GtkStyle
{
- extern const char * constHideFrameProp;
-
+ QString readDconfSetting(const QString &setting, const QString &scheme=QString());
extern bool isActive();
extern void drawSelection(const QStyleOptionViewItemV4 &opt, QPainter *painter, double opacity);
extern QString themeName();
extern QString iconTheme();
extern void setThemeName(const QString &n);
extern void setIconTheme(const QString &n);
+ extern bool thinScrollbars();
extern void applyTheme(QWidget *widget);
extern void registerWidget(QWidget *widget);
extern bool useSymbolicIcons();
diff --git a/support/icon.cpp b/support/icon.cpp
index 86f97e8..e564b8c 100644
--- a/support/icon.cpp
+++ b/support/icon.cpp
@@ -109,3 +109,43 @@ Icon Icon::create(const QString &name, const QList<int> &sizes, bool andSvg)
}
return icon;
}
+
+#ifdef Q_OS_MAC
+Icon Icon::std(Std i)
+{
+ static bool initResource=true;
+ if (initResource) {
+ Q_INIT_RESOURCE(support_mac_icons);
+ initResource=false;
+ }
+ Icon icon;
+ switch (i) {
+ case Close: icon.addFile(":support-mac-close"); break;
+ case Clear: icon.addFile(":support-mac-clear"); break;
+ default: break;
+ }
+ return icon;
+}
+#else
+Icon Icon::std(Std i)
+{
+ Icon icon;
+ switch (i) {
+ case Close:
+ icon=Icon("dialog-close");
+ if (icon.isNull()) {
+ icon=Icon("window-close");
+ }
+ break;
+ case Clear:
+ icon=Icon(qApp->isRightToLeft() ? "edit-clear-locationbar-ltr" : "edit-clear-locationbar-rtl");
+ if (icon.isNull()) {
+ icon=Icon("edit-clear");
+ }
+ break;
+ default: break;
+ }
+ return icon;
+}
+
+#endif
diff --git a/support/icon.h b/support/icon.h
index a48e6e9..1ae1849 100644
--- a/support/icon.h
+++ b/support/icon.h
@@ -60,6 +60,12 @@ public:
static QString currentTheme() { return QIcon::themeName(); }
#endif
static Icon create(const QString &name, const QList<int> &sizes, bool andSvg=false);
+
+ enum Std {
+ Close,
+ Clear
+ };
+ static Icon std(Std i);
};
#endif
diff --git a/support/keysequencewidget.cpp b/support/keysequencewidget.cpp
index 998da92..edf93ad 100644
--- a/support/keysequencewidget.cpp
+++ b/support/keysequencewidget.cpp
@@ -28,7 +28,7 @@
#include <QApplication>
#include <QKeyEvent>
#include <QHBoxLayout>
-#include <QMessageBox>
+#include "messagebox.h"
#include <QToolButton>
// This defines the unicode symbols for special keys (kCommandUnicode and friends)
@@ -72,9 +72,9 @@ void KeySequenceButton::keyPressEvent(QKeyEvent *e) {
// Qt sometimes returns garbage keycodes, I observed -1, if it doesn't know a key.
// We cannot do anything useful with those (several keys have -1, indistinguishable)
// and QKeySequence.toString() will also yield a garbage string.
- QMessageBox::information(this,
- tr("The key you just pressed is not supported by Qt."),
- tr("Unsupported Key"));
+ MessageBox::information(this,
+ tr("The key you just pressed is not supported by Qt."),
+ tr("Unsupported Key"));
return d->cancelRecording();
}
@@ -353,21 +353,20 @@ bool KeySequenceWidget::isKeySequenceAvailable(const QKeySequence &seq) {
continue;
if(!actIdx.data(ShortcutsModel::IsConfigurableRole).toBool()) {
- QMessageBox::warning(this, tr("Shortcut Conflict"),
- tr("The \"%1\" shortcut is already in use, and cannot be configured.\nPlease choose another one.").arg(seq.toString(QKeySequence::NativeText)),
- QMessageBox::Ok);
+ MessageBox::error(this,
+ tr("The \"%1\" shortcut is already in use, and cannot be configured.\n\nPlease choose another one.").arg(seq.toString(QKeySequence::NativeText)),
+ tr("Shortcut Conflict"));
return false;
}
- QMessageBox box(QMessageBox::Warning, tr("Shortcut Conflict"),
- (tr("The \"%1\" shortcut is ambiguous with the shortcut for the following action:")
- + "<br><ul><li>%2</li></ul><br>"
- + tr("Do you want to reassign this shortcut to the selected action?")
- ).arg(seq.toString(QKeySequence::NativeText), actIdx.data().toString()),
- QMessageBox::Cancel, this);
- box.addButton(tr("Reassign"), QMessageBox::AcceptRole);
- if(box.exec() == QMessageBox::Cancel)
+ QString message=tr("Ambiguous shortcut.")+QLatin1String("\n\n")+
+ QString(tr("The \"%1\" shortcut is ambiguous with the shortcut for the following action:")
+ + "\n %2\n"
+ + tr("Do you want to reassign this shortcut to the selected action?")
+ ).arg(seq.toString(QKeySequence::NativeText), actIdx.data().toString());
+ if (MessageBox::Yes!=MessageBox::warningYesNo(this, message, tr("Shortcut Conflict"), GuiItem(tr("Reassign")))) {
return false;
+ }
_conflictingIndex = actIdx;
return true;
diff --git a/support/kmessagewidget.cpp b/support/kmessagewidget.cpp
index b7f1e61..c7e305b 100644
--- a/support/kmessagewidget.cpp
+++ b/support/kmessagewidget.cpp
@@ -18,6 +18,8 @@
* 02110-1301 USA
*/
#include "kmessagewidget.h"
+#include "localize.h"
+#include "utils.h"
#ifdef ENABLE_KDE_SUPPORT
#include <kaction.h>
@@ -31,6 +33,7 @@
#include "icon.h"
#include "squeezedtextlabel.h"
+#include "flattoolbutton.h"
#include <QEvent>
#include <QGridLayout>
#include <QHBoxLayout>
@@ -86,8 +89,17 @@ void KMsgWidgetPrivate::init(KMsgWidget *q_ptr)
wordWrap = false;
- iconLabel = new QLabel(content);
- iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ #ifdef Q_OS_MAC
+ bool closeOnLeft=true;
+ #else
+ bool closeOnLeft=Utils::Unity==Utils::currentDe();
+ #endif
+ if (closeOnLeft) {
+ iconLabel=0;
+ } else {
+ iconLabel = new QLabel(content);
+ iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ }
textLabel = new SqueezedTextLabel(content);
textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
@@ -97,18 +109,16 @@ void KMsgWidgetPrivate::init(KMsgWidget *q_ptr)
KAction* closeAction = KStandardAction::close(q, SLOT(animatedHide()), q);
#else
QAction* closeAction = new QAction(q);
- Icon icon=Icon("dialog-close");
- if (icon.isNull()) {
- icon=Icon("window-close");
- }
- closeAction->setIcon(icon);
+ closeAction->setIcon(Icon::std(Icon::Close));
+ closeAction->setToolTip(i18n("Close"));
QObject::connect(closeAction, SIGNAL(triggered()), q, SLOT(animatedHide()));
#endif
- closeButton = new QToolButton(content);
- closeButton->setAutoRaise(true);
+ closeButton = new FlatToolButton(content);
closeButton->setDefaultAction(closeAction);
-
+ #ifdef Q_OS_MAC
+ closeButton->setStyleSheet("QToolButton {border: 0}");
+ #endif
q->setMessageType(KMsgWidget::Information);
}
@@ -124,20 +134,29 @@ void KMsgWidgetPrivate::createLayout()
Q_FOREACH(QAction* action, q->actions()) {
QToolButton* button = new QToolButton(content);
button->setDefaultAction(action);
- button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ if (content->style()->styleHint(QStyle::SH_DialogButtonBox_ButtonsHaveIcons)) {
+ button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ } else {
+ button->setToolButtonStyle(Qt::ToolButtonTextOnly);
+ }
buttons.append(button);
}
// AutoRaise reduces visual clutter, but we don't want to turn it on if
// there are other buttons, otherwise the close button will look different
// from the others.
- closeButton->setAutoRaise(buttons.isEmpty());
+ closeButton->setAutoRaise(!iconLabel || buttons.isEmpty());
if (wordWrap) {
QGridLayout* layout = new QGridLayout(content);
// Set alignment to make sure icon does not move down if text wraps
- layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
+ if (iconLabel) {
+ layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
+ } else {
+ layout->addWidget(closeButton, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
+ }
layout->addWidget(textLabel, 0, 1);
+ layout->setMargin(4);
QHBoxLayout* buttonLayout = new QHBoxLayout;
buttonLayout->addStretch();
@@ -148,18 +167,28 @@ void KMsgWidgetPrivate::createLayout()
button->show();
buttonLayout->addWidget(button);
}
- buttonLayout->addWidget(closeButton);
+ if (iconLabel) {
+ buttonLayout->addWidget(closeButton);
+ }
layout->addItem(buttonLayout, 1, 0, 1, 2);
} else {
QHBoxLayout* layout = new QHBoxLayout(content);
- layout->addWidget(iconLabel);
+
+ if (iconLabel) {
+ layout->addWidget(iconLabel);
+ } else {
+ layout->addWidget(closeButton);
+ }
layout->addWidget(textLabel);
Q_FOREACH(QToolButton* button, buttons) {
layout->addWidget(button);
}
- layout->addWidget(closeButton);
+ if (iconLabel) {
+ layout->addWidget(closeButton);
+ }
+ layout->setMargin(4);
};
if (q->isVisible()) {
@@ -274,15 +303,17 @@ static void getColorsFromColorScheme(KColorScheme::BackgroundRole bgRole, QColor
*fg = scheme.foreground().color();
}
#endif
-#include <QDebug>
void KMsgWidget::setMessageType(KMsgWidget::MessageType type)
{
d->messageType = type;
QIcon icon;
QColor bg0, bg1, bg2, border, fg;
+ bool useIcon=d->iconLabel;
switch (type) {
case Positive:
- icon = QIcon::fromTheme("dialog-ok");
+ if (useIcon) {
+ icon = QIcon::fromTheme("dialog-ok");
+ }
#ifdef ENABLE_KDE_SUPPORT
getColorsFromColorScheme(KColorScheme::PositiveBackground, &bg1, &fg);
#else
@@ -292,7 +323,9 @@ void KMsgWidget::setMessageType(KMsgWidget::MessageType type)
#endif
break;
case Information:
- icon = QIcon::fromTheme("dialog-information");
+ if (useIcon) {
+ icon = QIcon::fromTheme("dialog-information");
+ }
// There is no "information" background role in KColorScheme, use the
// colors of highlighted items instead
bg1 = palette().highlight().color();
@@ -300,7 +333,9 @@ void KMsgWidget::setMessageType(KMsgWidget::MessageType type)
border = bg1.darker(150);
break;
case Warning:
- icon = QIcon::fromTheme("dialog-warning");
+ if (useIcon) {
+ icon = QIcon::fromTheme("dialog-warning");
+ }
#ifdef ENABLE_KDE_SUPPORT
getColorsFromColorScheme(KColorScheme::NeutralBackground, &bg1, &fg);
#else
@@ -310,7 +345,9 @@ void KMsgWidget::setMessageType(KMsgWidget::MessageType type)
#endif
break;
case Error:
- icon = QIcon::fromTheme("dialog-error");
+ if (useIcon) {
+ icon = QIcon::fromTheme("dialog-error");
+ }
#ifdef ENABLE_KDE_SUPPORT
getColorsFromColorScheme(KColorScheme::NegativeBackground, &bg1, &fg);
#else
@@ -334,7 +371,9 @@ void KMsgWidget::setMessageType(KMsgWidget::MessageType type)
" stop: 0 %1,"
" stop: 0.1 %2,"
" stop: 1.0 %3);"
+ #ifdef ENABLE_KDE_SUPPORT
"border-radius: 5px;"
+ #endif
"border: 1px solid %4;"
"margin: %5px;"
"}"
@@ -349,13 +388,15 @@ void KMsgWidget::setMessageType(KMsgWidget::MessageType type)
.arg(fg.name())
);
- // Icon
- #ifdef ENABLE_KDE_SUPPORT
- const int size = KIconLoader::global()->currentSize(KIconLoader::MainToolbar);
- #else
- const int size = Icon::stdSize(fontMetrics().height()*1.5);
- #endif
- d->iconLabel->setPixmap(icon.pixmap(size));
+ if (useIcon) {
+ // Icon
+ #ifdef ENABLE_KDE_SUPPORT
+ const int size = KIconLoader::global()->currentSize(KIconLoader::MainToolbar);
+ #else
+ const int size = Icon::stdSize(fontMetrics().height()*1.5);
+ #endif
+ d->iconLabel->setPixmap(icon.pixmap(size));
+ }
}
//QSize KMsgWidget::sizeHint() const
diff --git a/support/lineedit.cpp b/support/lineedit.cpp
index 2b72fab..3814ee7 100644
--- a/support/lineedit.cpp
+++ b/support/lineedit.cpp
@@ -41,7 +41,7 @@ void LineEdit::setReadOnly(bool e)
}
}
-#if !defined ENABLE_KDE_SUPPORT && QT_VERSION < 0x050200
+#if !defined ENABLE_KDE_SUPPORT // && QT_VERSION < 0x050200
/****************************************************************************
**
@@ -62,13 +62,7 @@ LineEdit::LineEdit(QWidget *parent)
: QLineEdit(parent)
{
clearButton = new QToolButton(this);
- int iconSize=Icon::stdSize(fontMetrics().height());
- QPixmap pixmap(Icon(isRightToLeft() ? "edit-clear-locationbar-ltr" : "edit-clear-locationbar-rtl").pixmap(iconSize, iconSize));
- if (pixmap.isNull()) {
- pixmap=(Icon("edit-clear").pixmap(iconSize, iconSize));
- }
- clearButton->setIcon(QIcon(pixmap));
- clearButton->setIconSize(pixmap.size());
+ clearButton->setIcon(Icon::std(Icon::Clear));
clearButton->setCursor(Qt::ArrowCursor);
clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }");
clearButton->hide();
diff --git a/support/lineedit.h b/support/lineedit.h
index dde2d2a..2127ebb 100644
--- a/support/lineedit.h
+++ b/support/lineedit.h
@@ -45,15 +45,15 @@ public:
void setReadOnly(bool e);
};
-#elif QT_VERSION >= 0x050200
-
-class LineEdit : public QLineEdit
-{
-public:
- LineEdit(QWidget *parent = 0) : QLineEdit(parent) { setClearButtonEnabled(true); }
- virtual ~LineEdit() { }
- void setReadOnly(bool e);
-};
+//#elif QT_VERSION >= 0x050200
+//
+//class LineEdit : public QLineEdit
+//{
+//public:
+// LineEdit(QWidget *parent = 0) : QLineEdit(parent) { setClearButtonEnabled(true); }
+// virtual ~LineEdit() { }
+// void setReadOnly(bool e);
+//};
#else
diff --git a/support/mac-clear.svg b/support/mac-clear.svg
new file mode 100644
index 0000000..25eef0e
--- /dev/null
+++ b/support/mac-clear.svg
@@ -0,0 +1,3 @@
+<svg id="svg2" xmlns="http://www.w3.org/2000/svg" fill="#c0c0c0" height="512" width="512" version="1.1" viewBox="0 0 512 512">
+<path id="path4" d="m256 25.6c-127.24 0-230.4 103.16-230.4 230.4s103.16 230.4 230.4 230.4 230.4-103.16 230.4-230.4-103.16-230.4-230.4-230.4zm115.2 155.93-74.47 74.47 74.47 74.47v40.73h-40.73l-74.466-74.466-74.466 74.466h-40.734v-40.73l74.466-74.466-74.466-74.466v-40.734h40.73l74.466 74.466 74.466-74.466h40.734v40.734z"/>
+</svg>
diff --git a/support/mac-close.svg b/support/mac-close.svg
new file mode 100644
index 0000000..606e98a
--- /dev/null
+++ b/support/mac-close.svg
@@ -0,0 +1,3 @@
+<svg id="svg2" xmlns="http://www.w3.org/2000/svg" fill="#888888" height="512" width="512" version="1.1" viewBox="0 0 512 512">
+<path id="path4" d="m457.06 380.26c-0.002-0.002-0.003-0.003-0.005-0.004l-124.26-124.26 124.26-124.26c0.002-0.002 0.003-0.002 0.005-0.004 1.3376-1.3384 2.3048-2.9016 2.9248-4.5664 1.6984-4.5504 0.7296-9.8728-2.9296-13.532l-58.704-58.706c-3.6592-3.6584-8.98-4.6264-13.531-2.928-1.664 0.62-3.228 1.5872-4.5672 2.924 0 0.0016-0.002 0.0024-0.003 0.004l-124.26 124.26-124.26-124.26-0.004-0.004c-1.3384-1.3368-2.9016-2.304-4.5656-2.924-4.552-1.6992-9.8728-0.7304-13.532 2.928l-58.715 58.706c-3.6592 3.6592-4.6272 8.9808-2.9288 13.531 0.6208 1.664 1.588 3.2288 2.9248 4.5664 0.0016 0.0008 0.0024 0.002 0.004 0.004l124.26 124.26-124.26 124.26c-0.0008 0.002-0.0024 0.002-0.0032 0.004-1.3368 1.3384-2.304 2.9016-2.9256 4.5656-1.6992 4.5504-0.7304 9.8728 2.9288 13.532l58.699 58.698c3.66 3.6592 8.9808 4.6272 13.532 2.9288 1.664-0.6208 3.228-1.588 4.5664-2.9248 0.0008-0.002 0.002-0.002 0.004-0.004l124.26-124.26 124.26 124.26c0.002 0.0008 0.003 0.002 0.005 0.003 1.3392 1.3376 2.9016 2.3048 4.5656 2.9256 4.5512 1.6984 9.8736 0.7304 13.531-2.9288l58.698-58.699c3.6592-3.6592 4.628-8.9816 2.9296-13.532-0.616-1.664-1.584-3.232-2.92-4.568z"/>
+</svg>
diff --git a/support/messagebox.cpp b/support/messagebox.cpp
index 87d5f58..0b144c4 100644
--- a/support/messagebox.cpp
+++ b/support/messagebox.cpp
@@ -33,6 +33,7 @@
#include <QListWidget>
#ifndef ENABLE_KDE_SUPPORT
#include <QAbstractButton>
+#include <QStyle>
MessageBox::ButtonCode map(QMessageBox::StandardButton c)
{
@@ -44,22 +45,71 @@ MessageBox::ButtonCode map(QMessageBox::StandardButton c)
}
}
+#ifdef Q_OS_MAC
+static void splitMessage(const QString &orig, QString &msg, QString &sub)
+{
+ static QStringList constSeps=QStringList() << QLatin1String("\n\n") << QLatin1String("<br/><br/>");
+ msg=orig;
+
+ foreach (const QString &sep, constSeps) {
+ QStringList parts=orig.split(sep);
+ if (parts.count()>1) {
+ msg=parts.takeAt(0);
+ sub=parts.join(sep);
+ return;
+ }
+ }
+}
+
+void MessageBox::error(QWidget *parent, const QString &message, const QString &title)
+{
+ QString msg;
+ QString sub;
+ splitMessage(message, msg, sub);
+ QMessageBox box(QMessageBox::Warning, title.isEmpty() ? i18n("Error") : title, msg, QMessageBox::Ok, parent, Qt::Sheet);
+ box.setInformativeText(sub);
+ //AcceleratorManager::manage(&box);
+ box.exec();
+}
+
+void MessageBox::information(QWidget *parent, const QString &message, const QString &title)
+{
+ QString msg;
+ QString sub;
+ splitMessage(message, msg, sub);
+ QMessageBox box(QMessageBox::Information, title.isEmpty() ? i18n("Information") : title, msg, QMessageBox::Ok, parent, Qt::Sheet);
+ box.setInformativeText(sub);
+ //AcceleratorManager::manage(&box);
+ box.exec();
+}
+#endif
+
MessageBox::ButtonCode MessageBox::questionYesNoCancel(QWidget *parent, const QString &message, const QString &title,
const GuiItem &yesText, const GuiItem &noText, bool showCancel, bool isWarning)
{
+ #ifdef Q_OS_MAC
+ QString msg;
+ QString sub;
+ splitMessage(message, msg, sub);
+ QMessageBox box(isWarning ? QMessageBox::Warning : QMessageBox::Question, title.isEmpty() ? (isWarning ? i18n("Warning") : i18n("Question")) : title,
+ msg, QMessageBox::Yes|QMessageBox::No|(showCancel ? QMessageBox::Cancel : QMessageBox::NoButton), parent, Qt::Sheet);
+ box.setInformativeText(sub);
+ #else
QMessageBox box(isWarning ? QMessageBox::Warning : QMessageBox::Question, title.isEmpty() ? (isWarning ? i18n("Warning") : i18n("Question")) : title,
message, QMessageBox::Yes|QMessageBox::No|(showCancel ? QMessageBox::Cancel : QMessageBox::NoButton), parent);
+ #endif
+ bool btnIcons=box.style()->styleHint(QStyle::SH_DialogButtonBox_ButtonsHaveIcons);
box.setDefaultButton(isWarning && !showCancel ? QMessageBox::No : QMessageBox::Yes);
if (!yesText.text.isEmpty()) {
QAbstractButton *btn=box.button(QMessageBox::Yes);
btn->setText(yesText.text);
- btn->setIcon(yesText.icon.isEmpty() || GtkStyle::isActive() ? Icon() : Icon(yesText.icon));
+ btn->setIcon(!yesText.icon.isEmpty() && btnIcons ? Icon(yesText.icon) : Icon());
}
if (!noText.text.isEmpty()) {
QAbstractButton *btn=box.button(QMessageBox::No);
btn->setText(noText.text);
- btn->setIcon(noText.icon.isEmpty() || GtkStyle::isActive() ? Icon() : Icon(noText.icon));
+ btn->setIcon(!noText.icon.isEmpty() && btnIcons ? Icon(noText.icon) : Icon());
}
AcceleratorManager::manage(&box);
return -1==box.exec() ? Cancel : map(box.standardButton(box.clickedButton()));
@@ -125,14 +175,26 @@ MessageBox::ButtonCode MessageBox::msgListEx(QWidget *parent, Type type, const Q
dlg->setButtons(Dialog::Yes|Dialog::No);
iconLabel->setPixmap(Icon("dialog-warning").pixmap(iconSize, iconSize));
break;
+ case Information:
+ dlg->setCaption(title.isEmpty() ? i18n("Information") : title);
+ dlg->setButtons(Dialog::Ok);
+ iconLabel->setPixmap(Icon("dialog-information").pixmap(iconSize, iconSize));
+ break;
}
#endif
lay->addWidget(iconLabel, 0, 0, 1, 1);
- lay->addWidget(new QLabel(message, wid), 0, 1, 1, 1);
+ QLabel *msgLabel=new QLabel(message, wid);
+ msgLabel->setWordWrap(true);
+ msgLabel->setTextInteractionFlags(Qt::NoTextInteraction);
+ lay->addWidget(msgLabel, 0, 1, 1, 1);
QListWidget *list=new QListWidget(wid);
lay->addWidget(list, 1, 0, 1, 2);
+ lay->setMargin(0);
list->insertItems(0, strlist);
dlg->setMainWidget(wid);
+ #ifdef Q_OS_MAC
+ dlg->setWindowFlags((dlg->windowFlags()&(~Qt::WindowType_Mask))|Qt::Sheet);
+ #endif
#ifdef ENABLE_KDE_SUPPORT
dlg->exec();
#else
diff --git a/support/messagebox.h b/support/messagebox.h
index 504b3b5..1c38841 100644
--- a/support/messagebox.h
+++ b/support/messagebox.h
@@ -43,7 +43,8 @@ namespace MessageBox {
enum Type {
Error,
Question,
- Warning
+ Warning,
+ Information
};
extern ButtonCode questionYesNoCancel(QWidget *parent, const QString &message, const QString &title=QString(),
@@ -58,12 +59,17 @@ namespace MessageBox {
inline ButtonCode warningYesNo(QWidget *parent, const QString &message, const QString &title=QString(), const GuiItem &yesText=StdGuiItem::yes(), const GuiItem &noText=StdGuiItem::no()) {
return questionYesNoCancel(parent, message, title, yesText, noText, false, true);
}
+ #ifdef Q_OS_MAC
+ extern void error(QWidget *parent, const QString &message, const QString &title=QString());
+ extern void information(QWidget *parent, const QString &message, const QString &title=QString());
+ #else
inline void error(QWidget *parent, const QString &message, const QString &title=QString()) {
QMessageBox::warning(parent, title.isEmpty() ? i18n("Error") : title, message);
}
inline void information(QWidget *parent, const QString &message, const QString &title=QString()) {
QMessageBox::information(parent, title.isEmpty() ? i18n("Information") : title, message);
}
+ #endif
extern ButtonCode msgListEx(QWidget *parent, Type type, const QString &message, const QStringList &strlist, const QString &title=QString());
inline void errorListEx(QWidget *parent, const QString &message, const QStringList &strlist, const QString &title=QString()) {
msgListEx(parent, Error, message, strlist, title);
@@ -77,6 +83,9 @@ namespace MessageBox {
inline ButtonCode warningYesNoList(QWidget *parent, const QString &message, const QStringList &strlist, const QString &title=QString()) {
return msgListEx(parent, Warning, message, strlist, title);
}
+ inline void informationList(QWidget *parent, const QString &message, const QStringList &strlist, const QString &title=QString()) {
+ msgListEx(parent, Information, message, strlist, title);
+ }
}
#endif
diff --git a/support/osxstyle.cpp b/support/osxstyle.cpp
new file mode 100644
index 0000000..b5545c3
--- /dev/null
+++ b/support/osxstyle.cpp
@@ -0,0 +1,219 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "osxstyle.h"
+#include "globalstatic.h"
+#include "localize.h"
+#include "actioncollection.h"
+#include "action.h"
+#include "utils.h"
+#include <QApplication>
+#include <QStyle>
+#include <QTreeWidget>
+#include <QPainter>
+#include <QMenu>
+#include <QMenuBar>
+#include <QWidget>
+#include <QMainWindow>
+#include <qnamespace.h>
+
+GLOBAL_STATIC(OSXStyle, instance)
+
+OSXStyle::OSXStyle()
+ : view(0)
+ , windowMenu(0)
+ , closeAct(0)
+ , minAct(0)
+ , zoomAct(0)
+{
+}
+
+const QPalette & OSXStyle::viewPalette()
+{
+ return viewWidget()->palette();
+}
+
+void OSXStyle::drawSelection(QStyleOptionViewItemV4 opt, QPainter *painter, double opacity)
+{
+ opt.palette=viewPalette();
+ if (opacity<0.999) {
+ QColor col(opt.palette.highlight().color());
+ col.setAlphaF(opacity);
+ opt.palette.setColor(opt.palette.currentColorGroup(), QPalette::Highlight, col);
+ }
+ QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, viewWidget());
+}
+
+QColor OSXStyle::monoIconColor()
+{
+ return QColor(96, 96, 96);
+}
+
+void OSXStyle::initWindowMenu(QMainWindow *mw)
+{
+ if (!windowMenu && mw) {
+ windowMenu=new QMenu(i18n("&Window"), mw);
+ closeAct=ActionCollection::get()->createAction("close-window", i18n("Close"));
+ minAct=ActionCollection::get()->createAction("minimize-window", i18n("Minimize"));
+ zoomAct=ActionCollection::get()->createAction("zoom-window", i18n("Zoom"));
+ windowMenu->addAction(closeAct);
+ windowMenu->addAction(minAct);
+ windowMenu->addAction(zoomAct);
+ windowMenu->addSeparator();
+ addWindow(mw);
+ mw->menuBar()->addMenu(windowMenu);
+ actions[mw]->setChecked(true);
+ connect(qApp, SIGNAL(focusWindowChanged(QWindow *)), SLOT(focusWindowChanged(QWindow *)));
+ closeAct->setShortcut(Qt::ControlModifier+Qt::Key_W);
+ minAct->setShortcut(Qt::ControlModifier+Qt::Key_M);
+ connect(closeAct, SIGNAL(triggered()), SLOT(closeWindow()));
+ connect(minAct, SIGNAL(triggered()), SLOT(minimizeWindow()));
+ connect(zoomAct, SIGNAL(triggered()), SLOT(zoomWindow()));
+ controlActions(mw);
+ }
+}
+
+void OSXStyle::addWindow(QWidget *w)
+{
+ if (w && windowMenu && !actions.contains(w)) {
+ QAction *action=windowMenu->addAction(w->windowTitle());
+ action->setCheckable(true);
+ connect(action, SIGNAL(triggered()), this, SLOT(showWindow()));
+ connect(w, SIGNAL(windowTitleChanged(QString)), this, SLOT(windowTitleChanged()));
+ actions.insert(w, action);
+ }
+}
+
+void OSXStyle::removeWindow(QWidget *w)
+{
+ if (w && windowMenu && actions.contains(w)) {
+ QAction *act=actions.take(w);
+ windowMenu->removeAction(act);
+ disconnect(act, SIGNAL(triggered()), this, SLOT(showWindow()));
+ disconnect(w, SIGNAL(windowTitleChanged(QString)), this, SLOT(windowTitleChanged()));
+ act->deleteLater();
+ }
+}
+
+void OSXStyle::showWindow()
+{
+ QAction *act=qobject_cast<QAction *>(sender());
+
+ if (!act) {
+ return;
+ }
+
+ QMap<QWidget *, QAction *>::Iterator it=actions.begin();
+ QMap<QWidget *, QAction *>::Iterator end=actions.end();
+
+ for (; it!=end; ++it) {
+ if (it.value()==act) {
+ Utils::raiseWindow(it.key());
+ }
+ act->setChecked(it.value()==act);
+ }
+}
+
+void OSXStyle::windowTitleChanged()
+{
+ QWidget *w=qobject_cast<QWidget *>(sender());
+
+ if (!w) {
+ return;
+ }
+ if (actions.contains(w)) {
+ actions[w]->setText(w->windowTitle());
+ }
+}
+
+void OSXStyle::focusWindowChanged(QWindow *win)
+{
+ QMap<QWidget *, QAction *>::Iterator it=actions.begin();
+ QMap<QWidget *, QAction *>::Iterator end=actions.end();
+
+ for (; it!=end; ++it) {
+ if (it.key()->windowHandle()==win) {
+ it.value()->setChecked(true);
+ controlActions(it.key());
+ } else {
+ it.value()->setChecked(false);
+ }
+ }
+}
+
+void OSXStyle::closeWindow()
+{
+ QWidget *w=currentWindow();
+ if (w) {
+ w->close();
+ }
+}
+
+void OSXStyle::minimizeWindow()
+{
+ QWidget *w=currentWindow();
+ if (w) {
+ w->showMinimized();
+ }
+}
+
+void OSXStyle::zoomWindow()
+{
+ QWidget *w=currentWindow();
+ if (w) {
+ if (w->isMaximized()) {
+ w->showNormal();
+ } else {
+ w->showMaximized();
+ }
+ }
+}
+
+QWidget * OSXStyle::currentWindow()
+{
+ QMap<QWidget *, QAction *>::Iterator it=actions.begin();
+ QMap<QWidget *, QAction *>::Iterator end=actions.end();
+
+ for (; it!=end; ++it) {
+ if (it.value()->isChecked()) {
+ return it.key();
+ }
+ }
+ return 0;
+}
+
+void OSXStyle::controlActions(QWidget *w)
+{
+ closeAct->setEnabled(w && w->windowFlags()&Qt::WindowCloseButtonHint);
+ minAct->setEnabled(w && w->windowFlags()&Qt::WindowMinimizeButtonHint);
+ zoomAct->setEnabled(w && w->minimumHeight()!=w->maximumHeight());
+}
+
+QTreeWidget * OSXStyle::viewWidget()
+{
+ if (!view) {
+ view=new QTreeWidget();
+ view->ensurePolished();
+ }
+ return view;
+}
diff --git a/support/osxstyle.h b/support/osxstyle.h
new file mode 100644
index 0000000..abd7b47
--- /dev/null
+++ b/support/osxstyle.h
@@ -0,0 +1,84 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef OSXSTYLE_H
+#define OSXSTYLE_H
+
+#include <QStyleOptionViewItemV4>
+#include <QMap>
+#include <QObject>
+
+class QPalette;
+class QTreeWidget;
+class QPainter;
+class QColor;
+class QWidget;
+class QMenu;
+class QAction;
+class QMainWindow;
+class QWindow;
+class Action;
+
+class OSXStyle : public QObject
+{
+ Q_OBJECT
+
+public:
+ static OSXStyle * self();
+
+ OSXStyle();
+ const QPalette & viewPalette();
+ void drawSelection(QStyleOptionViewItemV4 opt, QPainter *painter, double opacity);
+ QColor monoIconColor();
+
+ void initWindowMenu(QMainWindow *mw);
+
+public:
+ void addWindow(QWidget *w);
+ void removeWindow(QWidget *w);
+
+private Q_SLOTS:
+ void showWindow();
+ void windowTitleChanged();
+ void focusWindowChanged(QWindow *win);
+ void closeWindow();
+ void minimizeWindow();
+ void zoomWindow();
+
+private:
+ QWidget * currentWindow();
+ void controlActions(QWidget *w);
+ QTreeWidget * viewWidget();
+
+private:
+ QTreeWidget *view;
+ QMenu *windowMenu;
+ QMap<QWidget *, QAction *> actions;
+ QAction *closeAct;
+ QAction *minAct;
+ QAction *zoomAct;
+
+ friend class Dialog;
+};
+
+#endif // OSXSTYLE_H
diff --git a/support/pagewidget.cpp b/support/pagewidget.cpp
index 1ad488e..fc9c4b2 100644
--- a/support/pagewidget.cpp
+++ b/support/pagewidget.cpp
@@ -22,8 +22,38 @@
*/
#include "pagewidget.h"
+
+//#ifdef ENABLE_KDE_SUPPORT
+//PageWidget::PageWidget(QWidget *p, bool listView, bool headers)
+// : KPageWidget(p)
+// , showHeaders(headers)
+//{
+// setFaceType(listView ? Tree : List);
+// connect(this, SIGNAL(currentPageChanged(KPageWidgetItem *, KPageWidgetItem *)), this, SIGNAL(currentPageChanged()));
+//}
+
+//PageWidgetItem * PageWidget::addPage(QWidget *widget, const QString &name, const Icon &icon, const QString &header)
+//{
+// widget->adjustSize();
+// PageWidgetItem *item=KPageWidget::addPage(widget, name);
+// item->setIcon(icon);
+// item->setHeader(header);
+// return item;
+//}
+
+//QAbstractItemView * PageWidget::createView()
+//{
+// QAbstractItemView *v=KPageWidget::createView();
+// if (Tree==faceType()) {
+// static_cast<QTreeView *>(v)->setIndentation(0);
+// }
+// return v;
+//}
+//#else
+
#include "icon.h"
#include "gtkstyle.h"
+#include "dialog.h"
#include <QListWidget>
#include <QStackedWidget>
#include <QBoxLayout>
@@ -33,6 +63,7 @@
#include <QFontMetrics>
#include <QTextLayout>
#include <QPainter>
+#include <QStyledItemDelegate>
static int layoutText(QTextLayout *layout, int maxWidth)
{
@@ -53,15 +84,18 @@ static int layoutText(QTextLayout *layout, int maxWidth)
return textWidth;
}
-class PageWidgetItemDelegate : public QAbstractItemDelegate
+class PageWidgetItemDelegate : public QStyledItemDelegate
{
public:
- PageWidgetItemDelegate(QObject *parent)
- : QAbstractItemDelegate(parent)
+ PageWidgetItemDelegate(QObject *parent, bool std)
+ : QStyledItemDelegate(parent)
+ , standard(std)
, underMouse(false)
{
- int height=QApplication::fontMetrics().height();
- iconSize=height>22 ? Icon::stdSize(height*2.5) : 32;
+ if (!standard) {
+ int height=QApplication::fontMetrics().height();
+ iconSize=height>22 ? Icon::stdSize(height*2.5) : 32;
+ }
}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
@@ -70,8 +104,37 @@ public:
return;
}
bool mouseOver=option.state&QStyle::State_MouseOver;
- bool gtk=mouseOver && GtkStyle::isActive();
bool selected=option.state&QStyle::State_Selected;
+
+ if (standard) {
+ if (GtkStyle::isActive()) {
+ bool mouseOver=option.state&QStyle::State_MouseOver;
+ QStyleOptionViewItemV4 opt = option;
+ initStyleOption(&opt, index);
+
+ if (!underMouse) {
+ mouseOver=false;
+ }
+
+ if (mouseOver) {
+ opt.showDecorationSelected=true;
+
+ GtkStyle::drawSelection(option, painter, selected ? 0.75 : 0.25);
+ opt.showDecorationSelected=false;
+ opt.state&=~(QStyle::State_MouseOver|QStyle::State_Selected);
+ opt.backgroundBrush=QBrush(Qt::transparent);
+ if (selected) {
+ opt.palette.setBrush(QPalette::Text, opt.palette.highlightedText());
+ }
+ }
+ QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
+ } else {
+ QStyledItemDelegate::paint(painter, option, index);
+ }
+ return;
+ }
+
+ bool gtk=mouseOver && GtkStyle::isActive();
bool drawBgnd=true;
if (!underMouse) {
@@ -86,13 +149,16 @@ public:
const QPixmap pixmap = icon.pixmap(iconSize, iconSize);
QFontMetrics fm = painter->fontMetrics();
- int wp = pixmap.width();
- int hp = pixmap.height();
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = pixmap.size() / pixmap.devicePixelRatio();
+ #else
+ QSize layoutSize = pixmap.size();
+ #endif
QTextLayout iconTextLayout(text, option.font);
QTextOption textOption(Qt::AlignHCenter);
iconTextLayout.setTextOption(textOption);
- int maxWidth = qMax(3 * wp, 8 * fm.height());
+ int maxWidth = qMax(3 * layoutSize.width(), 8 * fm.height());
layoutText(&iconTextLayout, maxWidth);
QPen pen = painter->pen();
@@ -114,15 +180,18 @@ public:
}
}
+ #ifndef Q_OS_WIN
if (selected) {
painter->setPen(option.palette.color(cg, QPalette::HighlightedText));
- } else {
+ } else
+ #endif
+ {
painter->setPen(option.palette.color(cg, QPalette::Text));
}
- painter->drawPixmap(option.rect.x() + (option.rect.width()/2)-(wp/2), option.rect.y() + 5, pixmap);
+ painter->drawPixmap(option.rect.x() + (option.rect.width()/2)-(layoutSize.width()/2), option.rect.y() + 5, pixmap);
if (!text.isEmpty()) {
- iconTextLayout.draw(painter, QPoint(option.rect.x() + (option.rect.width()/2)-(maxWidth/2), option.rect.y() + hp+7));
+ iconTextLayout.draw(painter, QPoint(option.rect.x() + (option.rect.width()/2)-(maxWidth/2), option.rect.y() + layoutSize.height()+7));
}
painter->setPen(pen);
drawFocus(painter, option, option.rect);
@@ -130,6 +199,9 @@ public:
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
+ if (standard) {
+ return QStyledItemDelegate::sizeHint(option, index);
+ }
if (!index.isValid()) {
return QSize(0, 0);
}
@@ -140,30 +212,32 @@ public:
QFontMetrics fm = option.fontMetrics;
int gap = fm.height();
- int wp = pixmap.width();
- int hp = pixmap.height();
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = pixmap.size() / pixmap.devicePixelRatio();
+ #else
+ QSize layoutSize = pixmap.size();
+ #endif
- if (hp == 0) {
+ if (layoutSize.height() == 0) {
/**
* No pixmap loaded yet, we'll use the default icon size in this case.
*/
- hp = iconSize;
- wp = iconSize;
+ layoutSize=QSize(iconSize, iconSize);
}
QTextLayout iconTextLayout(text, option.font);
- int wt = layoutText(&iconTextLayout, qMax(3 * wp, 8 * fm.height()));
+ int wt = layoutText(&iconTextLayout, qMax(3 * layoutSize.width(), 8 * fm.height()));
int ht = iconTextLayout.boundingRect().height();
int width, height;
if (text.isEmpty()) {
- height = hp;
+ height = layoutSize.height();
} else {
- height = hp + ht + 10;
+ height = layoutSize.height() + ht + 10;
}
- width = qMax(wt, wp) + gap;
+ width = qMax(wt, layoutSize.width()) + gap;
return QSize(width, height);
}
@@ -183,8 +257,10 @@ public:
}
void setUnderMouse(bool u) { underMouse=u; }
+ bool standardList() const { return standard; }
private:
+ bool standard;
int iconSize;
bool underMouse;
};
@@ -219,40 +295,42 @@ protected:
QListWidget *view;
};
-PageWidgetItem::PageWidgetItem(QWidget *p, const QString &header, const Icon &icon, QWidget *cfg)
+PageWidgetItem::PageWidgetItem(QWidget *p, const QString &header, const Icon &icon, QWidget *cfg, bool showHeader)
: QWidget(p)
, wid(cfg)
{
- static int size=-1;
+ QBoxLayout *layout=new QBoxLayout(QBoxLayout::TopToBottom, this);
+ if (showHeader) {
+ QBoxLayout *titleLayout=new QBoxLayout(QBoxLayout::LeftToRight, 0);
+ titleLayout->addWidget(new QLabel("<b>"+header+"</b>", this));
+ titleLayout->addItem(new QSpacerItem(16, 16, QSizePolicy::Expanding, QSizePolicy::Minimum));
- if (-1==size) {
- size=QApplication::fontMetrics().height();
- if (size>20) {
- size=Icon::stdSize(size*1.25);
- } else {
- size=22;
+ static int iconSize=-1;
+
+ if (-1==iconSize) {
+ iconSize=QApplication::fontMetrics().height();
+ if (iconSize>20) {
+ iconSize=Icon::stdSize(iconSize*1.25);
+ } else {
+ iconSize=22;
+ }
}
- }
- QBoxLayout *layout=new QBoxLayout(QBoxLayout::TopToBottom, this);
- QBoxLayout *titleLayout=new QBoxLayout(QBoxLayout::LeftToRight, 0);
- titleLayout->addWidget(new QLabel("<b>"+header+"</b>", this));
- titleLayout->addItem(new QSpacerItem(16, 16, QSizePolicy::Expanding, QSizePolicy::Minimum));
-
- QLabel *icn=new QLabel(this);
- icn->setPixmap(icon.pixmap(size, size));
- titleLayout->addWidget(icn);
- layout->addLayout(titleLayout);
- layout->addItem(new QSpacerItem(8, 8, QSizePolicy::Fixed, QSizePolicy::Fixed));
+ QLabel *icn=new QLabel(this);
+ icn->setPixmap(icon.pixmap(iconSize, iconSize));
+ titleLayout->addWidget(icn);
+ layout->addLayout(titleLayout);
+ layout->addItem(new QSpacerItem(8, 8, QSizePolicy::Fixed, QSizePolicy::Fixed));
+ }
layout->addWidget(cfg);
layout->setMargin(0);
cfg->setParent(this);
- cfg->adjustSize();
adjustSize();
}
-PageWidget::PageWidget(QWidget *p)
+PageWidget::PageWidget(QWidget *p, bool listView, bool headers)
: QWidget(p)
+ , showHeaders(headers)
{
QBoxLayout *layout=new QBoxLayout(QBoxLayout::LeftToRight, this);
list = new QListWidget(p);
@@ -262,10 +340,15 @@ PageWidget::PageWidget(QWidget *p)
layout->addWidget(list);
layout->addWidget(stack);
layout->setMargin(0);
+ #ifdef ENABLE_KDE_SUPPORT
+ QFont f=list->font();
+ f.setBold(true);
+ list->setFont(f);
+ #endif
list->setViewMode(QListView::ListMode);
list->setVerticalScrollMode(QListView::ScrollPerPixel);
list->setMovement(QListView::Static);
- PageWidgetItemDelegate *delegate=new PageWidgetItemDelegate(list);
+ PageWidgetItemDelegate *delegate=new PageWidgetItemDelegate(list, listView);
list->setItemDelegate(delegate);
list->setSelectionBehavior(QAbstractItemView::SelectItems);
list->setSelectionMode(QAbstractItemView::SingleSelection);
@@ -275,7 +358,7 @@ PageWidget::PageWidget(QWidget *p)
PageWidgetItem * PageWidget::addPage(QWidget *widget, const QString &name, const Icon &icon, const QString &header)
{
- PageWidgetItem *page=new PageWidgetItem(stack, header, icon, widget);
+ PageWidgetItem *page=new PageWidgetItem(stack, header, icon, widget, showHeaders);
QListWidgetItem *listItem=new QListWidgetItem(name, list);
listItem->setIcon(icon);
stack->addWidget(page);
@@ -283,15 +366,13 @@ PageWidgetItem * PageWidget::addPage(QWidget *widget, const QString &name, const
int rows = list->model()->rowCount();
int width = 0;
- int height = 0;
for (int i = 0; i < rows; ++i) {
QSize rowSize=list->sizeHintForIndex(list->model()->index(i, 0));
width = qMax(width, rowSize.width());
- height += rowSize.height();
}
- width+=25;
+
+ width+=static_cast<PageWidgetItemDelegate *>(list->itemDelegate())->standardList() ? 8 : 25;
list->setFixedWidth(width);
- list->setMinimumHeight(height);
QSize stackSize = stack->size();
for (int i = 0; i < stack->count(); ++i) {
@@ -300,15 +381,13 @@ PageWidgetItem * PageWidget::addPage(QWidget *widget, const QString &name, const
stackSize = stackSize.expandedTo(widget->minimumSizeHint());
}
}
- stack->setMinimumSize(stackSize);
+ setMinimumHeight(qMax(minimumHeight(), stackSize.height()));
+ setMinimumWidth(qMax(minimumWidth(), stackSize.width()+width+layout()->spacing()));
- QSize sz=size();
- sz=sz.expandedTo(stackSize);
- sz=sz.expandedTo(QSize(width, height));
- setMinimumSize(sz);
list->setCurrentRow(0);
stack->setCurrentIndex(0);
pages.insert(listItem, page);
+
return page;
}
@@ -337,3 +416,10 @@ void PageWidget::setCurrentPage(PageWidgetItem *item)
}
}
}
+
+void PageWidget::setFocus()
+{
+ list->setFocus();
+}
+
+//#endif // ENABLE_KDE_SUPPORT
diff --git a/support/pagewidget.h b/support/pagewidget.h
index 44fecaa..b42993a 100644
--- a/support/pagewidget.h
+++ b/support/pagewidget.h
@@ -26,31 +26,30 @@
#include "icon.h"
-#ifdef ENABLE_KDE_SUPPORT
-#include <KDE/KPageWidget>
-typedef KPageWidgetItem PageWidgetItem;
+//#ifdef ENABLE_KDE_SUPPORT
+//#include <KDE/KPageWidget>
+//#include <QTreeView>
+//typedef KPageWidgetItem PageWidgetItem;
-class PageWidget : public KPageWidget
-{
- Q_OBJECT
-public:
- PageWidget(QWidget *p) : KPageWidget(p) {
- connect(this, SIGNAL(currentPageChanged(KPageWidgetItem *, KPageWidgetItem *)), this, SIGNAL(currentPageChanged()));
- }
- virtual ~PageWidget() { }
- PageWidgetItem * addPage(QWidget *widget, const QString &name, const Icon &icon, const QString &header) {
- PageWidgetItem *item=KPageWidget::addPage(widget, name);
- item->setIcon(icon);
- item->setHeader(header);
- adjustSize();
- return item;
- }
+//class PageWidget : public KPageWidget
+//{
+// Q_OBJECT
+//public:
+// PageWidget(QWidget *p, bool listView=false, bool headers=true);
+// virtual ~PageWidget() { }
-Q_SIGNALS:
- void currentPageChanged();
-};
+// PageWidgetItem * addPage(QWidget *widget, const QString &name, const Icon &icon, const QString &header);
+// QAbstractItemView * createView();
+// bool showPageHeader() const { return showHeaders; }
+
+//Q_SIGNALS:
+// void currentPageChanged();
+
+//private:
+// bool showHeaders;
+//};
-#else
+//#else
#include <QWidget>
#include <QMap>
@@ -61,7 +60,7 @@ class QStackedWidget;
class PageWidgetItem : public QWidget
{
public:
- PageWidgetItem(QWidget *p, const QString &header, const Icon &icon, QWidget *cfg);
+ PageWidgetItem(QWidget *p, const QString &header, const Icon &icon, QWidget *cfg, bool showHeader);
virtual ~PageWidgetItem() { }
QWidget * widget() const { return wid; }
@@ -74,22 +73,26 @@ class PageWidget : public QWidget
Q_OBJECT
public:
- PageWidget(QWidget *p);
+ PageWidget(QWidget *p, bool listView=false, bool headers=true);
virtual ~PageWidget() { }
PageWidgetItem * addPage(QWidget *widget, const QString &name, const Icon &icon, const QString &header);
int count();
PageWidgetItem * currentPage() const;
void setCurrentPage(PageWidgetItem *item);
+public Q_SLOTS:
+ void setFocus();
+
Q_SIGNALS:
void currentPageChanged();
private:
+ bool showHeaders;
QListWidget *list;
QStackedWidget *stack;
QMap<QListWidgetItem *, PageWidgetItem*> pages;
};
-#endif
+//#endif
#endif
diff --git a/support/pathrequester.cpp b/support/pathrequester.cpp
index 36431e8..50b1347 100644
--- a/support/pathrequester.cpp
+++ b/support/pathrequester.cpp
@@ -35,7 +35,7 @@ PathRequester::PathRequester(QWidget *parent)
QHBoxLayout *layout=new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
edit=new LineEdit(this);
- btn=new QToolButton(this);
+ btn=new FlatToolButton(this);
layout->addWidget(edit);
layout->addWidget(btn);
btn->setAutoRaise(true);
@@ -47,10 +47,10 @@ PathRequester::PathRequester(QWidget *parent)
void PathRequester::choose()
{
QString item=dirMode
- ? QFileDialog::getExistingDirectory(this, i18n("Select Folder"), edit->text())
- : QFileDialog::getOpenFileName(this, i18n("Select File"), Utils::getDir(edit->text()), filter);
+ ? QFileDialog::getExistingDirectory(this, i18n("Select Folder"), text())
+ : QFileDialog::getOpenFileName(this, i18n("Select File"), Utils::getDir(text()), filter);
if (!item.isEmpty()) {
- edit->setText(item);
+ setText(item);
}
}
diff --git a/support/pathrequester.h b/support/pathrequester.h
index 2550b8e..2aa84fb 100644
--- a/support/pathrequester.h
+++ b/support/pathrequester.h
@@ -42,7 +42,9 @@ public:
#else
#include "lineedit.h"
-#include <QToolButton>
+#include "flattoolbutton.h"
+#include <QDir>
+
class PathRequester : public QWidget
{
Q_OBJECT
@@ -50,8 +52,8 @@ public:
PathRequester(QWidget *parent);
virtual ~PathRequester() { }
- QString text() const { return edit->text(); }
- void setText(const QString &t) { edit->setText(t); }
+ QString text() const { return QDir::fromNativeSeparators(edit->text()); }
+ void setText(const QString &t) { edit->setText(QDir::toNativeSeparators(t)); }
void setButtonVisible(bool v) { btn->setVisible(v); }
void setFocus() { edit->setFocus(); }
void setDirMode(bool m) { dirMode=m; }
@@ -70,7 +72,7 @@ private Q_SLOTS:
private:
LineEdit *edit;
- QToolButton *btn;
+ FlatToolButton *btn;
bool dirMode;
QString filter;
};
diff --git a/support/proxystyle.cpp b/support/proxystyle.cpp
index 747bf4a..0b03b4f 100644
--- a/support/proxystyle.cpp
+++ b/support/proxystyle.cpp
@@ -23,15 +23,52 @@
#include "proxystyle.h"
#include "acceleratormanager.h"
+#include "gtkstyle.h"
+#include "utils.h"
#include <QMenu>
+#include <QPainter>
+#include <QStyleOption>
+#include <QApplication>
+#if !defined Q_OS_MAC && !defined ENABLE_KDE_SUPPORT
static const char * constAccelProp="managed-accel";
+#endif
+const char * ProxyStyle::constModifyFrameProp="mod-frame";
void ProxyStyle::polish(QWidget *widget)
{
+ #if !defined Q_OS_MAC && !defined ENABLE_KDE_SUPPORT
if (widget && qobject_cast<QMenu *>(widget) && !widget->property(constAccelProp).isValid()) {
AcceleratorManager::manage(widget);
widget->setProperty(constAccelProp, true);
}
+ #endif
baseStyle()->polish(widget);
}
+
+void ProxyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
+{
+ baseStyle()->drawPrimitive(element, option, painter, widget);
+ if (modViewFrame && PE_Frame==element && widget) {
+ QVariant v=widget->property(constModifyFrameProp);
+ if (v.isValid()) {
+ int mod=v.toInt();
+ const QRect &r=option->rect;
+ if (option->palette.base().color()==Qt::transparent) {
+ painter->setPen(QPen(QApplication::palette().color(QPalette::Base), 1));
+ } else {
+ painter->setPen(QPen(option->palette.base(), 1));
+ }
+ if (mod&VF_Side && modViewFrame&VF_Side) {
+ if (Qt::LeftToRight==option->direction) {
+ painter->drawLine(r.topRight()+QPoint(0, 1), r.bottomRight()+QPoint(0, -1));
+ } else {
+ painter->drawLine(r.topLeft()+QPoint(0, 1), r.bottomLeft()+QPoint(0, -1));
+ }
+ }
+ if (mod&VF_Top && modViewFrame&VF_Top) {
+ painter->drawLine(r.topLeft()+QPoint(1, 0), r.topRight());
+ }
+ }
+ }
+}
diff --git a/support/proxystyle.h b/support/proxystyle.h
index 0ae668b..8c6826b 100644
--- a/support/proxystyle.h
+++ b/support/proxystyle.h
@@ -29,15 +29,24 @@
class ProxyStyle : public QProxyStyle
{
public:
- ProxyStyle() { }
+ static const char * constModifyFrameProp;
+ enum FrameMod {
+ VF_None = 0x00,
+ VF_Side = 0x01,
+ VF_Top = 0x02
+ };
+
+ ProxyStyle(int modView=VF_None) : modViewFrame(modView) { }
+
+ void setModViewFrame(int modView) { modViewFrame=modView; }
void polish(QPalette &pal) { QProxyStyle::polish(pal); }
void polish(QApplication *app) { QProxyStyle::polish(app); }
- #ifdef ENABLE_KDE_SUPPORT
- void polish(QWidget *widget) { QProxyStyle::polish(widget); }
- #else
void polish(QWidget *widget);
- #endif
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const;
+
+private:
+ int modViewFrame;
};
#endif
diff --git a/support/support_mac_icons.qrc b/support/support_mac_icons.qrc
new file mode 100644
index 0000000..33da324
--- /dev/null
+++ b/support/support_mac_icons.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+<file alias="support-mac-close">mac-close.svg</file>
+<file alias="support-mac-clear">mac-clear.svg</file>
+</qresource>
+</RCC>
diff --git a/support/themes/ambiance-dt.css b/support/themes/ambiance-dt.css
index cfc5dff..c0cb1b0 100644
--- a/support/themes/ambiance-dt.css
+++ b/support/themes/ambiance-dt.css
@@ -1,4 +1,4 @@
-/* drag:toolbar scrollbar:overlay symbolic-icons:#dfdbd2 spinbox:touch modview:true*/
+/* drag:toolbar scrollbar:overlay symbolic-icons:#dfdbd2 spinbox:touch modview:ts*/
QToolBar#MainToolBar { background-color: #3c3b37; border: 0px;} QToolBar#MainToolBar:active { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #3c3b37, stop: 1 #575651); border: 0px;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel { color: #bfbbb2;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel:active { color: #dfdbd2;} QToolBar#MainToolBar QToolButton:disabled,QToolBar#MainToolBar QLabel:disabled { color: #9f9b92;} QToolBar#MainToolBar QToolButton { background: transparent; border: 1px outset transparent;} QToolBar#MainToolBar QToolButton:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #464640, stop: 1 #303025); border-radius: 5px; border: 1px outset #3c3b37;} QToolBar#MainToolBar QToolButton:pressed,QToolBar#MainToolBar QToolButton:checked { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #383730, stop: 1 #2b2c27); border-radius: 5px; border: 1px inset #292825;} QToolBar#MainToolBar:separator { width: 1px; background: #3f3b32; margin-top: 4px; margin-bottom: 4px; margin-left: 7px; margin-right: 7px;}
diff --git a/support/themes/ambiance.css b/support/themes/ambiance.css
index cfc5dff..c0cb1b0 100644
--- a/support/themes/ambiance.css
+++ b/support/themes/ambiance.css
@@ -1,4 +1,4 @@
-/* drag:toolbar scrollbar:overlay symbolic-icons:#dfdbd2 spinbox:touch modview:true*/
+/* drag:toolbar scrollbar:overlay symbolic-icons:#dfdbd2 spinbox:touch modview:ts*/
QToolBar#MainToolBar { background-color: #3c3b37; border: 0px;} QToolBar#MainToolBar:active { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #3c3b37, stop: 1 #575651); border: 0px;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel { color: #bfbbb2;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel:active { color: #dfdbd2;} QToolBar#MainToolBar QToolButton:disabled,QToolBar#MainToolBar QLabel:disabled { color: #9f9b92;} QToolBar#MainToolBar QToolButton { background: transparent; border: 1px outset transparent;} QToolBar#MainToolBar QToolButton:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #464640, stop: 1 #303025); border-radius: 5px; border: 1px outset #3c3b37;} QToolBar#MainToolBar QToolButton:pressed,QToolBar#MainToolBar QToolButton:checked { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #383730, stop: 1 #2b2c27); border-radius: 5px; border: 1px inset #292825;} QToolBar#MainToolBar:separator { width: 1px; background: #3f3b32; margin-top: 4px; margin-bottom: 4px; margin-left: 7px; margin-right: 7px;}
diff --git a/support/themes/radiance-dt.css b/support/themes/radiance-dt.css
index 70e1d53..61bffae 100644
--- a/support/themes/radiance-dt.css
+++ b/support/themes/radiance-dt.css
@@ -1,3 +1,3 @@
-/* drag:toolbar scrollbar:overlay symbolic-icons:#3c3c3c spinbox:touch modview:true*/
+/* drag:toolbar scrollbar:overlay symbolic-icons:#3c3c3c spinbox:touch modview:ts*/
QToolBar#MainToolBar { background-color: #dfd7d0; border: 0px;} QToolBar#MainToolBar:active { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d5cdc6, stop: 1 #efe7e0); border: 0px;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel { color: #6c6c6c;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel:active { color: #3c3c3c;} QToolBar#MainToolBar QToolButton { background: transparent; border: 1px outset transparent;} QToolBar#MainToolBar QToolButton:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #efe7e0, stop: 1 #cfc7c0); border-radius: 5px; border: 1px solid #afa7a0;} QToolBar#MainToolBar QToolButton:pressed,QToolBar#MainToolBar QToolButton:checked { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #cfc7c0, stop: 1 #dfd7d0); border-radius: 5px; border: 1px solid #afa7a0;}
diff --git a/support/themes/radiance.css b/support/themes/radiance.css
index 70e1d53..61bffae 100644
--- a/support/themes/radiance.css
+++ b/support/themes/radiance.css
@@ -1,3 +1,3 @@
-/* drag:toolbar scrollbar:overlay symbolic-icons:#3c3c3c spinbox:touch modview:true*/
+/* drag:toolbar scrollbar:overlay symbolic-icons:#3c3c3c spinbox:touch modview:ts*/
QToolBar#MainToolBar { background-color: #dfd7d0; border: 0px;} QToolBar#MainToolBar:active { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d5cdc6, stop: 1 #efe7e0); border: 0px;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel { color: #6c6c6c;} QToolBar#MainToolBar QToolButton,QToolBar#MainToolBar QLabel:active { color: #3c3c3c;} QToolBar#MainToolBar QToolButton { background: transparent; border: 1px outset transparent;} QToolBar#MainToolBar QToolButton:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #efe7e0, stop: 1 #cfc7c0); border-radius: 5px; border: 1px solid #afa7a0;} QToolBar#MainToolBar QToolButton:pressed,QToolBar#MainToolBar QToolButton:checked { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #cfc7c0, stop: 1 #dfd7d0); border-radius: 5px; border: 1px solid #afa7a0;}
diff --git a/support/thread.h b/support/thread.h
index b40ba40..5ead63c 100644
--- a/support/thread.h
+++ b/support/thread.h
@@ -60,10 +60,12 @@ public:
Thread(const QString &name, QObject *p=0);
virtual ~Thread();
+ // Make QThread::msleep accessible!
+ using QThread::msleep;
+
virtual void run();
public Q_SLOTS:
void stop() { quit(); }
};
#endif
-
diff --git a/support/touchproxystyle.cpp b/support/touchproxystyle.cpp
index b0c8f4d..49ab48f 100644
--- a/support/touchproxystyle.cpp
+++ b/support/touchproxystyle.cpp
@@ -25,6 +25,9 @@
#include "utils.h"
#include "gtkstyle.h"
#include "flickcharm.h"
+#ifdef Q_OS_MAC
+#include "osxstyle.h"
+#endif
#include <QSpinBox>
#include <QComboBox>
#include <QScrollBar>
@@ -156,21 +159,21 @@ public:
QComboBox *combo;
};
-TouchProxyStyle::TouchProxyStyle(bool touchSpin, bool gtkOverlayStyleScrollbar)
- : ProxyStyle()
- , touchStyleSpin(touchSpin)
+TouchProxyStyle::TouchProxyStyle(int modView, bool touchSpin, bool gtkOverlayStyleScrollbar)
+ : touchStyleSpin(touchSpin)
, sbarPlainViewWidth(-1)
{
spinButtonRatio=touchSpin && Utils::touchFriendly() ? 1.5 : 1.25;
if (Utils::touchFriendly()) {
sbarType=SB_Thin;
- sbarPlainViewWidth=Utils::isHighDpi() ? 4 : 2;
- } else if(gtkOverlayStyleScrollbar) {
+ sbarPlainViewWidth=Utils::scaleForDpi(2);
+ } else if (gtkOverlayStyleScrollbar) {
sbarType=SB_Gtk;
sbarPlainViewWidth=QApplication::fontMetrics().height()/1.75;
} else {
sbarType=SB_Standard;
}
+ setModViewFrame(modView && (SB_Gtk==sbarType || !qApp->style()->styleHint(SH_ScrollView_FrameOnlyAroundContents, 0, 0, 0)) ? modView : 0);
}
TouchProxyStyle::~TouchProxyStyle()
@@ -370,7 +373,11 @@ void TouchProxyStyle::drawComplexControl(ComplexControl control, const QStyleOpt
if (slider.isValid()) {
bool inactive=!(sb->activeSubControls&SC_ScrollBarSlider && (option->state&State_MouseOver || option->state&State_Sunken));
+ #ifdef Q_OS_MAC
+ QColor col(OSXStyle::self()->viewPalette().highlight().color());
+ #else
QColor col(option->palette.highlight().color());
+ #endif
if (!(option->state&State_Active)) {
col=col.darker(115);
}
@@ -458,7 +465,7 @@ void TouchProxyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption
if (PE_PanelScrollAreaCorner==element && option && SB_Standard!=sbarType) {
painter->fillRect(option->rect, option->palette.brush(QPalette::Base));
} else {
- baseStyle()->drawPrimitive(element, option, painter, widget);
+ ProxyStyle::drawPrimitive(element, option, painter, widget);
}
}
diff --git a/support/touchproxystyle.h b/support/touchproxystyle.h
index 7049d10..0228a9f 100644
--- a/support/touchproxystyle.h
+++ b/support/touchproxystyle.h
@@ -36,7 +36,7 @@ public:
SB_Gtk
};
- TouchProxyStyle(bool touchSpin=true, bool gtkOverlayStyleScrollbar=false);
+ TouchProxyStyle(int modView=0, bool touchSpin=true, bool gtkOverlayStyleScrollbar=false);
~TouchProxyStyle();
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const;
int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const;
@@ -48,7 +48,7 @@ public:
void polish(QPalette &pal) { ProxyStyle::polish(pal); }
void polish(QApplication *app) { ProxyStyle::polish(app); }
-private:
+protected:
bool touchStyleSpin;
double spinButtonRatio;
SbType sbarType;
diff --git a/support/utils.cpp b/support/utils.cpp
index 5e3c19e..8a26494 100644
--- a/support/utils.cpp
+++ b/support/utils.cpp
@@ -24,6 +24,7 @@
#include "utils.h"
#include "config.h"
#include "localize.h"
+#include "thread.h"
#include <QFile>
#include <QFileInfo>
#include <QDir>
@@ -35,6 +36,8 @@
#include <QTime>
#include <QWidget>
#include <QStyle>
+#include <QDesktopWidget>
+#include <QEventLoop>
#if QT_VERSION >= 0x050000
#include <QStandardPaths>
#else
@@ -95,7 +98,7 @@ QString Utils::stripAcceleratorMarkers(QString label)
return label;
}
-QString Utils::fixPath(const QString &dir)
+QString Utils::fixPath(const QString &dir, bool ensureEndsInSlash)
{
QString d(dir);
@@ -113,36 +116,65 @@ QString Utils::fixPath(const QString &dir)
#endif
}
d.replace(QLatin1String("/./"), constDirSepStr);
- if (!d.isEmpty() && !d.endsWith(constDirSep)) {
+ if (ensureEndsInSlash && !d.isEmpty() && !d.endsWith(constDirSep)) {
d+=constDirSep;
}
return d;
}
-QString Utils::convertDirForDisplay(const QString &dir)
+#ifndef Q_OS_WIN
+static const QLatin1String constTilda("~");
+QString Utils::homeToTilda(const QString &s)
{
- if (dir.isEmpty() || dir.startsWith(constHttp)) {
- return dir;
+ QString hp=QDir::homePath();
+ if (s==hp) {
+ return constTilda;
+ }
+ if (s.startsWith(hp+constDirSepStr)) {
+ return constTilda+fixPath(s.mid(hp.length()), false);
}
+ return s;
+}
- QString d(dir);
- if (d.endsWith(constDirSep)) {
- d=d.left(d.length()-1);
+QString Utils::tildaToHome(const QString &s)
+{
+ if (s==constTilda) {
+ return fixPath(QDir::homePath());
+ }
+ if (s.startsWith(constTilda+constDirSep)) {
+ return fixPath(QDir::homePath()+constDirSepStr+s.mid(1), false);
}
- return QDir::toNativeSeparators(d);
+ return s;
}
+#endif
-QString Utils::convertDirFromDisplay(const QString &dir)
+QString Utils::convertPathForDisplay(const QString &path, bool isFolder)
{
- QString d=dir.trimmed();
- if (d.isEmpty()) {
- return d;
+ if (path.isEmpty() || path.startsWith(constHttp)) {
+ return path;
+ }
+
+ QString p(path);
+ if (p.endsWith(constDirSep)) {
+ p=p.left(p.length()-1);
+ }
+ /* TODO: Display ~/Music or /home/user/Music / /Users/user/Music ???
+ p=homeToTilda(QDir::toNativeSeparators(p));
+ */
+ return QDir::toNativeSeparators(isFolder && p.endsWith(constDirSep) ? p.left(p.length()-1) : p);
+}
+
+QString Utils::convertPathFromDisplay(const QString &path, bool isFolder)
+{
+ QString p=path.trimmed();
+ if (p.isEmpty()) {
+ return p;
}
- if (d.startsWith(constHttp)) {
- return fixPath(d);
+ if (p.startsWith(constHttp)) {
+ return fixPath(p);
}
- return fixPath(QDir::fromNativeSeparators(d));
+ return tildaToHome(fixPath(QDir::fromNativeSeparators(p), isFolder));
}
QString Utils::getDir(const QString &file)
@@ -246,7 +278,7 @@ void Utils::setFilePerms(const QString &file, const char *groupName)
::chmod(fn.constData(), 0==gid ? 0644 : 0664);
if (0!=gid) {
int rv=::chown(fn.constData(), geteuid(), gid);
- Q_UNUSED(rv);
+ Q_UNUSED(rv)
}
// Reset umask
::umask(oldMask);
@@ -254,8 +286,8 @@ void Utils::setFilePerms(const QString &file, const char *groupName)
#else
void Utils::setFilePerms(const QString &file, const char *groupName)
{
- Q_UNUSED(file);
- Q_UNUSED(groupName);
+ Q_UNUSED(file)
+ Q_UNUSED(groupName)
}
#endif
@@ -266,8 +298,8 @@ void Utils::setFilePerms(const QString &file, const char *groupName)
bool Utils::createWorldReadableDir(const QString &dir, const QString &base, const char *groupName)
{
#ifdef Q_OS_WIN
- Q_UNUSED(base);
- Q_UNUSED(groupName);
+ Q_UNUSED(base)
+ Q_UNUSED(groupName)
return makeDir(dir, 0775);
#else
//
@@ -283,7 +315,7 @@ bool Utils::createWorldReadableDir(const QString &dir, const QString &base, cons
foreach (const QString &p, parts) {
d+=constDirSep+p;
int rv=::chown(QFile::encodeName(d).constData(), geteuid(), gid);
- Q_UNUSED(rv);
+ Q_UNUSED(rv)
}
}
// Reset umask
@@ -292,11 +324,6 @@ bool Utils::createWorldReadableDir(const QString &dir, const QString &base, cons
#endif
}
-struct Thread : public QThread
-{
- using QThread::msleep;
-};
-
void Utils::msleep(int msecs)
{
Thread::msleep(msecs);
@@ -668,12 +695,16 @@ QString Utils::dataDir(const QString &sub, bool create)
if (location.isEmpty()) {
#if QT_VERSION >= 0x050000
location=QStandardPaths::writableLocation(QStandardPaths::DataLocation);
- location=location.replace(QCoreApplication::applicationName()+Utils::constDirSep+QCoreApplication::applicationName(),
- QCoreApplication::applicationName());
+ if (QCoreApplication::organizationName()==QCoreApplication::applicationName()) {
+ location=location.replace(QCoreApplication::organizationName()+Utils::constDirSep+QCoreApplication::applicationName(),
+ QCoreApplication::applicationName());
+ }
#else
location=QDesktopServices::storageLocation(QDesktopServices::DataLocation);
- location=location.replace(QLatin1String("data")+Utils::constDirSep+QCoreApplication::applicationName()+Utils::constDirSep+QCoreApplication::applicationName(),
- QCoreApplication::applicationName());
+ if (QCoreApplication::organizationName()==QCoreApplication::applicationName()) {
+ location=location.replace(QLatin1String("data")+Utils::constDirSep+QCoreApplication::applicationName()+Utils::constDirSep+QCoreApplication::applicationName(),
+ QCoreApplication::applicationName());
+ }
#endif
}
return userDir(location+constDirSep, sub, create);
@@ -700,8 +731,10 @@ QString Utils::cacheDir(const QString &sub, bool create)
#else
location=QDesktopServices::storageLocation(QDesktopServices::CacheLocation);
#endif
- location=location.replace(QCoreApplication::applicationName()+Utils::constDirSep+QCoreApplication::applicationName(),
- QCoreApplication::applicationName());
+ if (QCoreApplication::organizationName()==QCoreApplication::applicationName()) {
+ location=location.replace(QCoreApplication::organizationName()+Utils::constDirSep+QCoreApplication::applicationName(),
+ QCoreApplication::applicationName());
+ }
}
return userDir(location+constDirSep, sub, create);
@@ -713,7 +746,7 @@ QString Utils::systemDir(const QString &sub)
#if defined Q_OS_WIN
return fixPath(QCoreApplication::applicationDirPath())+(sub.isEmpty() ? QString() : (sub+constDirSep));
#elif defined Q_OS_MAC
- return fixPath(QCoreApplication::applicationDirPath())+QLatin1String("Contents/Resources/")+(sub.isEmpty() ? QString() : (sub+constDirSep));
+ return fixPath(QCoreApplication::applicationDirPath())+QLatin1String("../Resources/")+(sub.isEmpty() ? QString() : (sub+constDirSep));
#else
return fixPath(QString(INSTALL_PREFIX "/share/")+QCoreApplication::applicationName()+constDirSep+(sub.isEmpty() ? QString() : sub));
#endif
@@ -722,11 +755,11 @@ QString Utils::systemDir(const QString &sub)
QString Utils::helper(const QString &app)
{
#if defined Q_OS_WIN
- return systemDir(QLatin1String("helpers"))+app+QLatin1String(".exe");
+ return fixPath(QCoreApplication::applicationDirPath())+app+QLatin1String(".exe");
#elif defined Q_OS_MAC
- return systemDir(QLatin1String("helpers"))+app;
+ return fixPath(QCoreApplication::applicationDirPath())+app;
#else
- return QString(INSTALL_PREFIX "/lib/")+QCoreApplication::applicationName()+constDirSep+app;
+ return QString(INSTALL_PREFIX "/"LINUX_LIB_DIR"/")+QCoreApplication::applicationName()+constDirSep+app;
#endif
}
@@ -844,18 +877,53 @@ int Utils::layoutSpacing(QWidget *w)
return spacing;
}
-bool Utils::isHighDpi()
+double Utils::screenDpiScale()
{
- static int fontHeight=-1;
- if (-1==fontHeight) {
- fontHeight=QApplication::fontMetrics().height();
+ static double scaleFactor=-1.0;
+ if (scaleFactor<0) {
+ QWidget *dw=QApplication::desktop();
+ if (!dw) {
+ return 1.0;
+ }
+ scaleFactor=qMin(qMax(dw->logicalDpiX()/96.0, 1.0), 4.0);
+ }
+ return scaleFactor;
+}
+
+bool Utils::limitedHeight(QWidget *w)
+{
+ static bool init=false;
+ static bool limited=false;
+ if (!init) {
+ limited=!qgetenv("CANTATA_NETBOOK").isEmpty();
+ if (!limited) {
+ QDesktopWidget *dw=QApplication::desktop();
+ if (dw) {
+ limited=dw->availableGeometry(w).size().height()<=800;
+ }
+ }
}
- return fontHeight>22;
+ return limited;
}
-int Utils::scaleForDpi(int v)
+void Utils::resizeWindow(QWidget *w, bool preserveWidth, bool preserveHeight)
{
- return isHighDpi() ? v*2 : v;
+ QWidget *window=w ? w->window() : 0;
+ if (window) {
+ QSize was=window->size();
+ QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+ window->setMinimumSize(QSize(0, 0));
+ window->adjustSize();
+ QSize now=window->size();
+ window->setMinimumSize(now);
+ if (preserveWidth && preserveHeight) {
+ window->resize(qMax(was.width(), now.width()), qMax(was.height(), now.height()));
+ } else if (preserveWidth) {
+ window->resize(qMax(was.width(), now.width()), now.height());
+ } else if (preserveHeight) {
+ window->resize(now.width(), qMax(was.height(), now.height()));
+ }
+ }
}
Utils::Desktop Utils::currentDe()
@@ -906,3 +974,64 @@ QPainterPath Utils::buildPath(const QRectF &r, double radius)
path.arcTo(r.x()+r.width()-diameter, r.y()+r.height()-diameter, diameter, diameter, 270, 90);
return path;
}
+
+#ifdef ENABLE_KDE_SUPPORT
+#include <KDE/KWindowSystem>
+#endif
+#ifdef Q_OS_WIN
+// This is down here, because windows.h includes ALL windows stuff - and we get conflicts with MessageBox :-(
+#include <windows.h>
+#elif !defined Q_OS_MAC && QT_VERSION < 0x050000
+#include <QX11Info>
+#include <X11/Xlib.h>
+#endif
+
+void Utils::raiseWindow(QWidget *w)
+{
+ if (!w) {
+ return;
+ }
+
+ #ifdef Q_OS_WIN
+ ::SetWindowPos(reinterpret_cast<HWND>(w->effectiveWinId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
+ ::SetWindowPos(reinterpret_cast<HWND>(w->effectiveWinId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
+ #elif !defined Q_OS_WIN && QT_VERSION>=0x050000
+ bool wasHidden=w->isHidden();
+ #endif
+
+ w->raise();
+ w->showNormal();
+ w->activateWindow();
+ #ifdef Q_OS_MAC
+ w->raise();
+ #endif
+ #if !defined Q_OS_WIN && !defined Q_OS_MAC
+ // This section seems to be required for compiz, so that MPRIS.Raise actually shows the window, and not just highlight launcher.
+ #if QT_VERSION < 0x050000
+ static const Atom constNetActive=XInternAtom(QX11Info::display(), "_NET_ACTIVE_WINDOW", False);
+ QX11Info info;
+ XEvent xev;
+ xev.xclient.type = ClientMessage;
+ xev.xclient.serial = 0;
+ xev.xclient.send_event = True;
+ xev.xclient.message_type = constNetActive;
+ xev.xclient.display = QX11Info::display();
+ xev.xclient.window = w->effectiveWinId();
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = 2;
+ xev.xclient.data.l[1] = xev.xclient.data.l[2] = xev.xclient.data.l[3] = xev.xclient.data.l[4] = 0;
+ XSendEvent(QX11Info::display(), QX11Info::appRootWindow(info.screen()), False, SubstructureRedirectMask|SubstructureNotifyMask, &xev);
+ #else // QT_VERSION < 0x050000
+ QString wmctrl=Utils::findExe(QLatin1String("wmctrl"));
+ if (!wmctrl.isEmpty()) {
+ if (wasHidden) {
+ QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+ }
+ QProcess::execute(wmctrl, QStringList() << QLatin1String("-i") << QLatin1String("-a") << QString::number(w->effectiveWinId()));
+ }
+ #endif // QT_VERSION < 0x050000
+ #ifdef ENABLE_KDE_SUPPORT
+ KWindowSystem::forceActiveWindow(w->effectiveWinId());
+ #endif
+ #endif
+}
diff --git a/support/utils.h b/support/utils.h
index dd51e37..a773f95 100644
--- a/support/utils.h
+++ b/support/utils.h
@@ -63,11 +63,19 @@ namespace Utils
extern QString strippedText(QString s);
extern QString stripAcceleratorMarkers(QString label);
- extern QString fixPath(const QString &d);
- // Convert directory to a format suitable fo rUI - e.g. use native separators, and remove any traling separator
- extern QString convertDirForDisplay(const QString &dir);
- // Convert directory from a UI field - convert to / separators, and add a trailing separator
- extern QString convertDirFromDisplay(const QString &dir);
+ extern QString fixPath(const QString &d, bool ensureEndsInSlash=true);
+ #ifdef Q_OS_WIN
+ inline QString homeToTilda(const QString &s) { return s; }
+ inline QString tildaToHome(const QString &s) { return s; }
+ #else
+ extern QString homeToTilda(const QString &s);
+ extern QString tildaToHome(const QString &s);
+ #endif
+
+ // Convert path to a format suitable fo rUI - e.g. use native separators, and remove any trailing separator
+ extern QString convertPathForDisplay(const QString &dir, bool isFolder=true);
+ // Convert path from a UI field - convert to / separators, and add a trailing separator (if isFolder)
+ extern QString convertPathFromDisplay(const QString &dir, bool isFolder=true);
extern QString getDir(const QString &file);
extern QString getFile(const QString &file);
extern QString changeExtension(const QString &file, const QString &extension);
@@ -110,8 +118,12 @@ namespace Utils
extern double smallFontFactor(const QFont &f);
extern QFont smallFont(QFont f);
extern int layoutSpacing(QWidget *w);
- extern bool isHighDpi();
- extern int scaleForDpi(int v);
+ extern double screenDpiScale();
+ inline bool isHighDpi() { return screenDpiScale()>1.35; }
+ inline int scaleForDpi(int v) { return qRound(screenDpiScale()*v); }
+ extern bool limitedHeight(QWidget *w);
+ extern void resizeWindow(QWidget *w, bool preserveWidth=true, bool preserveHeight=true);
+ extern void raiseWindow(QWidget *w);
enum Desktop {
KDE,
diff --git a/support/windowmanager.cpp b/support/windowmanager.cpp
index 695a1f7..f2d4e62 100644
--- a/support/windowmanager.cpp
+++ b/support/windowmanager.cpp
@@ -108,24 +108,26 @@ bool Pointer::eventFilter(QObject *o, QEvent *e)
}
#endif
-WindowManager::WindowManager(QObject *parent):
- QObject(parent),
+WindowManager::WindowManager(QObject *parent)
+ : QObject(parent)
#if defined Q_WS_X11 && QT_VERSION < 0x050000
- _useWMMoveResize(true),
+ , _useWMMoveResize(true)
#else
- _useWMMoveResize(false),
+ , _useWMMoveResize(false)
#endif
- _dragMode(WM_DRAG_NONE),
+ , _dragMode(WM_DRAG_NONE)
#ifdef ENABLE_KDE_SUPPORT
- _dragDistance(KGlobalSettings::dndEventDelay()),
+ , _dragDistance(KGlobalSettings::dndEventDelay())
#else
- _dragDistance(QApplication::startDragDistance()),
+ , _dragDistance(QApplication::startDragDistance())
+ #endif
+ , _dragDelay(QApplication::startDragTime())
+ , _dragAboutToStart(false)
+ , _dragInProgress(false)
+ , _locked(false)
+ #ifndef Q_OS_MAC
+ , _cursorOverride(false)
#endif
- _dragDelay(QApplication::startDragTime()),
- _dragAboutToStart(false),
- _dragInProgress(false),
- _locked(false),
- _cursorOverride(false)
{
// install application wise event filter
_appEventFilter = new AppEventFilter(this);
@@ -260,7 +262,7 @@ bool WindowManager::mousePressEvent(QObject *object, QEvent *event)
bool WindowManager::mouseMoveEvent(QObject *object, QEvent *event)
{
- Q_UNUSED(object);
+ Q_UNUSED(object)
// stop timer
if (_dragTimer.isActive()){
@@ -299,8 +301,8 @@ bool WindowManager::mouseMoveEvent(QObject *object, QEvent *event)
bool WindowManager::mouseReleaseEvent(QObject *object, QEvent *event)
{
- Q_UNUSED(object);
- Q_UNUSED(event);
+ Q_UNUSED(object)
+ Q_UNUSED(event)
resetDrag();
return false;
}
@@ -544,10 +546,12 @@ bool WindowManager::canDrag(QWidget *widget, QWidget *child, const QPoint &posit
void WindowManager::resetDrag(void)
{
+ #ifndef Q_OS_MAC
if ((!useWMMoveResize()) && _target && _cursorOverride) {
qApp->restoreOverrideCursor();
_cursorOverride = false;
}
+ #endif
_target.clear();
if (_dragTimer.isActive()) {
@@ -601,10 +605,12 @@ void WindowManager::startDrag(QWidget *widget, const QPoint& position)
#endif
}
+ #ifndef Q_OS_MAC
if (!useWMMoveResize() && !_cursorOverride) {
qApp->setOverrideCursor(Qt::DragMoveCursor);
_cursorOverride = true;
}
+ #endif
_dragInProgress = true;
return;
@@ -662,7 +668,7 @@ bool WindowManager::AppEventFilter::eventFilter(QObject *object, QEvent *event)
bool WindowManager::AppEventFilter::appMouseEvent(QObject *object, QEvent *event)
{
- Q_UNUSED(object);
+ Q_UNUSED(object)
// store target window (see later)
QWidget *window(_parent->_target.data()->window());
diff --git a/support/windowmanager.h b/support/windowmanager.h
index 0cfa9b2..b9f97f2 100644
--- a/support/windowmanager.h
+++ b/support/windowmanager.h
@@ -174,9 +174,11 @@ private:
//! true if drag is locked
bool _locked;
+ #ifndef Q_OS_MAC
//! cursor override
/*! used to keep track of application cursor being overridden when dragging in non-WM mode */
bool _cursorOverride;
+ #endif
// provide application-wise event filter
// it us used to unlock dragging and make sure event look is properly restored
diff --git a/tags/CMakeLists.txt b/tags/CMakeLists.txt
index ffb64b7..6e15360 100644
--- a/tags/CMakeLists.txt
+++ b/tags/CMakeLists.txt
@@ -1,10 +1,10 @@
-include_directories(${QTINCLUDES} ${TAGLIB_INCLUDES})
+include_directories(${QTINCLUDES} ${TAGLIB_INCLUDES} ${CMAKE_SOURCE_DIR})
set(CANTATA_TAGS_SRCS main.cpp taghelper.cpp tags.cpp filetyperesolver.cpp ../mpd/song.cpp)
set(CANTATA_TAGS_MOC_HDRS taghelper.h)
if (ENABLE_KDE_SUPPORT)
kde4_add_executable(cantata-tags ${CANTATA_TAGS_SRCS} ${CANTATA_TAGS_MOC_SRCS})
- install(TARGETS cantata-tags RUNTIME DESTINATION lib/cantata)
+ install(TARGETS cantata-tags RUNTIME DESTINATION ${LINUX_LIB_DIR}/cantata)
target_link_libraries(cantata-tags ${KDE4_KDECORE_LIBS})
else (ENABLE_KDE_SUPPORT)
if (ENABLE_QT5)
@@ -16,14 +16,14 @@ else (ENABLE_KDE_SUPPORT)
if (WIN32)
set(CMAKE_BUILD_TYPE "Release")
ADD_EXECUTABLE(cantata-tags WIN32 ${CANTATA_TAGS_SRCS} ${CANTATA_TAGS_MOC_SRCS})
- install(TARGETS cantata-tags DESTINATION ${CMAKE_INSTALL_PREFIX}/helpers)
+ install(TARGETS cantata-tags DESTINATION ${CMAKE_INSTALL_PREFIX})
elseif (APPLE)
set(CMAKE_BUILD_TYPE "Release")
ADD_EXECUTABLE(cantata-tags ${CANTATA_TAGS_SRCS} ${CANTATA_TAGS_MOC_SRCS})
- install(TARGETS cantata-tags DESTINATION ${MACOSX_BUNDLE_RESOURCES}/helpers)
+ install(TARGETS cantata-tags DESTINATION ${MACOSX_BUNDLE_APP_DIR})
else (WIN32)
ADD_EXECUTABLE(cantata-tags ${CANTATA_TAGS_SRCS} ${CANTATA_TAGS_MOC_SRCS})
- install(TARGETS cantata-tags RUNTIME DESTINATION lib/cantata)
+ install(TARGETS cantata-tags RUNTIME DESTINATION ${LINUX_LIB_DIR}/cantata)
endif (WIN32)
endif (ENABLE_KDE_SUPPORT)
diff --git a/tags/main.cpp b/tags/main.cpp
index ff3d0ee..411d5a1 100644
--- a/tags/main.cpp
+++ b/tags/main.cpp
@@ -29,6 +29,15 @@
#include "tags.h"
#include "taghelper.h"
+#ifdef Q_OS_WIN
+#include <windows.h>
+static long __stdcall exceptionHandler(EXCEPTION_POINTERS *p)
+{
+ Q_UNUSED(p)
+ ::exit(0);
+}
+#endif
+
static QString logFileName;
static bool firstMsg=true;
#if QT_VERSION < 0x050000
@@ -50,6 +59,10 @@ static void cantataQtMsgHandler(QtMsgType, const QMessageLogContext &, const QSt
int main(int argc, char *argv[])
{
+ #ifdef Q_OS_WIN
+ // Prevent windows crash dialog from appearing...
+ SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)exceptionHandler);
+ #endif
QCoreApplication app(argc, argv);
if (3==app.arguments().length() || 4==app.arguments().length()) {
if (4==app.arguments().length()) {
diff --git a/tags/tageditor.cpp b/tags/tageditor.cpp
index 3cc9048..e029f3d 100644
--- a/tags/tageditor.cpp
+++ b/tags/tageditor.cpp
@@ -50,8 +50,8 @@
w=0;
//
-// NOTE: Cantata does NOT read, and store, comments from MPD. For comment support, Cantata will read these from the files when the tag editor is opened
-// These are placed into the Song's 'name' field (as this is not currently used in this editor)
+// NOTE: Cantata does NOT read, and store, comments from MPD. For comment support, Cantata will read these from the
+// files when the tag editor is opened.
//
static bool equalTags(const Song &a, const Song &b, bool compareCommon, bool composerSupport, bool commentSupport)
{
@@ -84,6 +84,16 @@ int TagEditor::instanceCount()
return iCount;
}
+static inline bool nullRating(const quint8 &rating)
+{
+ return rating>Song::Rating_Max;
+}
+
+static inline bool nullRating(const Song &s)
+{
+ return nullRating(s.rating);
+}
+
TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
const QSet<QString> &existingArtists, const QSet<QString> &existingAlbumArtists, const QSet<QString> &existingComposers,
const QSet<QString> &existingAlbums, const QSet<QString> &existingGenres, const QString &udi)
@@ -101,18 +111,23 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
, haveGenres(false)
, haveDiscs(false)
, haveYears(false)
+ , haveRatings(false)
, saving(false)
, composerSupport(false)
, commentSupport(false)
+ , readRatingsAct(0)
+ , writeRatingsAct(0)
{
iCount++;
bool isMopidy=false;
+ bool ratingsSupport=false;
#ifdef ENABLE_DEVICES_SUPPORT
if (deviceUdi.isEmpty()) {
baseDir=MPDConnection::self()->getDetails().dir;
composerSupport=MPDConnection::self()->composerTagSupported();
commentSupport=MPDConnection::self()->commentTagSupported();
isMopidy=MPDConnection::self()->isMopdidy();
+ ratingsSupport=!isMopidy;
} else {
Device *dev=getDevice(udi, parentWidget());
@@ -128,6 +143,7 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
composerSupport=MPDConnection::self()->composerTagSupported();
commentSupport=MPDConnection::self()->commentTagSupported();
isMopidy=MPDConnection::self()->isMopdidy();
+ ratingsSupport=!isMopidy;
#endif
foreach (const Song &s, songs) {
@@ -135,6 +151,7 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
continue;
}
Song song(s);
+ song.rating=Song::Rating_Null;
if (s.guessed) {
song.revertGuessedTags();
}
@@ -155,8 +172,24 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
setupUi(mainWidet);
if (isMopidy) {
connect(mopidyNote, SIGNAL(leftClickedUrl()), SLOT(showMopidyMessage()));
+ REMOVE(ratingWidget);
+ REMOVE(ratingLabel);
+ REMOVE(ratingVarious);
+ REMOVE(ratingNoteLabel);
+ } else if (!ratingsSupport) {
+ REMOVE(mopidyNote);
+ REMOVE(ratingWidget);
+ REMOVE(ratingLabel);
+ REMOVE(ratingVarious);
+ REMOVE(ratingNoteLabel);
} else {
REMOVE(mopidyNote);
+ connect(this, SIGNAL(getRating(QString)), MPDConnection::self(), SLOT(getRating(QString)));
+ connect(this, SIGNAL(setRating(QString,quint8)), MPDConnection::self(), SLOT(setRating(QString,quint8)));
+ connect(MPDConnection::self(), SIGNAL(rating(QString,quint8)), this, SLOT(rating(QString,quint8)));
+ ratingWidget->setShowZeroForNull(true);
+ QColor col=palette().color(QPalette::WindowText);
+ ratingVarious->setStyleSheet(QString("QLabel{color:rgba(%1,%2,%3,128);}").arg(col.red()).arg(col.green()).arg(col.blue()));
}
setMainWidget(mainWidet);
ButtonCodes buttons=Ok|Cancel|Reset|User3;
@@ -165,7 +198,6 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
}
setButtons(buttons);
setCaption(i18n("Tags"));
- progress->setVisible(false);
if (songs.count()>1) {
setButtonGuiItem(User2, StdGuiItem::back(true));
setButtonGuiItem(User1,StdGuiItem::forward(true));
@@ -180,6 +212,12 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
toolsMenu->addAction(i18n("Set 'Album Artist' from 'Artist'"), this, SLOT(setAlbumArtistFromArtist()));
toolsMenu->addAction(i18n("Capitalize"), this, SLOT(capitalise()));
toolsMenu->addAction(i18n("Adjust Track Numbers"), this, SLOT(adjustTrackNumbers()));
+ if (ratingsSupport && !isMopidy) {
+ readRatingsAct=toolsMenu->addAction(i18n("Read Ratings from File"), this, SLOT(readRatings()));
+ writeRatingsAct=toolsMenu->addAction(i18n("Write Ratings to File"), this, SLOT(writeRatings()));
+ readRatingsAct->setEnabled(false);
+ writeRatingsAct->setEnabled(false);
+ }
setButtonMenu(User3, toolsMenu, InstantPopup);
enableButton(Ok, false);
enableButton(Reset, false);
@@ -271,6 +309,7 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
all.genre=1==songGenres.count() ? *(songGenres.begin()) : QString();
all.year=1==songYears.count() ? *(songYears.begin()) : 0;
all.disc=1==songDiscs.count() ? *(songDiscs.begin()) : 0;
+ all.rating=Song::Rating_Null;
original.prepend(all);
artist->setFocus();
haveArtists=songArtists.count()>1;
@@ -285,6 +324,15 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
}
edited=original;
setIndex(0);
+
+ if (ratingsSupport || commentSupport) {
+ progress->setVisible(true);
+ progress->setRange(0, (original.count()>1 ? (original.count()-1) : 1)*(commentSupport && ratingsSupport ? 2 : 1));
+ progress->setValue(0);
+ } else {
+ progress->setVisible(false);
+ }
+
bool first=original.count()>1;
foreach (const Song &s, original) {
if (first) {
@@ -292,6 +340,9 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
first=false;
} else {
trackName->insertItem(trackName->count(), s.filePath());
+ if (!isMopidy && ratingsSupport) {
+ emit getRating(s.file);
+ }
}
}
connect(title, SIGNAL(textChanged(const QString &)), SLOT(checkChanged()));
@@ -315,6 +366,9 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
connect(year, SIGNAL(valueChanged(int)), SLOT(checkChanged()));
connect(trackName, SIGNAL(activated(int)), SLOT(setIndex(int)));
connect(this, SIGNAL(update()), MPDConnection::self(), SLOT(update()));
+ if (ratingWidget) {
+ connect(ratingWidget, SIGNAL(valueChanged(int)), SLOT(checkRating()));
+ }
adjustSize();
int w=Utils::scaleForDpi(600);
if (width()<w) {
@@ -323,6 +377,7 @@ TagEditor::TagEditor(QWidget *parent, const QList<Song> &songs,
if (commentSupport) {
QTimer::singleShot(0, this, SLOT(readComments()));
}
+ trackName->lineEdit()->setReadOnly(true);
}
TagEditor::~TagEditor()
@@ -363,11 +418,14 @@ void TagEditor::fillSong(Song &s, bool isAll, bool skipEmpty) const
if (!isAll || 0!=year->value()) {
s.year=year->value();
}
+ if (ratingWidget) {
+ s.rating=ratingWidget->value();
+ }
}
void TagEditor::setVariousHint()
{
- if(0==currentSongIndex && original.count()>1) {
+ if (0==currentSongIndex && original.count()>1) {
Song all=original.at(0);
artist->setPlaceholderText(all.artist.isEmpty() && haveArtists ? TagSpinBox::variousStr() : QString());
album->setPlaceholderText(all.album.isEmpty() && haveAlbums ? TagSpinBox::variousStr() : QString());
@@ -381,6 +439,9 @@ void TagEditor::setVariousHint()
genre->setPlaceholderText(all.genre.isEmpty() && haveGenres ? TagSpinBox::variousStr() : QString());
disc->setVarious(0==all.disc && haveDiscs);
year->setVarious(0==all.year && haveYears);
+ if (ratingVarious) {
+ ratingVarious->setVisible(nullRating(all) && haveRatings);
+ }
} else {
artist->setPlaceholderText(QString());
album->setPlaceholderText(QString());
@@ -394,6 +455,9 @@ void TagEditor::setVariousHint()
genre->setPlaceholderText(QString());
disc->setVarious(false);
year->setVarious(false);
+ if (ratingVarious) {
+ ratingVarious->setVisible(false);
+ }
}
}
@@ -425,17 +489,22 @@ void TagEditor::setLabelStates()
discLabel->setOn(o.disc!=e.disc);
genreLabel->setOn(o.genre!=e.genre);
yearLabel->setOn(o.year!=e.year);
+ if (ratingLabel) {
+ ratingLabel->setOn(o.rating<=Song::Rating_Max &&
+ e.rating<=Song::Rating_Max &&
+ o.rating!=e.rating);
+ }
}
void TagEditor::readComments()
{
- progress->setVisible(true);
- progress->setRange(0, original.count());
bool haveMultiple=original.count()>1;
bool updated=false;
for (int i=0; i<original.count(); ++i) {
- progress->setValue(i+1);
+ if (0!=i || !haveMultiple) {
+ progress->setValue(progress->value()+1);
+ }
if (i && 0==i%10) {
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}
@@ -455,7 +524,7 @@ void TagEditor::readComments()
if (updated) {
edited=original;
}
- progress->setVisible(false);
+ controlInitialActionsState();
if (haveMultiple) {
setVariousHint();
} else {
@@ -469,7 +538,7 @@ void TagEditor::applyVa()
if (MessageBox::No==MessageBox::questionYesNo(this, (isAll ? i18n("Apply \"Various Artists\" workaround to <b>all</b> tracks?")
: i18n("Apply \"Various Artists\" workaround?"))+
- QLatin1String("<br/><hr/><br/>")+
+ QLatin1String("<br/><br/>")+
i18n("<i>This will set 'Album artist' and 'Artist' to "
"\"Various Artists\", and set 'Title' to "
"\"TrackArtist - TrackTitle\"</i>"), i18n("Apply \"Various Artists\" Workaround"),
@@ -511,7 +580,7 @@ void TagEditor::revertVa()
if (MessageBox::No==MessageBox::questionYesNo(this, (isAll ? i18n("Revert \"Various Artists\" workaround on <b>all</b> tracks?")
: i18n("Revert \"Various Artists\" workaround"))+
- QLatin1String("<br/><hr/><br/>")+
+ QLatin1String("<br/><br/>")+
i18n("<i>Where the 'Album artist' is the same as 'Artist' "
"and the 'Title' is of the format \"TrackArtist - TrackTitle\", "
"'Artist' will be taken from 'Title' and 'Title' itself will be "
@@ -594,10 +663,9 @@ void TagEditor::capitalise()
{
bool isAll=0==currentSongIndex && original.count()>1;
- if (MessageBox::No==MessageBox::questionYesNo(this, isAll ? i18n("Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
- "'Album' of <b>all</b> tracks?")
- : i18n("Capitalize the first letter of 'Title', 'Artist', 'Album artist', and "
- "'Album'"),
+ if (MessageBox::No==MessageBox::questionYesNo(this, isAll ? i18n("Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) "
+ "of <b>all</b> tracks?")
+ : i18n("Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc)?"),
i18n("Capitalize"), GuiItem(i18n("Capitalize")), StdGuiItem::cancel())) {
return;
}
@@ -654,6 +722,118 @@ void TagEditor::adjustTrackNumbers()
}
}
+void TagEditor::readRatings()
+{
+ bool isAll=0==currentSongIndex && original.count()>1;
+
+ if (MessageBox::No==MessageBox::questionYesNo(this, isAll ? i18n("Read ratings for all tracks from the music files?")
+ : i18n("Read rating from music file?"),
+ i18n("Ratings"),
+ isAll ? GuiItem(i18n("Read Ratings")) : GuiItem(i18n("Read Rating")),
+ StdGuiItem::cancel())) {
+ return;
+ }
+
+ if (isAll) {
+ progress->setVisible(true);
+ progress->setRange(0, original.count());
+ QStringList updated;
+ for (int i=1; i<original.count(); ++i) {
+ progress->setValue(i+1);
+ if (i && 0==i%10) {
+ QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+ }
+ Song s=edited.at(i);
+ int r=Tags::readRating(baseDir+s.file);
+ if (r>=0 && r<=Song::Rating_Max && s.rating!=r) {
+ s.rating=r;
+ edited.replace(i, s);
+ updated.append(s.file);
+ editedIndexes.insert(i);
+ updateTrackName(i, true);
+ if (i==currentSongIndex) {
+ setSong(s);
+ }
+ }
+ }
+ progress->setVisible(false);
+ if (!updated.isEmpty()) {
+ MessageBox::informationList(this, i18n("Read, and updated, ratings from the following tracks:"), updated);
+ }
+ } else {
+ Song s=edited.at(currentSongIndex);
+ int r=Tags::readRating(baseDir+s.file);
+ if (r>=0 && r<=Song::Rating_Max && s.rating!=r) {
+ s.rating=r;
+ edited.replace(currentSongIndex, s);
+ setSong(s);
+ }
+ }
+ enableOkButton();
+}
+
+void TagEditor::writeRatings()
+{
+ bool isAll=0==currentSongIndex && original.count()>1;
+
+ if (isAll) {
+ for (int i=1; i<original.count(); ++i) {
+ if (nullRating(original.at(i))) {
+ MessageBox::error(this, i18n("Not all Song ratings have been read from MPD!")+QLatin1String("\n\n")+
+ i18n("Song ratings are not stored in the song files, but within MPD's 'sticker' database. "
+ "In order to save these into the actual file, Cantata must first read them from MPD."));
+ return;
+ }
+ }
+ } else {
+ if (nullRating(original.at(currentSongIndex))) {
+ MessageBox::error(this, i18n("Song rating has not been read from MPD!")+QLatin1String("\n\n")+
+ i18n("Song ratings are not stored in the song files, but within MPD's 'sticker' database. "
+ "In order to save these into the actual file, Cantata must first read them from MPD."));
+ return;
+ }
+ }
+
+ if (MessageBox::No==MessageBox::questionYesNo(this, isAll ? i18n("Write ratings for all tracks to the music files?")
+ : i18n("Write rating to music file?"),
+ i18n("Ratings"),
+ isAll ? GuiItem(i18n("Write Ratings")) : GuiItem(i18n("Write Rating")),
+ StdGuiItem::cancel())) {
+ return;
+ }
+
+ if (isAll) {
+ progress->setVisible(true);
+ progress->setRange(0, edited.count());
+ QStringList failed;
+ for (int i=1; i<edited.count(); ++i) {
+ progress->setValue(i+1);
+ if (i && 0==i%10) {
+ QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+ }
+ Song s=edited.at(i);
+ if (s.rating<=Song::Rating_Max) {
+ Tags::Update status=Tags::updateRating(baseDir+s.file, s.rating);
+ if (Tags::Update_Failed==status || Tags::Update_BadFile==status){
+ failed.append(s.file);
+ }
+ }
+ }
+ progress->setVisible(false);
+ if (!failed.isEmpty()) {
+ MessageBox::errorList(this, i18n("Failed to write ratings of the following tracks:"), failed);
+ }
+ } else {
+ Song s=edited.at(currentSongIndex);
+ if (s.rating<=Song::Rating_Max) {
+ Tags::Update status=Tags::updateRating(baseDir+s.file, s.rating);
+ if (Tags::Update_Failed==status || Tags::Update_BadFile==status){
+ MessageBox::error(this, i18n("Failed to write rating to music file!"));
+ }
+ }
+ }
+}
+
void TagEditor::checkChanged()
{
if (updating) {
@@ -702,7 +882,7 @@ void TagEditor::updateEditedStatus(int index)
{
bool isAll=0==index && original.count()>1;
Song s=edited.at(index);
- if (equalTags(s, original.at(index), isAll, composerSupport, commentSupport)) {
+ if (equalTags(s, original.at(index), isAll, composerSupport, commentSupport) && s.rating==original.at(index).rating) {
if (editedIndexes.contains(index)) {
editedIndexes.remove(index);
updateTrackName(index, false);
@@ -746,7 +926,7 @@ void TagEditor::updateEdited(bool isFromAll)
}
}
- if (equalTags(s, original.at(currentSongIndex), isFromAll || isAll, composerSupport, commentSupport)) {
+ if (equalTags(s, original.at(currentSongIndex), isFromAll || isAll, composerSupport, commentSupport) && s.rating==original.at(currentSongIndex).rating) {
if (editedIndexes.contains(currentSongIndex)) {
editedIndexes.remove(currentSongIndex);
updateTrackName(currentSongIndex, false);
@@ -763,6 +943,7 @@ void TagEditor::updateEdited(bool isFromAll)
void TagEditor::setSong(const Song &s)
{
+ blockSignals(true);
title->setText(s.title);
artist->setText(s.artist);
albumArtist->setText(s.albumartist);
@@ -777,6 +958,11 @@ void TagEditor::setSong(const Song &s)
disc->setValue(s.disc);
genre->setText(s.genre);
year->setValue(s.year);
+ if (ratingWidget) {
+ ratingWidget->setValue(s.rating);
+ }
+ blockSignals(false);
+ checkChanged();
}
void TagEditor::setIndex(int idx)
@@ -800,6 +986,7 @@ void TagEditor::setIndex(int idx)
titleLabel->setEnabled(!isMultiple);
track->setEnabled(!isMultiple);
trackLabel->setEnabled(!isMultiple);
+
if (isMultiple) {
title->setText(QString());
track->setValue(0);
@@ -825,6 +1012,97 @@ void TagEditor::showMopidyMessage()
QLatin1String("Mopidy"));
}
+void TagEditor::rating(const QString &f, quint8 r)
+{
+ if (!ratingWidget) {
+ return;
+ }
+ for (int i=original.count()>1 ? 1 : 0; i<original.count(); ++i) {
+ Song s=original.at(i);
+ if (nullRating(s) && s.rating!=r && s.file==f) {
+ progress->setValue(progress->value()+1);
+ controlInitialActionsState();
+ s.rating=r;
+ original.replace(i, s);
+ s=edited.at(i);
+ if (nullRating(s)) {
+ s.rating=r;
+ edited.replace(i, s);
+ }
+ if (i==currentSongIndex && ratingWidget->value()>Song::Rating_Max) {
+ ratingWidget->setValue(r);
+ }
+ }
+ }
+
+ if (original.count()>1 && !haveRatings) {
+ quint8 rating=Song::Rating_Null;
+ bool first=true;
+ for (int i=1; i<original.count() && !haveRatings; ++i) {
+ quint8 r=original.at(i).rating;
+ if (nullRating(r)) {
+ continue;
+ }
+ if (first) {
+ rating=r;
+ first=false;
+ } else if (r!=rating) {
+ haveRatings=true;
+ rating=Song::Rating_Null;
+ }
+ }
+ Song s=original.at(0);
+ if (s.rating!=rating) {
+ s.rating=rating;
+ original.replace(0, s);
+ }
+ s=edited.at(0);
+ if (s.rating!=rating) {
+ s.rating=rating;
+ edited.replace(0, s);
+ }
+ if (0==currentSongIndex) {
+ ratingWidget->setValue(rating);
+ }
+ setVariousHint();
+ }
+}
+
+void TagEditor::checkRating()
+{
+ if (!ratingWidget) {
+ return;
+ }
+ checkChanged();
+ if (original.count()>1 && 0==currentSongIndex) {
+ quint8 rating=Song::Rating_Null;
+ bool first=true;
+ haveRatings=false;
+ for (int i=1; i<edited.count() && !haveRatings; ++i) {
+ quint8 r=edited.at(i).rating;
+ if (nullRating(r)) {
+ continue;
+ }
+ if (first) {
+ rating=r;
+ first=false;
+ } else if (r!=rating) {
+ haveRatings=true;
+ rating=Song::Rating_Null;
+ }
+ }
+ Song s=edited.at(0);
+ if (s.rating!=rating) {
+ s.rating=rating;
+ edited.replace(0, s);
+ if (0==currentSongIndex) {
+ ratingWidget->setValue(rating);
+ }
+ }
+ setVariousHint();
+ }
+}
+
bool TagEditor::applyUpdates()
{
bool skipFirst=original.count()>1;
@@ -872,6 +1150,11 @@ bool TagEditor::applyUpdates()
}
Song orig=original.at(idx);
Song edit=edited.at(idx);
+
+ if (ratingWidget && orig.rating!=edit.rating && edit.rating<=Song::Rating_Max) {
+ emit setRating(orig.file, edit.rating);
+ }
+
if (equalTags(orig, edit, false, composerSupport, commentSupport)) {
continue;
}
@@ -955,9 +1238,11 @@ void TagEditor::slotButtonClicked(int button)
}
editedIndexes.clear();
setSong(original.at(currentSongIndex));
+ checkRating();
} else {
setSong(original.at(currentSongIndex));
}
+ setLabelStates();
enableOkButton();
break;
case User1: // Next
@@ -1007,3 +1292,16 @@ void TagEditor::closeEvent(QCloseEvent *event)
Dialog::closeEvent(event);
}
}
+
+void TagEditor::controlInitialActionsState()
+{
+ if (progress->value()>=progress->maximum()) {
+ progress->setVisible(false);
+ if (readRatingsAct) {
+ readRatingsAct->setEnabled(true);
+ }
+ if (writeRatingsAct) {
+ writeRatingsAct->setEnabled(true);
+ }
+ }
+}
diff --git a/tags/tageditor.h b/tags/tageditor.h
index ff4361d..e2b62d5 100644
--- a/tags/tageditor.h
+++ b/tags/tageditor.h
@@ -49,6 +49,8 @@ public:
Q_SIGNALS:
// These are for communicating with MPD object (which is in its own thread, so need to talk via signal/slots)
void update();
+ void getRating(const QString &f);
+ void setRating(const QString &f, quint8 r);
private:
void enableOkButton();
@@ -63,6 +65,7 @@ private:
Device * getDevice(const QString &udi, QWidget *p);
#endif
void closeEvent(QCloseEvent *event);
+ void controlInitialActionsState();
private Q_SLOTS:
void readComments();
@@ -72,10 +75,14 @@ private Q_SLOTS:
void capitalise();
void checkChanged();
void adjustTrackNumbers();
+ void readRatings();
+ void writeRatings();
void updateEdited(bool isFromAll=false);
void setSong(const Song &s);
void setIndex(int idx);
void showMopidyMessage();
+ void rating(const QString &f, quint8 r);
+ void checkRating();
private:
QString baseDir;
@@ -95,9 +102,12 @@ private:
bool haveGenres;
bool haveDiscs;
bool haveYears;
+ bool haveRatings;
bool saving;
bool composerSupport;
bool commentSupport;
+ QAction *readRatingsAct;
+ QAction *writeRatingsAct;
};
#endif
diff --git a/tags/tageditor.ui b/tags/tageditor.ui
index e39808f..bd3be1c 100644
--- a/tags/tageditor.ui
+++ b/tags/tageditor.ui
@@ -6,221 +6,243 @@
<rect>
<x>0</x>
<y>0</y>
- <width>327</width>
- <height>252</height>
+ <width>517</width>
+ <height>490</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
<number>0</number>
</property>
- <item>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ <property name="topMargin">
+ <number>0</number>
</property>
- <item row="0" column="0">
- <widget class="StateLabel" name="trackNameLabel">
- <property name="text">
- <string>Track:</string>
- </property>
- <property name="buddy">
- <cstring>trackName</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="ComboBox" name="trackName"/>
- </item>
- <item row="1" column="0">
- <widget class="StateLabel" name="titleLabel">
- <property name="text">
- <string>Title:</string>
- </property>
- <property name="buddy">
- <cstring>title</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="LineEdit" name="title"/>
- </item>
- <item row="2" column="0">
- <widget class="StateLabel" name="artistLabel">
- <property name="text">
- <string>Artist:</string>
- </property>
- <property name="buddy">
- <cstring>artist</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="CompletionCombo" name="artist"/>
- </item>
- <item row="3" column="0">
- <widget class="StateLabel" name="albumArtistLabel">
- <property name="text">
- <string>Album artist:</string>
- </property>
- <property name="buddy">
- <cstring>albumArtist</cstring>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="CompletionCombo" name="albumArtist"/>
- </item>
- <item row="4" column="0">
- <widget class="StateLabel" name="composerLabel">
- <property name="text">
- <string>Composer:</string>
- </property>
- <property name="buddy">
- <cstring>composer</cstring>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="CompletionCombo" name="composer"/>
- </item>
- <item row="5" column="0">
- <widget class="StateLabel" name="albumLabel">
- <property name="text">
- <string>Album:</string>
- </property>
- <property name="buddy">
- <cstring>album</cstring>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
- </widget>
+ <item row="0" column="0">
+ <widget class="StateLabel" name="trackNameLabel">
+ <property name="text">
+ <string>Track:</string>
+ </property>
+ <property name="buddy">
+ <cstring>trackName</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="trackName">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="StateLabel" name="titleLabel">
+ <property name="text">
+ <string>Title:</string>
+ </property>
+ <property name="buddy">
+ <cstring>title</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="LineEdit" name="title"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="StateLabel" name="artistLabel">
+ <property name="text">
+ <string>Artist:</string>
+ </property>
+ <property name="buddy">
+ <cstring>artist</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="CompletionCombo" name="artist"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="StateLabel" name="albumArtistLabel">
+ <property name="text">
+ <string>Album artist:</string>
+ </property>
+ <property name="buddy">
+ <cstring>albumArtist</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="CompletionCombo" name="albumArtist"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="StateLabel" name="composerLabel">
+ <property name="text">
+ <string>Composer:</string>
+ </property>
+ <property name="buddy">
+ <cstring>composer</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="CompletionCombo" name="composer"/>
+ </item>
+ <item row="5" column="0">
+ <widget class="StateLabel" name="albumLabel">
+ <property name="text">
+ <string>Album:</string>
+ </property>
+ <property name="buddy">
+ <cstring>album</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="CompletionCombo" name="album"/>
+ </item>
+ <item row="6" column="0">
+ <widget class="StateLabel" name="trackLabel">
+ <property name="text">
+ <string>Track number:</string>
+ </property>
+ <property name="buddy">
+ <cstring>track</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="TagSpinBox" name="track"/>
+ </item>
+ <item row="7" column="0">
+ <widget class="StateLabel" name="discLabel">
+ <property name="text">
+ <string>Disc number:</string>
+ </property>
+ <property name="buddy">
+ <cstring>disc</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="TagSpinBox" name="disc"/>
+ </item>
+ <item row="8" column="0">
+ <widget class="StateLabel" name="genreLabel">
+ <property name="text">
+ <string>Genre:</string>
+ </property>
+ <property name="buddy">
+ <cstring>genre</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="CompletionCombo" name="genre"/>
+ </item>
+ <item row="9" column="0">
+ <widget class="StateLabel" name="yearLabel">
+ <property name="text">
+ <string>Year:</string>
+ </property>
+ <property name="buddy">
+ <cstring>year</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="1">
+ <widget class="TagSpinBox" name="year"/>
+ </item>
+ <item row="10" column="0">
+ <widget class="StateLabel" name="ratingLabel">
+ <property name="text">
+ <string>Rating:</string>
+ </property>
+ <property name="buddy">
+ <cstring>ratingWidget</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="10" column="1">
+ <layout class="QHBoxLayout" name="ratingLayout">
+ <item>
+ <widget class="RatingWidget" name="ratingWidget" native="true"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="ratingVarious">
+ <property name="text">
+ <string><i>(Various)</i></string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="11" column="0">
+ <widget class="StateLabel" name="commentLabel">
+ <property name="text">
+ <string>Comment:</string>
+ </property>
+ <property name="buddy">
+ <cstring>comment</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="11" column="1">
+ <widget class="LineEdit" name="comment"/>
+ </item>
+ </layout>
</item>
- <item row="5" column="1">
- <widget class="CompletionCombo" name="album"/>
- </item>
- <item row="6" column="0">
- <widget class="StateLabel" name="trackLabel">
+ <item>
+ <widget class="PlainNoteLabel" name="label_7x">
<property name="text">
- <string>Track number:</string>
- </property>
- <property name="buddy">
- <cstring>track</cstring>
+ <string>Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')</string>
</property>
</widget>
</item>
- <item row="6" column="1">
- <widget class="TagSpinBox" name="track"/>
- </item>
- <item row="7" column="0">
- <widget class="StateLabel" name="discLabel">
+ <item>
+ <widget class="PlainNoteLabel" name="ratingNoteLabel">
<property name="text">
- <string>Disc number:</string>
- </property>
- <property name="buddy">
- <cstring>disc</cstring>
+ <string>Ratings are stored in an external database, and <b>not</b> in the song's file.</string>
</property>
</widget>
</item>
- <item row="7" column="1">
- <widget class="TagSpinBox" name="disc"/>
- </item>
- <item row="8" column="0">
- <widget class="StateLabel" name="genreLabel">
+ <item>
+ <widget class="PlainUrlNoteLabel" name="mopidyNote">
<property name="text">
- <string>Genre:</string>
- </property>
- <property name="buddy">
- <cstring>genre</cstring>
+ <string>Connected to a Mopidy server (manual update required).</string>
</property>
</widget>
</item>
- <item row="8" column="1">
- <widget class="CompletionCombo" name="genre"/>
+ <item>
+ <widget class="QProgressBar" name="progress"/>
</item>
- <item row="9" column="0">
- <widget class="StateLabel" name="yearLabel">
- <property name="text">
- <string>Year:</string>
- </property>
- <property name="buddy">
- <cstring>year</cstring>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- </widget>
- </item>
- <item row="9" column="1">
- <widget class="TagSpinBox" name="year"/>
- </item>
- <item row="10" column="0">
- <widget class="StateLabel" name="commentLabel">
- <property name="text">
- <string>Comment:</string>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
</property>
- <property name="buddy">
- <cstring>comment</cstring>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
</property>
- </widget>
- </item>
- <item row="10" column="1">
- <widget class="LineEdit" name="comment"/>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer_3x">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>4</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="label_7x">
- <property name="text">
- <string><i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')</i></string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- <property name="textInteractionFlags">
- <set>Qt::NoTextInteraction</set>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="mopidyNoteSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::MinimumExpanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="UrlLabel" name="mopidyNote">
- <property name="text" stdset="0">
- <string><i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i></string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QProgressBar" name="progress"/>
+ </spacer>
</item>
</layout>
</widget>
@@ -236,11 +258,6 @@
<header>widgets/completioncombo.h</header>
</customwidget>
<customwidget>
- <class>ComboBox</class>
- <extends>QComboBox</extends>
- <header>support/combobox.h</header>
- </customwidget>
- <customwidget>
<class>TagSpinBox</class>
<extends>QSpinBox</extends>
<header>widgets/tagspinbox.h</header>
@@ -251,9 +268,19 @@
<header>widgets/statelabel.h</header>
</customwidget>
<customwidget>
- <class>UrlLabel</class>
+ <class>PlainNoteLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
+ <class>PlainUrlNoteLabel</class>
<extends>QLabel</extends>
- <header>support/urllabel.h</header>
+ <header>widgets/notelabel.h</header>
+ </customwidget>
+ <customwidget>
+ <class>RatingWidget</class>
+ <extends>QWidget</extends>
+ <header>widgets/ratingwidget.h</header>
</customwidget>
</customwidgets>
<tabstops>
diff --git a/tags/taghelper.cpp b/tags/taghelper.cpp
index 76e92d1..f3545b3 100644
--- a/tags/taghelper.cpp
+++ b/tags/taghelper.cpp
@@ -154,6 +154,12 @@ void TagHelper::process()
outStream << (int)Tags::embedImage(fileName, cover);
} else if (QLatin1String("oggMimeType")==request) {
outStream << Tags::oggMimeType(fileName);
+ } else if (QLatin1String("readRating")==request) {
+ outStream << Tags::readRating(fileName);
+ } else if (QLatin1String("updateRating")==request) {
+ int rating=-1;
+ inStream >> rating;
+ outStream << (int)Tags::updateRating(fileName, rating);
} else if (QLatin1String("readAll")==request) {
outStream << Tags::readAll(fileName);
} else {
diff --git a/tags/taghelperiface.cpp b/tags/taghelperiface.cpp
index 0f79c0a..e96a0cc 100644
--- a/tags/taghelperiface.cpp
+++ b/tags/taghelperiface.cpp
@@ -230,6 +230,38 @@ QString TagHelperIface::oggMimeType(const QString &fileName)
return resp;
}
+int TagHelperIface::readRating(const QString &fileName)
+{
+ DBUG << fileName;
+ int resp=0;
+ QByteArray message;
+ QDataStream outStream(&message, QIODevice::WriteOnly);
+ outStream << QString(__FUNCTION__) << fileName;
+ Reply reply=sendMessage(message);
+ if (reply.status) {
+ QDataStream inStream(reply.data);
+ inStream >> resp;
+ }
+ return resp;
+}
+
+int TagHelperIface::updateRating(const QString &fileName, int rating)
+{
+ DBUG << fileName;
+ int resp=Tags::Update_Failed;
+ QByteArray message;
+ QDataStream outStream(&message, QIODevice::WriteOnly);
+ outStream << QString(__FUNCTION__) << fileName << rating;
+ Reply reply=sendMessage(message);
+ if (reply.status) {
+ QDataStream inStream(reply.data);
+ inStream >> resp;
+ } else {
+ resp=Tags::Update_BadFile;
+ }
+ return resp;
+}
+
QMap<QString, QString> TagHelperIface::readAll(const QString &fileName)
{
DBUG << fileName;
diff --git a/tags/taghelperiface.h b/tags/taghelperiface.h
index 4368e69..e6c9a7d 100644
--- a/tags/taghelperiface.h
+++ b/tags/taghelperiface.h
@@ -67,6 +67,8 @@ public:
int updateReplaygain(const QString &fileName, const Tags::ReplayGain &rg);
int embedImage(const QString &fileName, const QByteArray &cover);
QString oggMimeType(const QString &fileName);
+ int readRating(const QString &fileName);
+ int updateRating(const QString &fileName, int rating);
QMap<QString, QString> readAll(const QString &fileName);
private:
diff --git a/tags/tags.cpp b/tags/tags.cpp
index e8bf3cd..a9b21ae 100644
--- a/tags/tags.cpp
+++ b/tags/tags.cpp
@@ -32,6 +32,7 @@
#include <sstream>
#include <ios>
#include <QPair>
+#include <QDir>
#include <QFile>
#include <QString>
#include <QStringList>
@@ -79,6 +80,7 @@
#include <taglib/relativevolumeframe.h>
#include <taglib/attachedpictureframe.h>
#include <taglib/unsynchronizedlyricsframe.h>
+#include <taglib/popularimeterframe.h>
#ifdef TAGLIB_EXTRAS_FOUND
#include <taglib-extras/audiblefiletyperesolver.h>
#include <taglib-extras/realmediafiletyperesolver.h>
@@ -117,7 +119,32 @@ TagLib::String qString2TString(const QString &str)
return val.isEmpty() ? TagLib::String::null : TagLib::String(val.toUtf8().data(), TagLib::String::UTF8);
}
-static double parseRgString(const TagLib::String &str) {
+static inline int convertToCantataRating(double r) {
+ return qRound(r*10.0);
+ //return qRound((r*10.0)/2.0);
+}
+
+static std::string convertFromCantataRating(int rating) {
+ std::stringstream ss;
+ ss.precision(2);
+ ss << std::fixed << (rating/10.0);
+ return ss.str();
+}
+
+static double parseDoubleString(const TagLib::String &str) {
+ if (str.isEmpty()) {
+ return 0.0;
+ }
+
+ QString s=tString2QString(str);
+ bool ok=false;
+ double v=s.toDouble(&ok);
+
+ return ok ? v : 0.0;
+}
+
+static double parseRgString(const TagLib::String &str)
+{
if (str.isEmpty()) {
return 0.0;
}
@@ -184,7 +211,7 @@ static TagLib::FileRef getFileRef(const QString &path)
ensureFileTypeResolvers();
#ifdef Q_OS_WIN
- return TagLib::FileRef(reinterpret_cast<const wchar_t*>(path.constData()), true, TagLib::AudioProperties::Fast);
+ return TagLib::FileRef(reinterpret_cast<const wchar_t *>(path.utf16()), true, TagLib::AudioProperties::Fast);
#else
return TagLib::FileRef(QFile::encodeName(path).constData(), true, TagLib::AudioProperties::Fast);
#endif
@@ -276,7 +303,7 @@ static void setRva2Tag(TagLib::ID3v2::Tag *tag, const std::string &tagName, doub
}
// -- taken from rgtag.cpp from libebur128 -- END
-static void readID3v2Tags(TagLib::ID3v2::Tag *tag, Song *song, ReplayGain *rg, QImage *img, QString *lyrics)
+static void readID3v2Tags(TagLib::ID3v2::Tag *tag, Song *song, ReplayGain *rg, QImage *img, QString *lyrics, int *rating)
{
if (song) {
const TagLib::ID3v2::FrameList &albumArtist = tag->frameListMap()["TPE2"];
@@ -402,6 +429,37 @@ static void readID3v2Tags(TagLib::ID3v2::Tag *tag, Song *song, ReplayGain *rg, Q
}
}
}
+
+ if (rating) {
+ // First check for FMPS rating
+ const TagLib::ID3v2::FrameList &frames = tag->frameList("TXXX");
+ TagLib::ID3v2::FrameList::ConstIterator it = frames.begin();
+ TagLib::ID3v2::FrameList::ConstIterator end = frames.end();
+
+ for (; it != end; ++it) {
+ TagLib::ID3v2::UserTextIdentificationFrame *fr=dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>(*it);
+ if (fr) {
+ if (fr->description().upper() == "FMPS_RATING") {
+ *rating=convertToCantataRating(parseDoubleString(fr->fieldList().back()));
+ return;
+ }
+ }
+ }
+
+ const TagLib::ID3v2::FrameList &popm = tag->frameListMap()["POPM"];
+ it = popm.begin();
+ end = popm.end();
+
+ for (; it != end; ++it) {
+ TagLib::ID3v2::PopularimeterFrame *p=dynamic_cast< TagLib::ID3v2::PopularimeterFrame * >(*it);
+ if (p) {
+ if (p->email().isEmpty()) {
+ *rating=convertToCantataRating(p->rating() / 256.0);
+ return;
+ }
+ }
+ }
+ }
}
static bool updateID3v2Tag(TagLib::ID3v2::Tag *tag, const char *tagName, const QString &value)
@@ -432,7 +490,7 @@ static bool isId3V24(TagLib::ID3v2::Header *header)
return header && header->majorVersion()>3;
}
-static bool writeID3v2Tags(TagLib::ID3v2::Tag *tag, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img)
+static bool writeID3v2Tags(TagLib::ID3v2::Tag *tag, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, int rating)
{
bool changed=false;
@@ -499,10 +557,20 @@ static bool writeID3v2Tags(TagLib::ID3v2::Tag *tag, const Song &from, const Song
changed=true;
}
+ if (rating>-1) {
+ int old=-1;
+ readID3v2Tags(tag, 0, 0, 0, 0, &old);
+ if (old!=rating) {
+ while (clearTxxxTag(tag, "FMPS_RATING"));
+ setTxxxTag(tag, "FMPS_RATING", convertFromCantataRating(rating));
+ changed=true;
+ }
+ }
+
return changed;
}
-static void readAPETags(TagLib::APE::Tag *tag, Song *song, ReplayGain *rg, QImage *img)
+static void readAPETags(TagLib::APE::Tag *tag, Song *song, ReplayGain *rg, QImage *img, int *rating)
{
const TagLib::APE::ItemListMap &map = tag->itemListMap();
@@ -555,6 +623,10 @@ static void readAPETags(TagLib::APE::Tag *tag, Song *song, ReplayGain *rg, QImag
}
}
}
+
+ if (rating) {
+ *rating=convertToCantataRating(parseDoubleString(map["FMPS_RATING"].toString()));
+ }
}
static bool updateAPETag(TagLib::APE::Tag *tag, const char *tagName, const QString &value)
@@ -573,7 +645,7 @@ static bool updateAPETag(TagLib::APE::Tag *tag, const char *tagName, const QStri
return false;
}
-static bool writeAPETags(TagLib::APE::Tag *tag, const Song &from, const Song &to, const RgTags &rg)
+static bool writeAPETags(TagLib::APE::Tag *tag, const Song &from, const Song &to, const RgTags &rg, int rating)
{
bool changed=false;
@@ -614,6 +686,16 @@ static bool writeAPETags(TagLib::APE::Tag *tag, const Song &from, const Song &to
}
changed=true;
}
+
+ if (rating>-1) {
+ int old=-1;
+ readAPETags(tag, 0, 0, 0, &old);
+ if (old!=rating) {
+ tag->addValue("FMPS_RATING", convertFromCantataRating(rating));
+ changed=true;
+ }
+ }
+
return changed;
}
@@ -629,7 +711,7 @@ static TagLib::String readVorbisTag(TagLib::Ogg::XiphComment *tag, const char *f
return TagLib::String();
}
-static void readVorbisCommentTags(TagLib::Ogg::XiphComment *tag, Song *song, ReplayGain *rg, QImage *img, QString *lyrics)
+static void readVorbisCommentTags(TagLib::Ogg::XiphComment *tag, Song *song, ReplayGain *rg, QImage *img, QString *lyrics, int *rating)
{
if (song) {
TagLib::String str=readVorbisTag(tag, "ALBUMARTIST");
@@ -703,6 +785,10 @@ static void readVorbisCommentTags(TagLib::Ogg::XiphComment *tag, Song *song, Rep
*lyrics=tString2QString(str);
}
}
+
+ if (rating) {
+ *rating=convertToCantataRating(parseDoubleString(readVorbisTag(tag, "FMPS_RATING")));
+ }
}
#if TAGLIB_VERSION >= CANTATA_MAKE_VERSION(1,7,0)
@@ -731,7 +817,7 @@ static bool updateVorbisCommentTag(TagLib::Ogg::XiphComment *tag, const char *ta
return false;
}
-static bool writeVorbisCommentTags(TagLib::Ogg::XiphComment *tag, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img)
+static bool writeVorbisCommentTags(TagLib::Ogg::XiphComment *tag, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, int rating)
{
bool changed=false;
@@ -781,11 +867,21 @@ static bool writeVorbisCommentTags(TagLib::Ogg::XiphComment *tag, const Song &fr
#endif
changed=true;
}
+
+ if (rating>-1) {
+ int old=-1;
+ readVorbisCommentTags(tag, 0, 0, 0, 0, &old);
+ if (old!=rating) {
+ tag->addField("FMPS_RATING", convertFromCantataRating(rating));
+ changed=true;
+ }
+ }
+
return changed;
}
#ifdef TAGLIB_MP4_FOUND
-static void readMP4Tags(TagLib::MP4::Tag *tag, Song *song, ReplayGain *rg, QImage *img)
+static void readMP4Tags(TagLib::MP4::Tag *tag, Song *song, ReplayGain *rg, QImage *img, int *rating)
{
TagLib::MP4::ItemListMap &map = tag->itemListMap();
@@ -832,6 +928,11 @@ static void readMP4Tags(TagLib::MP4::Tag *tag, Song *song, ReplayGain *rg, QImag
}
}
}
+ if (rating) {
+ if (map.contains("----:com.apple.iTunes:FMPS_Rating")) {
+ *rating=convertToCantataRating(parseDoubleString(map["----:com.apple.iTunes:FMPS_Rating"].toStringList().front()));
+ }
+ }
}
static bool updateMP4Tag(TagLib::MP4::Tag *tag, const char *tagName, const QString &value)
@@ -850,7 +951,7 @@ static bool updateMP4Tag(TagLib::MP4::Tag *tag, const char *tagName, const QStri
return false;
}
-static bool writeMP4Tags(TagLib::MP4::Tag *tag, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img)
+static bool writeMP4Tags(TagLib::MP4::Tag *tag, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, int rating)
{
bool changed=false;
@@ -904,15 +1005,23 @@ static bool writeMP4Tags(TagLib::MP4::Tag *tag, const Song &from, const Song &to
map.insert("covr", coverItem);
}
+ if (rating>-1) {
+ int old=-1;
+ readMP4Tags(tag, 0, 0, 0, &old);
+ if (old!=rating) {
+ TagLib::MP4::ItemListMap &map = tag->itemListMap();
+ map["----:com.apple.iTunes:FMPS_Rating"] = TagLib::MP4::Item(TagLib::StringList(convertFromCantataRating(rating)));
+ changed=true;
+ }
+ }
+
return changed;
}
#endif
#ifdef TAGLIB_ASF_FOUND
-static void readASFTags(TagLib::ASF::Tag *tag, Song *song, ReplayGain *rg)
+static void readASFTags(TagLib::ASF::Tag *tag, Song *song, int *rating)
{
- Q_UNUSED(rg)
-
if (song) {
const TagLib::ASF::AttributeListMap &map = tag->attributeListMap();
@@ -934,6 +1043,13 @@ static void readASFTags(TagLib::ASF::Tag *tag, Song *song, ReplayGain *rg)
}
}
}
+ if (rating) {
+ const TagLib::ASF::AttributeListMap &map = tag->attributeListMap();
+
+ if (map.contains("FMPS/Rating") && !map["FMPS/Rating"].isEmpty()) {
+ *rating=convertToCantataRating(parseDoubleString(map["FMPS/Rating"].front().toString()));
+ }
+ }
}
static bool updateASFTag(TagLib::ASF::Tag *tag, const char *tagName, const QString &value)
@@ -952,7 +1068,7 @@ static bool updateASFTag(TagLib::ASF::Tag *tag, const char *tagName, const QStri
return false;
}
-static bool writeASFTags(TagLib::ASF::Tag *tag, const Song &from, const Song &to, const RgTags &rg)
+static bool writeASFTags(TagLib::ASF::Tag *tag, const Song &from, const Song &to, const RgTags &rg, int rating)
{
Q_UNUSED(rg)
bool changed=false;
@@ -980,11 +1096,21 @@ static bool writeASFTags(TagLib::ASF::Tag *tag, const Song &from, const Song &to
changed=true;
}
}
+
+ if (rating>-1) {
+ int old=-1;
+ readASFTags(tag, 0, &old);
+ if (old!=rating) {
+ tag->addAttribute("FMPS/Rating", TagLib::String(convertFromCantataRating(rating)));
+ changed=true;
+ }
+ }
+
return changed;
}
#endif
-static void readTags(const TagLib::FileRef fileref, Song *song, ReplayGain *rg, QImage *img, QString *lyrics)
+static void readTags(const TagLib::FileRef fileref, Song *song, ReplayGain *rg, QImage *img, QString *lyrics, int *rating)
{
TagLib::Tag *tag=fileref.tag();
if (song) {
@@ -998,40 +1124,40 @@ static void readTags(const TagLib::FileRef fileref, Song *song, ReplayGain *rg,
if (TagLib::MPEG::File *file = dynamic_cast< TagLib::MPEG::File * >(fileref.file())) {
if (file->ID3v2Tag() && !file->ID3v2Tag()->isEmpty()) {
- readID3v2Tags(file->ID3v2Tag(), song, rg, img, lyrics);
+ readID3v2Tags(file->ID3v2Tag(), song, rg, img, lyrics, rating);
} else if (file->APETag()) {
- readAPETags(file->APETag(), song, rg, img);
+ readAPETags(file->APETag(), song, rg, img, rating);
// } else if (file->ID3v1Tag()) {
// readID3v1Tags(fileref, song, rg);
}
} else if (TagLib::Ogg::Vorbis::File *file = dynamic_cast< TagLib::Ogg::Vorbis::File * >(fileref.file())) {
if (file->tag()) {
- readVorbisCommentTags(file->tag(), song, rg, img, lyrics);
+ readVorbisCommentTags(file->tag(), song, rg, img, lyrics, rating);
}
} else if (TagLib::Ogg::FLAC::File *file = dynamic_cast< TagLib::Ogg::FLAC::File * >(fileref.file())) {
if (file->tag()) {
- readVorbisCommentTags(file->tag(), song, rg, img, lyrics);
+ readVorbisCommentTags(file->tag(), song, rg, img, lyrics, rating);
}
} else if (TagLib::Ogg::Speex::File *file = dynamic_cast< TagLib::Ogg::Speex::File * >(fileref.file())) {
if (file->tag()) {
- readVorbisCommentTags(file->tag(), song, rg, img, lyrics);
+ readVorbisCommentTags(file->tag(), song, rg, img, lyrics, rating);
}
#ifdef TAGLIB_OPUS_FOUND
} else if (TagLib::Ogg::Opus::File *file = dynamic_cast< TagLib::Ogg::Opus::File * >(fileref.file())) {
if (file->tag()) {
- readVorbisCommentTags(file->tag(), song, rg, img, lyrics);
+ readVorbisCommentTags(file->tag(), song, rg, img, lyrics, rating);
}
#endif
} else if (TagLib::FLAC::File *file = dynamic_cast< TagLib::FLAC::File * >(fileref.file())) {
if (file->xiphComment()) {
- readVorbisCommentTags(file->xiphComment(), song, rg, img, lyrics);
+ readVorbisCommentTags(file->xiphComment(), song, rg, img, lyrics, rating);
#if TAGLIB_VERSION >= CANTATA_MAKE_VERSION(1,7,0)
if (img && img->isNull()) {
readFlacPicture(file->pictureList(), img);
}
#endif
} else if (file->ID3v2Tag() && !file->ID3v2Tag()->isEmpty()) {
- readID3v2Tags(file->ID3v2Tag(), song, rg, img, lyrics);
+ readID3v2Tags(file->ID3v2Tag(), song, rg, img, lyrics, rating);
// } else if (file->ID3v1Tag()) {
// readID3v1Tags(fileref, song, rg);
}
@@ -1039,39 +1165,39 @@ static void readTags(const TagLib::FileRef fileref, Song *song, ReplayGain *rg,
} else if (TagLib::MP4::File *file = dynamic_cast< TagLib::MP4::File * >(fileref.file())) {
TagLib::MP4::Tag *tag = dynamic_cast< TagLib::MP4::Tag * >(file->tag());
if (tag) {
- readMP4Tags(tag, song, rg, img);
+ readMP4Tags(tag, song, rg, img, rating);
}
#endif
} else if (TagLib::MPC::File *file = dynamic_cast< TagLib::MPC::File * >(fileref.file())) {
if (file->APETag()) {
- readAPETags(file->APETag(), song, rg, img);
+ readAPETags(file->APETag(), song, rg, img, rating);
// } else if (file->ID3v1Tag()) {
// readID3v1Tags(fileref, song, rg);
}
} else if (TagLib::RIFF::AIFF::File *file = dynamic_cast< TagLib::RIFF::AIFF::File * >(fileref.file())) {
if (file->tag()) {
- readID3v2Tags(file->tag(), song, rg, img, lyrics);
+ readID3v2Tags(file->tag(), song, rg, img, lyrics, rating);
}
} else if (TagLib::RIFF::WAV::File *file = dynamic_cast< TagLib::RIFF::WAV::File * >(fileref.file())) {
if (file->tag()) {
- readID3v2Tags(file->tag(), song, rg, img, lyrics);
+ readID3v2Tags(file->tag(), song, rg, img, lyrics, rating);
}
#ifdef TAGLIB_ASF_FOUND
} else if (TagLib::ASF::File *file = dynamic_cast< TagLib::ASF::File * >(fileref.file())) {
TagLib::ASF::Tag *tag = dynamic_cast< TagLib::ASF::Tag * >(file->tag());
if (tag) {
- readASFTags(tag, song, rg);
+ readASFTags(tag, song, rating);
}
#endif
} else if (TagLib::TrueAudio::File *file = dynamic_cast< TagLib::TrueAudio::File * >(fileref.file())) {
if (file->ID3v2Tag(false)) {
- readID3v2Tags(file->ID3v2Tag(false), song, rg, img, lyrics);
+ readID3v2Tags(file->ID3v2Tag(false), song, rg, img, lyrics, rating);
// } else if (file->ID3v1Tag()) {
// readID3v1Tags(fileref, song, rg);
}
} else if (TagLib::WavPack::File *file = dynamic_cast< TagLib::WavPack::File * >(fileref.file())) {
if (file->APETag()) {
- readAPETags(file->APETag(), song, rg, img);
+ readAPETags(file->APETag(), song, rg, img, rating);
// } else if (file->ID3v1Tag()) {
// readID3v1Tags(fileref, song, rg);
}
@@ -1081,7 +1207,7 @@ static void readTags(const TagLib::FileRef fileref, Song *song, ReplayGain *rg,
}
}
-static bool writeTags(const TagLib::FileRef fileref, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, bool saveComment)
+static bool writeTags(const TagLib::FileRef fileref, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, int rating, bool saveComment)
{
bool changed=false;
TagLib::Tag *tag=fileref.tag();
@@ -1117,81 +1243,81 @@ static bool writeTags(const TagLib::FileRef fileref, const Song &from, const Son
}
if (TagLib::MPEG::File *file = dynamic_cast< TagLib::MPEG::File * >(fileref.file())) {
if (file->ID3v2Tag() && !file->ID3v2Tag()->isEmpty()) {
- changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img, rating) || changed;
} else if (file->APETag()) {
- changed=writeAPETags(file->APETag(), from, to, rg) || changed;
+ changed=writeAPETags(file->APETag(), from, to, rg, rating) || changed;
// } else if (file->ID3v1Tag()) {
-// changed=writeID3v1Tags(fileref, from, to, rg, img) || changed;
+// changed=writeID3v1Tags(fileref, from, to, rg, img, rating) || changed;
} else if (file->ID3v2Tag(true)) {
- changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img, rating) || changed;
}
} else if (TagLib::Ogg::Vorbis::File *file = dynamic_cast< TagLib::Ogg::Vorbis::File * >(fileref.file())) {
if (file->tag()) {
- changed=writeVorbisCommentTags(file->tag(), from, to, rg, img) || changed;
+ changed=writeVorbisCommentTags(file->tag(), from, to, rg, img, rating) || changed;
}
} else if (TagLib::Ogg::FLAC::File *file = dynamic_cast< TagLib::Ogg::FLAC::File * >(fileref.file())) {
if (file->tag()) {
- changed=writeVorbisCommentTags(file->tag(), from, to, rg, img) || changed;
+ changed=writeVorbisCommentTags(file->tag(), from, to, rg, img, rating) || changed;
}
} else if (TagLib::Ogg::Speex::File *file = dynamic_cast< TagLib::Ogg::Speex::File * >(fileref.file())) {
if (file->tag()) {
- changed=writeVorbisCommentTags(file->tag(), from, to, rg, img) || changed;
+ changed=writeVorbisCommentTags(file->tag(), from, to, rg, img, rating) || changed;
}
#ifdef TAGLIB_OPUS_FOUND
} else if (TagLib::Ogg::Opus::File *file = dynamic_cast< TagLib::Ogg::Opus::File * >(fileref.file())) {
if (file->tag()) {
- changed=writeVorbisCommentTags(file->tag(), from, to, rg, img) || changed;
+ changed=writeVorbisCommentTags(file->tag(), from, to, rg, img, rating) || changed;
}
#endif
} else if (TagLib::FLAC::File *file = dynamic_cast< TagLib::FLAC::File * >(fileref.file())) {
if (file->xiphComment()) {
- changed=writeVorbisCommentTags(file->xiphComment(), from, to, rg, img) || changed;
+ changed=writeVorbisCommentTags(file->xiphComment(), from, to, rg, img, rating) || changed;
} else if (file->ID3v2Tag() && !file->ID3v2Tag()->isEmpty()) {
- changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img, rating) || changed;
// } else if (file->ID3v1Tag()) {
-// changed=writeID3v1Tags(fileref, from, to, rg, img) || changed;
+// changed=writeID3v1Tags(fileref, from, to, rg, img, rating) || changed;
} else if (file->ID3v2Tag(true)) {
- changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img, rating) || changed;
}
#ifdef TAGLIB_MP4_FOUND
} else if (TagLib::MP4::File *file = dynamic_cast< TagLib::MP4::File * >(fileref.file())) {
TagLib::MP4::Tag *tag = dynamic_cast<TagLib::MP4::Tag * >(file->tag());
if (tag) {
- changed=writeMP4Tags(tag, from, to, rg, img) || changed;
+ changed=writeMP4Tags(tag, from, to, rg, img, rating) || changed;
}
#endif
} else if (TagLib::MPC::File *file = dynamic_cast< TagLib::MPC::File * >(fileref.file())) {
if (file->APETag(true)) {
- changed=writeAPETags(file->APETag(), from, to, rg) || changed;
+ changed=writeAPETags(file->APETag(), from, to, rg, rating) || changed;
// } else if (file->ID3v1Tag()) {
-// changed=writeID3v1Tags(fileref, from, to, rg, img) || changed;
+// changed=writeID3v1Tags(fileref, from, to, rg, img, rating) || changed;
}
} else if (TagLib::RIFF::AIFF::File *file = dynamic_cast< TagLib::RIFF::AIFF::File * >(fileref.file())) {
if (file->tag()) {
- changed=writeID3v2Tags(file->tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->tag(), from, to, rg, img, rating) || changed;
}
} else if (TagLib::RIFF::WAV::File *file = dynamic_cast< TagLib::RIFF::WAV::File * >(fileref.file())) {
if (file->tag()) {
- changed=writeID3v2Tags(file->tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->tag(), from, to, rg, img, rating) || changed;
}
#ifdef TAGLIB_ASF_FOUND
} else if (TagLib::ASF::File *file = dynamic_cast< TagLib::ASF::File * >(fileref.file())) {
TagLib::ASF::Tag *tag = dynamic_cast< TagLib::ASF::Tag * >(file->tag());
if (tag) {
- changed=writeASFTags(tag, from, to, rg) || changed;
+ changed=writeASFTags(tag, from, to, rg, rating) || changed;
}
#endif
} else if (TagLib::TrueAudio::File *file = dynamic_cast< TagLib::TrueAudio::File * >(fileref.file())) {
if (file->ID3v2Tag(true)) {
- changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img) || changed;
+ changed=writeID3v2Tags(file->ID3v2Tag(), from, to, rg, img, rating) || changed;
// } else if (file->ID3v1Tag()) {
-// changed=writeID3v1Tags(fileref, from, to, rg, img) || changed;
+// changed=writeID3v1Tags(fileref, from, to, rg, img, rating) || changed;
}
} else if (TagLib::WavPack::File *file = dynamic_cast< TagLib::WavPack::File * >(fileref.file())) {
if (file->APETag(true)) {
- changed=writeAPETags(file->APETag(), from, to, rg) || changed;
+ changed=writeAPETags(file->APETag(), from, to, rg, rating) || changed;
// } else if (file->ID3v1Tag()) {
-// changed=writeID3v1Tags(fileref, from, to, rg, img) || changed;
+// changed=writeID3v1Tags(fileref, from, to, rg, img, rating) || changed;
}
}
@@ -1207,7 +1333,7 @@ Song read(const QString &fileName)
return song;
}
- readTags(fileref, &song, 0, 0, 0);
+ readTags(fileref, &song, 0, 0, 0, 0);
song.file=fileName;
song.time=fileref.audioProperties() ? fileref.audioProperties()->length() : 0;
return song;
@@ -1222,7 +1348,7 @@ QImage readImage(const QString &fileName)
return img;
}
- readTags(fileref, 0, 0, &img, 0);
+ readTags(fileref, 0, 0, &img, 0, 0);
return img;
}
@@ -1235,7 +1361,7 @@ QString readLyrics(const QString &fileName)
return lyrics;
}
- readTags(fileref, 0, 0, 0, &lyrics);
+ readTags(fileref, 0, 0, 0, &lyrics, 0);
return lyrics;
}
@@ -1246,9 +1372,9 @@ QString readComment(const QString &fileName)
return fileref.isNull() ? QString() : tString2QString(fileref.tag()->comment());
}
-static Update update(const TagLib::FileRef fileref, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, int id3Ver=-1, bool saveComment=false)
+static Update update(const TagLib::FileRef fileref, const Song &from, const Song &to, const RgTags &rg, const QByteArray &img, int id3Ver=-1, bool saveComment=false, int rating=-1)
{
- if (writeTags(fileref, from, to, rg, img, saveComment)) {
+ if (writeTags(fileref, from, to, rg, img, rating, saveComment)) {
TagLib::MPEG::File *mpeg=dynamic_cast<TagLib::MPEG::File *>(fileref.file());
if (mpeg) {
#ifdef TAGLIB_CAN_SAVE_ID3VER
@@ -1309,7 +1435,7 @@ ReplayGain readReplaygain(const QString &fileName)
}
ReplayGain rg;
- readTags(fileref, 0, &rg, 0, 0);
+ readTags(fileref, 0, &rg, 0, 0, 0);
return rg;
}
@@ -1360,6 +1486,24 @@ QString oggMimeType(const QString &fileName)
return QLatin1String("audio/ogg");
}
+int readRating(const QString &fileName)
+{
+ LOCK_MUTEX
+ int rating=-1;
+ TagLib::FileRef fileref = getFileRef(fileName);
+ if (!fileref.isNull()) {
+ readTags(fileref, 0, 0, 0, 0, &rating);
+ }
+ return rating;
+}
+
+Update updateRating(const QString &fileName, int rating)
+{
+ LOCK_MUTEX
+ TagLib::FileRef fileref = getFileRef(fileName);
+ return fileref.isNull() ? Update_Failed : update(fileref, Song(), Song(), RgTags(), QByteArray(), -1, false, rating);
+}
+
QMap<QString, QString> readAll(const QString &fileName)
{
QMap<QString, QString> allTags;
diff --git a/tags/tags.h b/tags/tags.h
index 97f2e97..96c858a 100644
--- a/tags/tags.h
+++ b/tags/tags.h
@@ -80,6 +80,8 @@ namespace Tags
inline Update updateReplaygain(const QString &fileName, const ReplayGain &rg) { return (Update)TagHelperIface::self()->updateReplaygain(fileName, rg); }
inline Update embedImage(const QString &fileName, const QByteArray &cover) { return (Update)TagHelperIface::self()->embedImage(fileName, cover); }
inline QString oggMimeType(const QString &fileName) { return TagHelperIface::self()->oggMimeType(fileName); }
+ inline int readRating(const QString &fileName) { return TagHelperIface::self()->readRating(fileName); }
+ inline Update updateRating(const QString &fileName, int rating) { return (Update)TagHelperIface::self()->updateRating(fileName, rating); }
inline QMap<QString, QString> readAll(const QString &fileName) { return TagHelperIface::self()->readAll(fileName); }
#else
inline void init() { }
@@ -94,6 +96,8 @@ namespace Tags
extern Update updateReplaygain(const QString &fileName, const ReplayGain &rg);
extern Update embedImage(const QString &fileName, const QByteArray &cover);
extern QString oggMimeType(const QString &fileName);
+ extern int readRating(const QString &fileName);
+ extern Update updateRating(const QString &fileName, int rating);
extern QMap<QString, QString> readAll(const QString &fileName);
#endif
extern QString id3Genre(int id);
diff --git a/tags/trackorganiser.cpp b/tags/trackorganiser.cpp
index a131cb2..e82b001 100644
--- a/tags/trackorganiser.cpp
+++ b/tags/trackorganiser.cpp
@@ -83,7 +83,7 @@ TrackOrganiser::TrackOrganiser(QWidget *parent)
removeAct->setEnabled(false);
files->addAction(removeAct);
connect(files, SIGNAL(itemSelectionChanged()), SLOT(controlRemoveAct()));
- connect(removeAct, SIGNAL(triggered(bool)), SLOT(removeItems()));
+ connect(removeAct, SIGNAL(triggered()), SLOT(removeItems()));
}
TrackOrganiser::~TrackOrganiser()
@@ -157,6 +157,7 @@ void TrackOrganiser::show(const QList<Song> &songs, const QString &udi, bool for
} else {
REMOVE(mopidyNote);
}
+ connect(ratingsNote, SIGNAL(leftClickedUrl()), SLOT(showRatingsMessage()));
Dialog::show();
enableButtonOk(false);
updateView();
@@ -276,7 +277,7 @@ void TrackOrganiser::renameFile()
if (autoSkip) {
skip=true;
} else {
- switch(MessageBox::questionYesNoCancel(this, i18n("Source file does not exist!<br/>%1", dest),
+ switch(MessageBox::questionYesNoCancel(this, i18n("Source file does not exist!")+QLatin1String("\n\n")+dest,
QString(), GuiItem(i18n("Skip")), GuiItem(i18n("Auto Skip")))) {
case MessageBox::Yes:
skip=true;
@@ -295,7 +296,7 @@ void TrackOrganiser::renameFile()
if (autoSkip) {
skip=true;
} else {
- switch(MessageBox::questionYesNoCancel(this, i18n("Destination file already exists!<br/>%1", dest),
+ switch(MessageBox::questionYesNoCancel(this, i18n("Destination file already exists!")+QLatin1String("\n\n")+dest,
QString(), GuiItem(i18n("Skip")), GuiItem(i18n("Auto Skip")))) {
case MessageBox::Yes:
skip=true;
@@ -317,7 +318,7 @@ void TrackOrganiser::renameFile()
if (autoSkip) {
skip=true;
} else {
- switch(MessageBox::questionYesNoCancel(this, i18n("Failed to create destination folder!<br/>%1", dir.absolutePath()),
+ switch(MessageBox::questionYesNoCancel(this, i18n("Failed to create destination folder!")+QLatin1String("\n\n")+dir.absolutePath(),
QString(), GuiItem(i18n("Skip")), GuiItem(i18n("Auto Skip")))) {
case MessageBox::Yes:
skip=true;
@@ -338,7 +339,7 @@ void TrackOrganiser::renameFile()
if (autoSkip) {
skip=true;
} else {
- switch(MessageBox::questionYesNoCancel(this, i18n("Failed to rename %1 to %2", source, dest),
+ switch(MessageBox::questionYesNoCancel(this, i18n("Failed to rename '%1' to '%2'", source, dest),
QString(), GuiItem(i18n("Skip")), GuiItem(i18n("Auto Skip")))) {
case MessageBox::Yes:
skip=true;
@@ -486,6 +487,13 @@ void TrackOrganiser::showMopidyMessage()
QLatin1String("Mopidy"));
}
+void TrackOrganiser::showRatingsMessage()
+{
+ MessageBox::information(this, i18n("Song ratings are not stored in the song files, but within MPD's 'sticker' database.\n\n"
+ "If you rename a file (or the folder it is within), then the rating associated with the song will be lost."),
+ QLatin1String("Ratings"));
+}
+
void TrackOrganiser::setFilenameScheme(const QString &text)
{
if (filenameScheme->text()!=text) {
@@ -558,4 +566,3 @@ Device * TrackOrganiser::getDevice(QWidget *p)
return dev;
}
#endif
-
diff --git a/tags/trackorganiser.h b/tags/trackorganiser.h
index ad1dd36..045be5b 100644
--- a/tags/trackorganiser.h
+++ b/tags/trackorganiser.h
@@ -60,6 +60,7 @@ private Q_SLOTS:
void controlRemoveAct();
void removeItems();
void showMopidyMessage();
+ void showRatingsMessage();
void setFilenameScheme(const QString &text);
private:
diff --git a/tags/trackorganiser.ui b/tags/trackorganiser.ui
index ea4203e..c156c54 100644
--- a/tags/trackorganiser.ui
+++ b/tags/trackorganiser.ui
@@ -89,7 +89,7 @@
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="ignoreThe">
<property name="text">
- <string>Ignore 'The' in artist names</string>
+ <string>Append 'The' to artist names</string>
</property>
</widget>
</item>
@@ -125,9 +125,16 @@
</layout>
</item>
<item>
- <widget class="UrlLabel" name="mopidyNote">
+ <widget class="UrlNoteLabel" name="mopidyNote">
<property name="text" stdset="0">
- <string><i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i></string>
+ <string>Connected to a Mopidy server (manual update required).</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="UrlNoteLabel" name="ratingsNote">
+ <property name="text" stdset="0">
+ <string>Ratings will be lost if a file is renamed.</string>
</property>
</widget>
</item>
@@ -148,9 +155,9 @@
<header>support/buddylabel.h</header>
</customwidget>
<customwidget>
- <class>UrlLabel</class>
+ <class>UrlNoteLabel</class>
<extends>QLabel</extends>
- <header>support/urllabel.h</header>
+ <header>widgets/notelabel.h</header>
</customwidget>
</customwidgets>
<tabstops>
diff --git a/ubuntu/backend/mpdbackend.cpp b/ubuntu/backend/mpdbackend.cpp
index 8f20e8c..5d45143 100644
--- a/ubuntu/backend/mpdbackend.cpp
+++ b/ubuntu/backend/mpdbackend.cpp
@@ -45,7 +45,6 @@ MPDBackend::MPDBackend(QObject *parent) : QObject(parent)
connect(MPDConnection::self(), SIGNAL(stateChanged(bool)), this, SLOT(onConnected(bool)));
- // TODO: These need to be confiurable via QML UI!
AlbumsModel::self()->setEnabled(true);
DirViewModel::self()->setEnabled(true);
PlaylistsModel::self()->setEnabled(true);
@@ -154,7 +153,7 @@ void MPDBackend::setAlbumViewSort(int s) {
void MPDBackend::setCoverFetch(bool s) {
Covers::self()->setFetchCovers(s);
}
-
+
void MPDBackend::playPause() {
switch (MPDStatus::self()->state()) {
case MPDState_Playing:
diff --git a/ubuntu/cantata-ubuntu.desktop b/ubuntu/cantata-ubuntu.desktop
index e30de54..9f38be6 100644
--- a/ubuntu/cantata-ubuntu.desktop
+++ b/ubuntu/cantata-ubuntu.desktop
@@ -2,11 +2,11 @@
Type=Application
Terminal=false
X-Ubuntu-Touch=true
-Name=Cantata
+Name=Cantata Reboot
Icon=cantata.png
GenericName=MPD Client
Exec=./cantata
Categories=Qt;KDE;AudioVideo;Player;
X-DBUS-StartupType=Unique
-X-DBUS-ServiceName=com.ubuntu.developer.nikwen.cantata-touch
+X-DBUS-ServiceName=com.ubuntu.developer.nikwen.cantata-touch-reboot
Keywords=Music;MPD;
diff --git a/ubuntu/cantata-ubuntu.json b/ubuntu/cantata-ubuntu.json
index 460f3be..87a8f8a 100644
--- a/ubuntu/cantata-ubuntu.json
+++ b/ubuntu/cantata-ubuntu.json
@@ -2,5 +2,5 @@
"policy_groups": [
"networking"
],
- "policy_version": 1.1
+ "policy_version": 1.2
}
diff --git a/ubuntu/main.cpp b/ubuntu/main.cpp
index 26a26a2..96d3961 100644
--- a/ubuntu/main.cpp
+++ b/ubuntu/main.cpp
@@ -61,6 +61,8 @@
//#endif
//#include "contextwidget.h"
+#include <iostream>
+
#include <QMutex>
#include <QMutexLocker>
#include <QTextStream>
@@ -176,7 +178,6 @@ static void installDebugMessageHandler()
int main(int argc, char *argv[])
{
- QCoreApplication::setOrganizationName(CANTATA_REV_URL);
QThread::currentThread()->setObjectName("GUI");
Utils::initRand();
@@ -188,13 +189,13 @@ int main(int argc, char *argv[])
MPDStats::self();
MPDConnection::self();
- MusicLibraryModel::self()->setUseArtistImages(true);
- MusicLibraryModel::self()->setUseAlbumImages(true);
-
MPDBackend backend;
-
QGuiApplication app(argc, argv);
+ app.setApplicationName(PACKAGE_NAME);
+ app.setOrganizationName(PACKAGE_NAME);
+ app.setOrganizationDomain(CANTATA_URL);
installDebugMessageHandler();
+ qDebug() << "Organization: " << app.organizationName();
qmlRegisterType<MPDBackend>("MPDBackend", 1, 0, "MPDBackend");
QQuickView view;
view.setMinimumSize(QSize(360, 540));
diff --git a/ubuntu/manifest.json b/ubuntu/manifest.json
index f2babc7..7c373ff 100644
--- a/ubuntu/manifest.json
+++ b/ubuntu/manifest.json
@@ -1,6 +1,6 @@
{
- "name": "com.ubuntu.developer.nikwen.cantata-touch",
- "framework": "ubuntu-sdk-14.04-qml-dev1",
+ "name": "com.ubuntu.developer.nikwen.cantata-touch-reboot",
+ "framework": "ubuntu-sdk-14.10-dev2",
"architecture": "armhf",
"hooks": {
"cantata": {
@@ -11,5 +11,5 @@
"title": "Cantata",
"description": "MPD Client for Ubuntu",
"maintainer": "Niklas Wenzel <nikwen.developer at gmail.com>",
- "version": "0.1.8"
+ "version": "0.2.0"
}
diff --git a/ubuntu/qml/cantata/AboutPage.qml b/ubuntu/qml/cantata/AboutPage.qml
index a76c59f..30f0e2c 100644
--- a/ubuntu/qml/cantata/AboutPage.qml
+++ b/ubuntu/qml/cantata/AboutPage.qml
@@ -24,15 +24,13 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Layouts 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Layouts 1.0
Page {
id: aboutPage
- anchors.fill: parent
title: i18n.tr("About")
- visible: false
Layouts {
id: aboutTabLayout
@@ -156,7 +154,7 @@ Page {
}
Label {
font.bold: true;
- text: "0.1.8"
+ text: "0.2.0"
}
}
Row {
@@ -181,14 +179,14 @@ Page {
anchors.fill: parent
clip: true
- contentHeight: aboutColumn2.height + 2 * aboutColumn2.marginTop + root.header.height //doubled marginTop to get the same margin at the bottom
+ contentHeight: aboutColumn2.height + 2 * aboutColumn2.marginTop //doubled marginTop to get the same margin at the bottom
Column {
id: aboutColumn2
spacing: units.gu(3)
width: parent.width
- property real marginTop: units.gu(6)
- y: marginTop + root.header.height
+ property real marginTop: units.gu(3)
+ y: marginTop
UbuntuShape {
property real maxWidth: units.gu(45)
@@ -241,7 +239,7 @@ Page {
}
Label {
font.bold: true;
- text: "0.1.8"
+ text: "0.2.0"
}
}
Row {
@@ -327,7 +325,7 @@ Page {
}
Label {
font.bold: true;
- text: "0.1.8"
+ text: "0.2.0"
}
}
Row {
diff --git a/ubuntu/qml/cantata/CurrentlyPlayingContent.qml b/ubuntu/qml/cantata/CurrentlyPlayingContent.qml
new file mode 100644
index 0000000..5505c4e
--- /dev/null
+++ b/ubuntu/qml/cantata/CurrentlyPlayingContent.qml
@@ -0,0 +1,162 @@
+/*************************************************************************
+** Cantata
+**
+** Copyright (c) 2014 Niklas Wenzel <nikwen.developer at gmail.com>
+ * Copyright (c) 2014 Craig Drummond <craig.p.drummond at gmail.com>
+**
+** $QT_BEGIN_LICENSE:GPL$
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+** Boston, MA 02110-1301, USA.
+**
+**
+** $QT_END_LICENSE$
+**
+*************************************************************************/
+
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Ubuntu.Components.Popups 1.0
+import Qt.labs.settings 1.0
+import 'qrc:/qml/cantata/components'
+
+Item {
+ id: currentlyPlayingContent
+
+ property int buttonSize: isPhone ? units.gu(6) : units.gu(7)
+
+ Column {
+ id: currentSongInfoColumn
+ anchors {
+ top: parent.top
+ topMargin: units.gu(1)
+ }
+ width: parent.width
+ spacing: units.gu(0.5)
+ visible: !(backend.playQueueEmpty || backend.isStopped) && backend.isConnected
+
+ Label {
+ id: titleLabel
+ width: parent.width
+ text: backend.currentSongMainText
+ wrapMode: Text.NoWrap
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignHCenter
+ fontSize: "large"
+ }
+
+ Label {
+ id: artistLabel
+ width: parent.width
+ text: backend.currentSongSubText
+ wrapMode: Text.NoWrap
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignHCenter
+ }
+ }
+
+ ControlButtonsRow {
+ id: buttonsRow
+ visible: currentSongInfoColumn.visible
+
+ anchors {
+ top: currentSongInfoColumn.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ }
+
+ Label {
+ id: playQueueLabel
+ text: i18n.tr("Play Queue:")
+ anchors {
+ top: buttonsRow.visible?buttonsRow.bottom:parent.top
+ left: parent.left
+ topMargin: units.gu(1)
+ leftMargin: units.gu(1)
+ }
+ }
+
+ Label {
+ id: playQueueStatusLabel
+ text: backend.playQueueStatus
+ anchors {
+ top: playQueueLabel.top
+ right: parent.right
+ rightMargin: units.gu(1)
+ }
+ visible: !backend.playQueueEmpty && backend.isConnected;
+ }
+
+ ListView {
+ id: playqueueListView
+ clip: true
+ model: playQueueProxyModel
+
+ anchors {
+ top: playQueueLabel.bottom
+ left: parent.left
+ right: parent.right
+ bottom: parent.bottom
+ }
+
+ Connections {
+ target: backend
+ onCurrentSongPlayqueuePositionChanged: {
+ playqueueListView.scrollToCurrent()
+ }
+ }
+
+ Component.onCompleted: { //TODO-r: Scroll to current position, but wrong numbers during swipe gesture
+ scrollToCurrent()
+ }
+
+ function scrollToCurrent() {
+ if (settingsBackend.scrollPlayQueue) {
+ console.log("pos: " + backend.getCurrentSongPlayqueuePosition())
+ playqueueListView.positionViewAtIndex(backend.getCurrentSongPlayqueuePosition(), ListView.Contain)
+ }
+ }
+
+ delegate: PlayQueueListItemDelegate {
+ id: delegate
+ text: model.mainText
+ subText: model.subText
+ timeText: model.time
+ iconSource: model.image
+ confirmRemoval: true
+ removable: true
+ currentTrack: index === backend.getCurrentSongPlayqueuePosition()
+ onItemRemoved: {
+ backend.removeFromPlayQueue(index)
+ }
+
+ onClicked: backend.startPlayingSongAtPos(index)
+
+ Connections {
+ target: backend
+ onCurrentSongPlayqueuePositionChanged: {
+ delegate.currentTrack = (index === backend.getCurrentSongPlayqueuePosition())
+ }
+ }
+ }
+ }
+
+ Label {
+ anchors.centerIn: playqueueListView
+ text: i18n.tr("No songs queued for playing")
+ fontSize: "large"
+ visible: backend.playQueueEmpty || !backend.isConnected
+ }
+}
diff --git a/ubuntu/qml/cantata/CurrentlyPlayingPage.qml b/ubuntu/qml/cantata/CurrentlyPlayingPage.qml
index ff7c623..0166a7e 100644
--- a/ubuntu/qml/cantata/CurrentlyPlayingPage.qml
+++ b/ubuntu/qml/cantata/CurrentlyPlayingPage.qml
@@ -25,23 +25,18 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
-import Ubuntu.Components.Popups 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Ubuntu.Components.Popups 1.0
import 'qrc:/qml/cantata/components'
Page {
id: currentlyPlayingPage
- visible: false
- width: parent.width
-
title: i18n.tr("Currently Playing")
- property int buttonSize: isPhone?units.gu(6):units.gu(7)
-
- property Popover actionsPopover;
+ property Dialog actionsDialog
Component {
id: dialog
@@ -61,387 +56,184 @@ Page {
}
}
}
-
- actions: [
+
+ head.actions: [ //TODO: Better solution when using just the content
Action {
- id: playPauseAction
- text: i18n.tr("Play/Pause")
- onTriggered: backend.playPause()
+ iconName: "edit-clear"
+ text: i18n.tr("Clear")
+ onTriggered: PopupUtils.open(dialog)
},
+
Action {
- id: goBackAction
- text: i18n.tr("Back")
- onTriggered: pageStack.pop()
+ iconName: "stock_music"
+ text: i18n.tr("Actions")
+ onTriggered: actionsDialog = PopupUtils.open(actionsDialogComponent)
}
]
- tools: ToolbarItems {
- pageStack: pageStack
-
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/clear.svg")
- text: i18n.tr("Clear")
- onTriggered: PopupUtils.open(dialog)
- }
- }
- ToolbarButton {
- id: actionActionToolbarButton
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/navigation-menu.svg")
- text: i18n.tr("Actions")
- onTriggered: actionsPopover = PopupUtils.open(actionsPopoverComponent, actionActionToolbarButton) //TODO: Fix anchor
- }
- visible: isPhone
- }
- }
-
Component {
- id: actionsPopoverComponent
-
- Popover {
- id: actionsPopover
-
- Column {
- id: containerLayout
- anchors {
- left: parent.left
- top: parent.top
- right: parent.right
- }
+ id: actionsDialogComponent
- ListItem.Header { text: i18n.tr("Playback") }
- ListItem.Standard {
- Label {
- anchors {
- left: parent.left
- leftMargin: units.gu(1)
- verticalCenter: parent.verticalCenter
- }
+ Dialog {
+ id: actionsDialog
- color: volumeHeader.color
+ title: i18n.tr("Playback Options")
- text: i18n.tr("Repeat")
- }
+ contents: [
+ Column {
+ id: containerLayout
- CheckBox {
- id: repeatCheckBox
- anchors {
- right: parent.right
- rightMargin: units.gu(1)
- verticalCenter: parent.verticalCenter
- }
+ ListItem.Header { text: i18n.tr("Playback") }
+ ListItem.Standard {
+ Label {
+ anchors {
+ left: parent.left
+ leftMargin: units.gu(1)
+ verticalCenter: parent.verticalCenter
+ }
- checked: backend.isRepeating
+ color: volumeHeader.color
- Connections {
- target: backend
- onIsRepeatingChanged: repeatCheckBox.checked = backend.isRepeating
+ text: i18n.tr("Repeat")
}
- onTriggered: {
- if (checked !== backend.isRepeating) {
- backend.setIsRepeating(checked)
+ CheckBox {
+ id: repeatCheckBox
+ anchors {
+ right: parent.right
+ rightMargin: units.gu(1)
+ verticalCenter: parent.verticalCenter
}
- }
- }
- }
- ListItem.Standard {
- Label {
- anchors {
- left: parent.left
- leftMargin: units.gu(1)
- verticalCenter: parent.verticalCenter
- }
-
- color: volumeHeader.color
-
- text: i18n.tr("Random")
- }
-
- CheckBox {
- id: randomCheckBox
- anchors {
- right: parent.right
- rightMargin: units.gu(1)
- verticalCenter: parent.verticalCenter
- }
- checked: backend.isRandomOrder
+ checked: backend.isRepeating
- Connections {
- target: backend
- onIsRandomOrderChanged: randomCheckBox.checked = backend.isRandomOrder
- }
+ Connections {
+ target: backend
+ onIsRepeatingChanged: repeatCheckBox.checked = backend.isRepeating
+ }
- onTriggered: {
- if (checked !== backend.isRandomOrder) {
- backend.setIsRandomOrder(checked)
+ onTriggered: {
+ if (checked !== backend.isRepeating) {
+ backend.setIsRepeating(checked)
+ }
}
}
}
- }
+ ListItem.Standard {
+ Label {
+ anchors {
+ left: parent.left
+ leftMargin: units.gu(1)
+ verticalCenter: parent.verticalCenter
+ }
- ListItem.Header {
- id: volumeHeader
- text: i18n.tr("Volume")
- }
+ color: volumeHeader.color
- ListItem.Standard {
- anchors {
- left: parent.left
- right: parent.right
- leftMargin: units.gu(1)
- rightMargin: units.gu(1)
- }
- Row {
- width: parent.width
- spacing: units.gu(1)
-
- Image {
- id: speakerImage
- height: units.gu(3)
- width: units.gu(3)
- smooth: true
- anchors.verticalCenter: parent.verticalCenter
- source: "../../icons/toolbar/speaker.svg"
+ text: i18n.tr("Random")
}
- Slider {
- id: volumeSlider2
- width: parent.width - speakerImage.width - parent.spacing
- live: false
- minimumValue: 0
- maximumValue: 100
- value: backend.mpdVolume
-
- onValueChanged: {
- backend.setMpdVolume(value)
+ CheckBox {
+ id: randomCheckBox
+ anchors {
+ right: parent.right
+ rightMargin: units.gu(1)
+ verticalCenter: parent.verticalCenter
}
+ checked: backend.isRandomOrder
+
Connections {
target: backend
- onMpdVolumeChanged: volumeSlider2.value = backend.mpdVolume
+ onIsRandomOrderChanged: randomCheckBox.checked = backend.isRandomOrder
}
- function formatValue(v) {
- return Math.round(v) + "%"
+ onTriggered: {
+ if (checked !== backend.isRandomOrder) {
+ backend.setIsRandomOrder(checked)
+ }
}
}
}
- }
- }
- }
- }
-
- Row {
- id: controlsRow
- height: Math.max(buttonsRow.height, currentSongInfoColumn.height, volumeRectangle.height)
- width: buttonsRow.width + currentSongInfoColumn.width + spacing
- spacing: units.gu(2)
- visible: !isPhone
-
- anchors {
- top: parent.top
- left: parent.left
- topMargin: units.gu(1)
- leftMargin: units.gu(1)
- }
-
- ControlButtonsRow {
- id: buttonsRow
- }
-
- Column {
- id: currentSongInfoColumn
- anchors.verticalCenter: parent.verticalCenter
- property int preferedWidth: Math.max(titleLabel.width, artistLabel.width)
- property int restWidth: currentlyPlayingPage.width - buttonsRow.width - buttonsRow.anchors.leftMargin - volumeColumn.anchors.leftMargin - volumeColumn.anchors.rightMargin
- width: (restWidth - volumeColumn.preferedWidth < preferedWidth)?Math.min(preferedWidth, restWidth/2):preferedWidth
-
- Label {
- id: titleLabel
- wrapMode: Text.NoWrap
- elide: Text.ElideRight
- text: backend.currentSongMainText
- fontSize: "large"
- }
-
- Label {
- id: artistLabel
- wrapMode: Text.NoWrap
- elide: Text.ElideRight
- text: backend.currentSongSubText
- }
- }
- }
- Rectangle {
- id: volumeRectangle
- color: root.backgroundColor
- anchors.verticalCenter: controlsRow.verticalCenter
- visible: !isPhone
-
- anchors {
- top: parent.top
- right: parent.right
- left: controlsRow.right
- topMargin: units.gu(1)
- leftMargin: Math.max(parent.width - controlsRow.width - buttonsRow.anchors.leftMargin - volumeColumn.preferedWidth, 0)
- }
+ ListItem.Header {
+ id: volumeHeader
+ text: i18n.tr("Volume")
+ }
- Column {
- id: volumeColumn
- property int preferedWidth: units.gu(30)
-
- anchors {
- top: parent.top
- right: parent.right
- left: parent.left
- leftMargin: controlsRow.spacing * 3 / 4
- rightMargin: units.gu(1)
- }
-
- Label {
- text: i18n.tr("Volume: ")
- }
-
- Slider {
- id: volumeSlider
- width: parent.width
- live: false
- minimumValue: 0
- maximumValue: 100
- value: backend.mpdVolume
-
- onValueChanged: {
- backend.setMpdVolume(value)
- }
+ ListItem.Standard {
+ anchors {
+ left: parent.left
+ right: parent.right
+ leftMargin: units.gu(1)
+ rightMargin: units.gu(1)
+ }
+ Row {
+ width: parent.width
+ spacing: units.gu(1)
+
+ Image {
+ id: speakerImage
+ height: units.gu(3)
+ width: units.gu(3)
+ smooth: true
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../../icons/toolbar/speaker.svg"
+ }
- Connections {
- target: backend
- onMpdVolumeChanged: volumeSlider.value = backend.mpdVolume
- }
+ Slider {
+ id: volumeSlider2
+ width: parent.width - speakerImage.width - parent.spacing
+ live: false
+ minimumValue: 0
+ maximumValue: 100
+ value: backend.mpdVolume
+
+ onValueChanged: {
+ backend.setMpdVolume(value)
+ }
+
+ Connections {
+ target: backend
+ onMpdVolumeChanged: volumeSlider2.value = backend.mpdVolume
+ }
+
+ function formatValue(v) {
+ return Math.round(v) + "%"
+ }
+ }
+ }
+ }
- function formatValue(v) {
- return Math.round(v) + "%"
- }
- }
- }
- }
+ Item {
+ id: dialogSpacer
- Column {
- id: currentSongInfoColumn2
- anchors {
- top: parent.top
- topMargin: units.gu(1)
- }
- width: parent.width
- spacing: units.gu(0.5)
- visible: isPhone && !(backend.playQueueEmpty || backend.isStopped) && backend.isConnected
-
- Label {
- id: titleLabel2
- width: parent.width
- text: backend.currentSongMainText
- wrapMode: Text.NoWrap
- elide: Text.ElideRight
- horizontalAlignment: Text.AlignHCenter
- fontSize: "large"
- }
+ height: units.gu(3)
+ width: parent.width
+ }
- Label {
- id: artistLabel2
- width: parent.width
- text: backend.currentSongSubText
- wrapMode: Text.NoWrap
- elide: Text.ElideRight
- horizontalAlignment: Text.AlignHCenter
- }
- }
+ Button {
+ text: i18n.tr("Ready")
+ color: UbuntuColors.orange
- ControlButtonsRow {
- id: buttonsRow2
- visible: currentSongInfoColumn2.visible
+ anchors {
+ left: parent.left
+ right: parent.right
+ leftMargin: units.gu(1)
+ rightMargin: units.gu(1)
+ }
- anchors {
- top: currentSongInfoColumn2.bottom
- horizontalCenter: parent.horizontalCenter
- }
- }
+ onClicked: PopupUtils.close(actionsDialog)
+ }
+ }
- Label {
- id: playQueueLabel
- text: i18n.tr("Play Queue:")
- anchors {
- top: isPhone?(buttonsRow2.visible?buttonsRow2.bottom:parent.top):controlsRow.bottom
- left: parent.left
- topMargin: (isPhone)?units.gu(1):units.gu(2)
- leftMargin: units.gu(1)
- }
- }
- Label {
- id: playQueueStatusLabel
- text: backend.playQueueStatus
- anchors {
- top: playQueueLabel.top
- right: parent.right
- rightMargin: units.gu(1)
+ ]
}
- visible: !backend.playQueueEmpty && backend.isConnected;
}
- ListView {
- id: playqueueListView
- clip: true
- model: playQueueProxyModel
-
- anchors {
- top: playQueueLabel.bottom
- left: parent.left
- right: parent.right
- bottom: parent.bottom
- }
-
- Connections {
- target: backend
- onCurrentSongPlayqueuePositionChanged: {
- var uiContents = settingsBackend.getUiContents()
- if (uiContents !== undefined && uiContents["playQueueScroll"]) {
- playqueueListView.positionViewAtIndex(backend.getCurrentSongPlayqueuePosition(), ListView.Contain)
- }
- }
- }
-
- delegate: PlayQueueListItemDelegate {
- id: delegate
- text: model.mainText
- subText: model.subText
- timeText: model.time
- iconSource: model.image
- confirmRemoval: true
- removable: true
- currentTrack: index === backend.getCurrentSongPlayqueuePosition()
- onItemRemoved: {
- backend.removeFromPlayQueue(index)
- }
-
- onClicked: backend.startPlayingSongAtPos(index)
-
- Connections {
- target: backend
- onCurrentSongPlayqueuePositionChanged: {
- delegate.currentTrack = (index === backend.getCurrentSongPlayqueuePosition())
- }
- }
- }
- }
+ CurrentlyPlayingContent {
+ id: currentlyPlayingContent
- Label {
- anchors.centerIn: playqueueListView
- text: i18n.tr("No songs queued for playing")
- fontSize: "large"
- visible: backend.playQueueEmpty || !backend.isConnected
+ anchors.fill: parent
}
}
diff --git a/ubuntu/qml/cantata/ListViewPage.qml b/ubuntu/qml/cantata/ListViewPage.qml
index 78bf210..2048735 100644
--- a/ubuntu/qml/cantata/ListViewPage.qml
+++ b/ubuntu/qml/cantata/ListViewPage.qml
@@ -25,29 +25,28 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Ubuntu.Layouts 1.0
import 'qrc:/qml/cantata/'
import 'qrc:/qml/cantata/components'
-Page {
+PageWithBottomEdge {
id: listViewPage
- anchors.fill: parent
-
property string modelName
property bool editable: false
property alias model: listView.model
property alias emptyViewVisible: emptyLabel.visible
- property alias emptyViewText: emptyLabel.text
+ property alias emptyViewText: emptyLabel.text //TODO: Fix position in tablet view
function add(index, replace, mainText) {
backend.add(modelName, index, replace)
- if (replace) {
- pageStack.push(currentlyPlayingPage)
+ if (replace && isPhone) {
+ pageStack.push(Qt.resolvedUrl("CurrentlyPlayingPage.qml"))
} else if (mainText !== undefined && mainText !== "") {
- notification.show(qsTr(i18n.tr("Added \"%1\"")).arg(mainText))
+ notification.show(qsTr(replace ? i18n.tr("Playing \"%1\"") : i18n.tr("Added \"%1\"")).arg(mainText))
}
}
@@ -57,96 +56,146 @@ Page {
function onDelegateClicked(index, text) {
var component = Qt.createComponent("SubListViewPage.qml")
- var page = component.createObject(parent, {"model": model, "title": text, "modelName": modelName})
- page.init([index])
- page.editable=editable
- pageStack.push(page)
+ if (component.status === Component.Ready) {
+ var page = component.createObject(parent, {"model": model, "title": text, "modelName": modelName})
+ page.init([index])
+ page.editable=editable
+ pageStack.push(page)
+ }
}
- actions: [
- Action {
- id: currentlyPlayingAction
- text: i18n.tr("Currently playing")
- onTriggered: pageStack.push(currentlyPlayingPage)
- },
+ head.actions: [
Action {
- id: settingsAction
+ iconName: "settings"
text: i18n.tr("Settings")
onTriggered: pageStack.push(settingsPage)
},
+
Action {
- id: aboutAction
+ iconName: "info"
text: i18n.tr("About")
onTriggered: pageStack.push(aboutPage)
}
]
- tools: ToolbarItems {
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/media-playback-start.svg")
- text: i18n.tr("Playing")
- onTriggered: pageStack.push(currentlyPlayingPage)
- }
- }
+ bottomEdgePageSource: Qt.resolvedUrl("CurrentlyPlayingPage.qml")
+ bottomEdgeTitle: i18n.tr("Currently Playing")
+ bottomEdgeEnabled: isPhone
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/settings.svg")
- text: i18n.tr("Settings")
- onTriggered: pageStack.push(settingsPage)
- }
- }
+ Connections {
+ target: settingsBackend
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/help.svg")
- text: i18n.tr("About")
- onTriggered: pageStack.push(aboutPage)
- }
+ onFetchCoversChanged: {
+ var saveModel = listView.model
+ listView.model = undefined
+ listView.model = saveModel
}
}
- ListView {
- id: listView
+ Layouts { //TODO: Same for SubListViewPage
+ id: layouts
+
+ height: parent.height //NOT "anchors.fill: parent" as otherwise the bottom edge gesture will continue behind the header
+ width: parent.width
+
anchors {
- fill: parent
+ top: parent.top
+ left: parent.left
}
- clip: true
- property bool hasProgression: false
+ layouts: [
+ ConditionalLayout {
+ id: tabletLayout
+ name: "tablet"
+ when: !isPhone //TODO: Fix width of isPhone
+
+ Item {
+ anchors.fill: parent
+
+ property real spacing: units.gu(2) //TODO: Visual divider?
+
+ ItemLayout {
+ item: "listView"
+
+ width: (parent.width - spacing) / 2
+ anchors {
+ top: parent.top
+ bottom: parent.bottom
+ left: parent.left
+ }
+ }
+
+ ItemLayout {
+ item: "emptyView"
+ anchors.centerIn: parent
+ }
+
+ CurrentlyPlayingContent { //TODO: Is it possible to use the same page for all ListViewPages?
+ id: currentlyPlayingPage
+
+ width: (parent.width - spacing) / 2
+ anchors {
+ top: parent.top
+ bottom: parent.bottom
+ right: parent.right
+ }
+ }
+ }
- delegate: ListItemDelegate {
- id: delegate
- text: model.mainText
- subText: model.subText
- iconSource: model.image
- confirmRemoval: true
- removable: listViewPage.editable
- progression: model.hasChildren;
- forceProgressionSpacing: listView.hasProgression
+ }
+
+ ]
+
+ ListView {
+ id: listView
+ Layouts.item: "listView"
+
+ height: parent.height
+ width: parent.width
+
+ anchors {
+ top: parent.top
+ left: parent.left
+ }
- firstButtonImageSource: "../../icons/toolbar/media-playback-start-light.svg"
- secondButtonImageSource: "../../icons/toolbar/add.svg"
+ clip: true
- onFirstImageButtonClicked: listViewPage.add(index, true, model.mainText)
- onSecondImageButtonClicked: listViewPage.add(index, false, model.mainText)
+ property bool hasProgression: false
- onClicked: model.hasChildren ? listViewPage.onDelegateClicked(index, model.titleText) : "";
- onItemRemoved: listViewPage.remove(index)
+ delegate: ListItemDelegate {
+ id: delegate
+ text: model.mainText
+ subText: model.subText
+ iconSource: model.image
+ confirmRemoval: true
+ removable: listViewPage.editable
- onProgressionChanged: {
- if (progression) {
- listView.hasProgression = true
+ progression: model.hasChildren;
+ forceProgressionSpacing: listView.hasProgression
+
+ firstButtonIconName: "media-playback-start"
+ secondButtonIconName: "add"
+
+ onFirstImageButtonClicked: listViewPage.add(index, true, model.mainText)
+ onSecondImageButtonClicked: listViewPage.add(index, false, model.mainText)
+
+ onClicked: model.hasChildren ? listViewPage.onDelegateClicked(index, model.titleText) : "";
+ onItemRemoved: listViewPage.remove(index)
+
+ onProgressionChanged: {
+ if (progression) {
+ listView.hasProgression = true
+ }
}
}
}
- }
- Label {
- id: emptyLabel
- anchors.centerIn: parent
- fontSize: "large"
+ Label {
+ id: emptyLabel
+ Layouts.item: "emptyView"
+ anchors.centerIn: listView
+ fontSize: "large"
+ }
}
}
diff --git a/ubuntu/qml/cantata/SubListViewPage.qml b/ubuntu/qml/cantata/SubListViewPage.qml
index 248e0cc..3e5d018 100644
--- a/ubuntu/qml/cantata/SubListViewPage.qml
+++ b/ubuntu/qml/cantata/SubListViewPage.qml
@@ -25,18 +25,15 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
import 'qrc:/qml/cantata/'
import 'qrc:/qml/cantata/components'
-Page {
+PageWithBottomEdge {
id: subListViewPage
- anchors.fill: parent
- visible: false
-
property bool editable: false
property variant rows
property string modelName
@@ -53,10 +50,19 @@ Page {
function add(index, replace, mainText) {
backend.add(modelName, hierarchy(index), replace)
- if (replace) {
- pageStack.push(currentlyPlayingPage)
+ if (replace && isPhone) {
+ pageStack.push(Qt.resolvedUrl("CurrentlyPlayingPage.qml"))
+ } else if (mainText !== undefined && mainText !== "") {
+ notification.show(qsTr(replace ? i18n.tr("Playing \"%1\"") : i18n.tr("Added \"%1\"")).arg(mainText))
+ }
+ }
+
+ function addAll(replace) {
+ backend.add(modelName, rows, replace)
+ if (replace && isPhone) {
+ pageStack.push(Qt.resolvedUrl("CurrentlyPlayingPage.qml"))
} else if (mainText !== undefined && mainText !== "") {
- notification.show(qsTr(i18n.tr("Added \"%1\"")).arg(mainText))
+ notification.show(qsTr(replace ? i18n.tr("Playing all \"%1\"") : i18n.tr("Added all \"%1\"")).arg(title))
}
}
@@ -66,7 +72,7 @@ Page {
function onDelegateClicked(index, text) {
var component = Qt.createComponent("SubListViewPage.qml")
- if (component.status == Component.Ready) {
+ if (component.status === Component.Ready) {
var page = component.createObject(parent, {"model": model, "title": text, "modelName": modelName})
page.init(hierarchy(index))
pageStack.push(page)
@@ -81,55 +87,49 @@ Page {
}
}
- actions: [
+ head.actions: [
Action {
- id: currentlyPlayingAction
- text: i18n.tr("Currently playing")
- onTriggered: pageStack.push(currentlyPlayingPage)
+ iconName: "media-playback-start"
+ text: i18n.tr("Play all")
+ onTriggered: addAll(true)
},
Action {
- id: settingsAction
+ iconName: "add"
+ text: i18n.tr("Add all")
+ onTriggered: addAll(false)
+ },
+ Action {
+ iconName: "settings"
text: i18n.tr("Settings")
onTriggered: pageStack.push(settingsPage)
},
+
Action {
- id: aboutAction
+ iconName: "info"
text: i18n.tr("About")
onTriggered: pageStack.push(aboutPage)
}
]
- tools: ToolbarItems {
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/media-playback-start.svg")
- text: i18n.tr("Playing")
- onTriggered: pageStack.push(currentlyPlayingPage)
- }
- }
+ bottomEdgePageSource: Qt.resolvedUrl("CurrentlyPlayingPage.qml")
+ bottomEdgeTitle: i18n.tr("Currently Playing")
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/settings.svg")
- text: i18n.tr("Settings")
- onTriggered: pageStack.push(settingsPage)
- }
- }
+ Connections {
+ target: settingsBackend
- ToolbarButton {
- action: Action {
- iconSource: Qt.resolvedUrl("../../icons/toolbar/help.svg")
- text: i18n.tr("About")
- onTriggered: pageStack.push(aboutPage)
- }
+ onFetchCoversChanged: {
+ var saveModel = listView.model
+ listView.model = undefined
+ listView.model = saveModel
}
}
ListView {
id: subListView
- anchors {
- fill: parent
- }
+
+ height: parent.height //NOT "anchors.fill: parent" as otherwise the bottom edge gesture will continue behind the header
+ width: parent.width
+
clip: true
property bool hasProgression: false
@@ -146,9 +146,9 @@ Page {
iconSource: model.image
confirmRemoval: true
removable: subListViewPage.editable
-
- firstButtonImageSource: "../../icons/toolbar/media-playback-start-light.svg"
- secondButtonImageSource: "../../icons/toolbar/add.svg"
+
+ firstButtonIconName: "media-playback-start"
+ secondButtonIconName: "add"
progression: model.hasChildren
forceProgressionSpacing: subListView.hasProgression
diff --git a/ubuntu/qml/cantata/backend/SettingsBackend.qml b/ubuntu/qml/cantata/backend/SettingsBackend.qml
index 9ef01f3..4f64fd3 100644
--- a/ubuntu/qml/cantata/backend/SettingsBackend.qml
+++ b/ubuntu/qml/cantata/backend/SettingsBackend.qml
@@ -25,66 +25,32 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import U1db 1.0 as U1db
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Qt.labs.settings 1.0
import 'qrc:/qml/cantata/'
Item {
- U1db.Database {
- id: db
- path: appDir + "/u1db"
- }
-
- U1db.Document {
- id: uiDocument
- database: db
- docId: 'ui'
- create: true
- defaults: {
- "playQueueScroll": true,
- "coverFetch": true,
- "artistYear": true,
- "hiddenViews": ["folders"],
- "albumSort": "album-artist"
- }
-
- onContentsChanged: {
- if (contents != undefined) {
- console.log("Update cover fetch")
- backend.setCoverFetch(contents["coverFetch"]) //TODO: Untick fetch checkbox => Delete saved images => Tick fetch checkbox => First few album covers are not loaded
- }
- }
- }
+ readonly property alias uiSettings: uiSettings
- U1db.Document {
- id: connectionDocument
- database: db
- docId: 'connections'
- create: true
- defaults: {
- "host": "",
- "port": "",
- "password": "",
- "musicfolder": ""
- }
- }
+ readonly property alias scrollPlayQueue: uiSettings.scrollPlayQueue
+ readonly property alias fetchCovers: uiSettings.fetchCovers
- function getUiContents() {
- return uiDocument.contents
+ Component.onCompleted: {
+ backend.setCoverFetch(fetchCovers)
}
- function setUiContents(contents) {
- uiDocument.contents = contents
+ onFetchCoversChanged: {
+ backend.setCoverFetch(fetchCovers)
}
- function getConnectionContents() {
- return connectionDocument.contents
- }
+ Settings {
+ id: uiSettings
- function setConnectionContents(contents) {
- connectionDocument.contents = contents
+ category: "ui"
+ property bool scrollPlayQueue: true
+ property bool fetchCovers: true
}
}
diff --git a/ubuntu/qml/cantata/components/ControlButtonsRow.qml b/ubuntu/qml/cantata/components/ControlButtonsRow.qml
index 64050e9..7cd9f69 100644
--- a/ubuntu/qml/cantata/components/ControlButtonsRow.qml
+++ b/ubuntu/qml/cantata/components/ControlButtonsRow.qml
@@ -24,8 +24,8 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
import 'qrc:/qml/cantata'
Row {
@@ -35,8 +35,8 @@ Row {
Image {
id: previousSongButton
- width: currentlyPlayingPage.buttonSize
- height: currentlyPlayingPage.buttonSize
+ width: currentlyPlayingContent.buttonSize
+ height: currentlyPlayingContent.buttonSize
smooth: true
source: "../../../icons/toolbar/media-skip-backward.svg"
@@ -51,8 +51,8 @@ Row {
Image {
id: playPauseButton
- width: currentlyPlayingPage.buttonSize
- height: currentlyPlayingPage.buttonSize
+ width: currentlyPlayingContent.buttonSize
+ height: currentlyPlayingContent.buttonSize
smooth: true
source: backend.isPlaying?"../../../icons/toolbar/media-playback-pause.svg":"../../../icons/toolbar/media-playback-start.svg"
@@ -67,8 +67,8 @@ Row {
Image {
id: nextSongButton
- width: currentlyPlayingPage.buttonSize
- height: currentlyPlayingPage.buttonSize
+ width: currentlyPlayingContent.buttonSize
+ height: currentlyPlayingContent.buttonSize
smooth: true
source: "../../../icons/toolbar/media-skip-forward.svg"
diff --git a/ubuntu/qml/cantata/components/LabelVisual.qml b/ubuntu/qml/cantata/components/LabelVisual.qml
index ba24ea5..4bb0b86 100644
--- a/ubuntu/qml/cantata/components/LabelVisual.qml
+++ b/ubuntu/qml/cantata/components/LabelVisual.qml
@@ -14,8 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
// internal helper class for text inside the list items.
Label {
diff --git a/ubuntu/qml/cantata/components/ListItemDelegate.qml b/ubuntu/qml/cantata/components/ListItemDelegate.qml
index 0e1960b..b9b3932 100644
--- a/ubuntu/qml/cantata/components/ListItemDelegate.qml
+++ b/ubuntu/qml/cantata/components/ListItemDelegate.qml
@@ -15,9 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0
Empty {
id: listItemDelegate
@@ -32,15 +32,17 @@ Empty {
property bool progression: false
property bool forceProgressionSpacing: false
- property alias firstButtonImageSource: firstImage.source
- property alias secondButtonImageSource: secondImage.source
+ property alias firstButtonIconName: firstIcon.name
+ property alias secondButtonIconName: secondIcon.name
+ property alias firstButtonIconSource: firstIcon.source
+ property alias secondButtonIconSource: secondIcon.source
signal firstImageButtonClicked()
signal secondImageButtonClicked()
- property bool firstButtonShown: firstImage.source != ""
- property bool secondButtonShown: secondImage.source != ""
- property bool iconShown: iconImage.source != ""
+ property bool firstButtonShown: firstIcon.source !== "" || firstIcon.name !== ""
+ property bool secondButtonShown: secondIcon.source !== "" || secondIcon.name !== ""
+ property bool iconShown: iconImage.source !== ""
UbuntuShape {
id: iconShape
@@ -57,7 +59,6 @@ Empty {
id: iconImage
smooth: true
opacity: 0.9
- visible: iconShown
anchors.fill: parent
}
}
@@ -66,7 +67,7 @@ Empty {
id: middleVisuals
anchors {
left: iconShown?iconShape.right:parent.left
- right: secondButtonShown?secondImage.left:(firstButtonShown?firstImage.left:((listItemDelegate.progression || listItemDelegate.forceProgressionSpacing)?progressionImage.right:parent.right))
+ right: secondButtonShown?secondIcon.left:(firstButtonShown?firstIcon.left:((listItemDelegate.progression || listItemDelegate.forceProgressionSpacing)?progressionImage.right:parent.right))
leftMargin: units.gu(iconShown?1:2)
rightMargin: units.gu(firstButtonShown?1:2)
verticalCenter: parent.verticalCenter
@@ -95,16 +96,14 @@ Empty {
}
}
- Image {
- id: secondImage
+ Icon { //TODO: Revert changes regarding icons!
+ id: secondIcon
width: units.gu(3)
height: units.gu(3)
- smooth: true
- opacity: 0.9
visible: secondButtonShown
anchors {
- right: firstImage.left
+ right: firstIcon.left
rightMargin: units.gu(1)
verticalCenter: parent.verticalCenter
}
@@ -117,12 +116,10 @@ Empty {
}
}
- Image {
- id: firstImage
+ Icon {
+ id: firstIcon
width: units.gu(3)
height: units.gu(3)
- smooth: true
- opacity: 0.9
visible: firstButtonShown
anchors {
diff --git a/ubuntu/qml/cantata/components/Notification.qml b/ubuntu/qml/cantata/components/Notification.qml
index 7d6c516..64bc72c 100644
--- a/ubuntu/qml/cantata/components/Notification.qml
+++ b/ubuntu/qml/cantata/components/Notification.qml
@@ -1,5 +1,5 @@
-import QtQuick 2.0
-import Ubuntu.Components 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
Rectangle {
id: notification
diff --git a/ubuntu/qml/cantata/components/PageWithBottomEdge.qml b/ubuntu/qml/cantata/components/PageWithBottomEdge.qml
new file mode 100644
index 0000000..bd204d4
--- /dev/null
+++ b/ubuntu/qml/cantata/components/PageWithBottomEdge.qml
@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2014 Canonical, Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ Example:
+
+ MainView {
+ objectName: "mainView"
+
+ applicationName: "com.ubuntu.developer.boiko.bottomedge"
+
+ width: units.gu(100)
+ height: units.gu(75)
+
+ Component {
+ id: pageComponent
+
+ PageWithBottomEdge {
+ id: mainPage
+ title: i18n.tr("Main Page")
+
+ Rectangle {
+ anchors.fill: parent
+ color: "white"
+ }
+
+ bottomEdgePageComponent: Page {
+ title: "Contents"
+ anchors.fill: parent
+ //anchors.topMargin: contentsPage.flickable.contentY
+
+ ListView {
+ anchors.fill: parent
+ model: 50
+ delegate: ListItems.Standard {
+ text: "One Content Item: " + index
+ }
+ }
+ }
+ bottomEdgeTitle: i18n.tr("Bottom edge action")
+ }
+ }
+
+ PageStack {
+ id: stack
+ Component.onCompleted: stack.push(pageComponent)
+ }
+ }
+
+*/
+
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+
+Page {
+ id: page
+
+ property alias bottomEdgePageComponent: edgeLoader.sourceComponent
+ property alias bottomEdgePageSource: edgeLoader.source
+ property alias bottomEdgeTitle: tipLabel.text
+ property alias bottomEdgeEnabled: bottomEdge.visible
+ property int bottomEdgeExpandThreshold: page.height * 0.2
+ property int bottomEdgeExposedArea: bottomEdge.state !== "expanded" ? (page.height - bottomEdge.y - bottomEdge.tipHeight) : _areaWhenExpanded
+ property bool reloadBottomEdgePage: true
+
+ readonly property alias bottomEdgePage: edgeLoader.item
+ readonly property bool isReady: ((bottomEdge.y === 0) && bottomEdgePageLoaded && edgeLoader.item.active)
+ readonly property bool isCollapsed: (bottomEdge.y === page.height)
+ readonly property bool bottomEdgePageLoaded: (edgeLoader.status == Loader.Ready)
+
+ property bool _showEdgePageWhenReady: false
+ property int _areaWhenExpanded: 0
+
+ signal bottomEdgeReleased()
+ signal bottomEdgeDismissed()
+
+
+ function showBottomEdgePage(source, properties)
+ {
+ edgeLoader.setSource(source, properties)
+ _showEdgePageWhenReady = true
+ }
+
+ function setBottomEdgePage(source, properties)
+ {
+ edgeLoader.setSource(source, properties)
+ }
+
+ function _pushPage()
+ {
+ if (edgeLoader.status === Loader.Ready) {
+ edgeLoader.item.active = true
+ page.pageStack.push(edgeLoader.item)
+ if (edgeLoader.item.flickable) {
+ edgeLoader.item.flickable.contentY = -page.header.height
+ edgeLoader.item.flickable.returnToBounds()
+ }
+ if (edgeLoader.item.ready)
+ edgeLoader.item.ready()
+ }
+ }
+
+
+ Component.onCompleted: {
+ // avoid a binding on the expanded height value
+ var expandedHeight = height;
+ _areaWhenExpanded = expandedHeight;
+ }
+
+ onActiveChanged: {
+ if (active) {
+ bottomEdge.state = "collapsed"
+ }
+ }
+
+ onBottomEdgePageLoadedChanged: {
+ if (_showEdgePageWhenReady && bottomEdgePageLoaded) {
+ bottomEdge.state = "expanded"
+ _showEdgePageWhenReady = false
+ }
+ }
+
+ Rectangle {
+ id: bgVisual
+
+ color: "black"
+ anchors.fill: page
+ opacity: 0.7 * ((page.height - bottomEdge.y) / page.height)
+ z: 1
+ }
+
+ Timer {
+ id: hideIndicator
+
+ interval: 3000
+ running: true
+ repeat: false
+ onTriggered: tip.hiden = true
+ }
+
+ Rectangle {
+ id: bottomEdge
+ objectName: "bottomEdge"
+
+ readonly property int tipHeight: units.gu(3)
+ readonly property int pageStartY: 0
+
+ z: 1
+ color: Theme.palette.normal.background
+ parent: page
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+ height: page.height
+ y: height
+
+ UbuntuShape {
+ id: tip
+ objectName: "bottomEdgeTip"
+
+ property bool hiden: false
+
+ readonly property double visiblePosition: (page.height - bottomEdge.y) < units.gu(1) ? -bottomEdge.tipHeight + (page.height - bottomEdge.y) : 0
+ readonly property double invisiblePosition: (page.height - bottomEdge.y) < units.gu(1) ? -units.gu(1) : 0
+
+ z: -1
+ anchors.horizontalCenter: parent.horizontalCenter
+ y: hiden ? invisiblePosition : visiblePosition
+
+ width: tipLabel.paintedWidth + units.gu(6)
+ height: bottomEdge.tipHeight + units.gu(1)
+ color: Theme.palette.normal.overlay
+ Label {
+ id: tipLabel
+
+ anchors {
+ top: parent.top
+ left: parent.left
+ right: parent.right
+ }
+ height: bottomEdge.tipHeight
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ opacity: tip.hiden ? 0.0 : 1.0
+ Behavior on opacity {
+ UbuntuNumberAnimation {
+ duration: UbuntuAnimation.SnapDuration
+ }
+ }
+ }
+ Behavior on y {
+ UbuntuNumberAnimation {
+ duration: UbuntuAnimation.SnapDuration
+ }
+ }
+ }
+
+ Rectangle {
+ id: shadow
+
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+ height: units.gu(1)
+ y: -height
+ z: -2
+ opacity: 0.0
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "transparent" }
+ GradientStop { position: 1.0; color: Qt.rgba(0, 0, 0, 0.2) }
+ }
+ }
+
+ MouseArea {
+ id: mouseArea
+
+ preventStealing: true
+ drag {
+ axis: Drag.YAxis
+ target: bottomEdge
+ minimumY: bottomEdge.pageStartY
+ maximumY: page.height
+ threshold: 100
+ }
+
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+ height: bottomEdge.tipHeight
+ y: -height
+
+ onReleased: {
+ page.bottomEdgeReleased()
+ if (bottomEdge.y < (page.height - bottomEdgeExpandThreshold - bottomEdge.tipHeight)) {
+ bottomEdge.state = "expanded"
+ } else {
+ bottomEdge.state = "collapsed"
+ bottomEdge.y = bottomEdge.height
+ }
+ }
+
+ onClicked: {
+ tip.hiden = false
+ hideIndicator.restart()
+ }
+ }
+
+ state: "collapsed"
+ states: [
+ State {
+ name: "collapsed"
+ PropertyChanges {
+ target: bottomEdge
+ y: bottomEdge.height
+ }
+ PropertyChanges {
+ target: tip
+ opacity: 1.0
+ }
+ PropertyChanges {
+ target: hideIndicator
+ running: true
+ }
+ },
+ State {
+ name: "expanded"
+ PropertyChanges {
+ target: bottomEdge
+ y: bottomEdge.pageStartY
+ }
+ PropertyChanges {
+ target: hideIndicator
+ running: false
+ }
+ },
+ State {
+ name: "floating"
+ when: mouseArea.drag.active
+ PropertyChanges {
+ target: shadow
+ opacity: 1.0
+ }
+ PropertyChanges {
+ target: hideIndicator
+ running: false
+ }
+ PropertyChanges {
+ target: tip
+ hiden: false
+ }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "expanded"
+ SequentialAnimation {
+ UbuntuNumberAnimation {
+ target: bottomEdge
+ property: "y"
+ duration: UbuntuAnimation.SlowDuration
+ }
+ ScriptAction {
+ script: page._pushPage()
+ }
+ }
+ },
+ Transition {
+ from: "expanded"
+ to: "collapsed"
+ SequentialAnimation {
+ ScriptAction {
+ script: {
+ Qt.inputMethod.hide()
+ edgeLoader.item.parent = edgeLoader
+ edgeLoader.item.anchors.fill = edgeLoader
+ edgeLoader.item.active = false
+ }
+ }
+ UbuntuNumberAnimation {
+ target: bottomEdge
+ property: "y"
+ duration: UbuntuAnimation.SlowDuration
+ }
+ ScriptAction {
+ script: {
+ // destroy current bottom page
+ if (page.reloadBottomEdgePage) {
+ edgeLoader.active = false
+ }
+
+ // notify
+ page.bottomEdgeDismissed()
+
+ edgeLoader.active = true
+ tip.hiden = false
+ hideIndicator.restart()
+ }
+ }
+ }
+ },
+ Transition {
+ from: "floating"
+ to: "collapsed"
+ UbuntuNumberAnimation {
+ target: bottomEdge
+ property: "opacity"
+ }
+ }
+ ]
+
+ Item {
+ anchors.fill: parent
+ clip: true
+
+ Loader {
+ id: edgeLoader
+
+ z: 1
+ active: true
+ asynchronous: true
+ anchors.fill: parent
+
+ //WORKAROUND: The SDK move the page contents down to allocate space for the header we need to avoid that during the page dragging
+ Binding {
+ target: edgeLoader.status === Loader.Ready ? edgeLoader : null
+ property: "anchors.topMargin"
+ value: edgeLoader.item && edgeLoader.item.flickable ? edgeLoader.item.flickable.contentY : 0
+ when: !page.isReady
+ }
+
+ onLoaded: {
+ if (page.isReady && edgeLoader.item.active !== true) {
+ page._pushPage()
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml b/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml
index bab40cb..afba84e 100644
--- a/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml
+++ b/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml
@@ -15,9 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0
Empty {
id: playQueueListItemDelegate
@@ -46,7 +46,6 @@ Empty {
id: iconImage
smooth: true
opacity: 0.9
- visible: iconShown
anchors.fill: parent
}
}
@@ -58,7 +57,7 @@ Empty {
smooth: true
opacity: 0.9
visible: currentTrack
- source: "../../../icons/toolbar/media-playback-start-light.svg"
+ source: "../../../icons/toolbar/media-playback-start.svg"
anchors {
left: parent.left
diff --git a/ubuntu/qml/cantata/main.qml b/ubuntu/qml/cantata/main.qml
index 4a8a5ec..9e88bc9 100644
--- a/ubuntu/qml/cantata/main.qml
+++ b/ubuntu/qml/cantata/main.qml
@@ -25,23 +25,22 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Ubuntu.Layouts 1.0
import 'qrc:/qml/cantata/'
import 'qrc:/qml/cantata/backend'
import 'qrc:/qml/cantata/components'
import 'qrc:/qml/cantata/settings'
-
+
MainView {
id: root
- objectName: "mainView"
- applicationName: "com.ubuntu.developer.nikwen.cantata-touch"
-
- width: units.gu(100)
- height: units.gu(75)
- backgroundColor: "#395996"
+ applicationName: "com.ubuntu.developer.nikwen.cantata-touch-reboot"
+
+// width: units.gu(100)
+// height: units.gu(75)
useDeprecatedToolbar: false //displays the new header
@@ -49,7 +48,6 @@ MainView {
PageStack {
id: pageStack
- anchors.fill: parent
Component.onCompleted: {
push(tabs)
@@ -58,13 +56,13 @@ MainView {
Tabs {
id: tabs
- anchors.fill: parent
+ visible: false
Tab {
id: artistTab
title: i18n.tr("Artists")
- page: ListViewPage {
+ page: ListViewPage { //TODO: Vanishes quite often
id: artistPage
model: artistsProxyModel
modelName: "artists"
@@ -114,29 +112,31 @@ MainView {
}
}
- CurrentlyPlayingPage {
- id: currentlyPlayingPage
- }
-
SettingsPage {
id: settingsPage
+ visible: false
}
HostSettingsPage {
id: hostSettingsPage
+ visible: false
}
UiSettingsPage {
id: uiSettingsPage
+ visible: false
}
- PlaybackSettingsPage {
- id: playbackSettingsPage
- }
+// PlaybackSettingsPage {
+// id: playbackSettingsPage
+// visible: false
+// }
AboutPage {
id: aboutPage
+ visible: false
}
+
}
Notification {
diff --git a/ubuntu/qml/cantata/settings/HostSettingsContent.qml b/ubuntu/qml/cantata/settings/HostSettingsContent.qml
index 62270e9..056233f 100644
--- a/ubuntu/qml/cantata/settings/HostSettingsContent.qml
+++ b/ubuntu/qml/cantata/settings/HostSettingsContent.qml
@@ -25,165 +25,166 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
-import U1db 1.0 as U1db
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Qt.labs.settings 1.0
-Column {
- id: connectionDetailsColumn
- spacing: units.gu(1)
+Flickable {
+ clip: true
+
+ contentHeight: connectionDetailsColumn.height
property color textFieldColor: "#c2c2b8" //#f3f3e7 * 0.8 (#f3f3e7: label color)
- Component.onCompleted: {
- fillWithU1dbData()
- tryToConnect()
- }
+ Column {
+ id: connectionDetailsColumn
+ spacing: units.gu(1)
- function fillWithU1dbData() {
- var contents = settingsBackend.getConnectionContents()
- if (typeof contents != "undefined") {
- hostTextField.text = contents["host"]
- portTextField.text = contents["port"]
- passwordTextField.text = contents["password"]
- musicfolderTextField.text = contents["musicfolder"]
- }
- }
+ width: Math.round(parent.width / 1.3)
+ height: parent.parent.height - root.header.height
+ y: units.gu(2)
+ anchors.horizontalCenter: parent.horizontalCenter
- function saveDataToU1db() {
- var contents = {};
- contents["host"] = hostTextField.text
- contents["port"] = portTextField.text
- contents["password"] = passwordTextField.text
- contents["musicfolder"] = musicfolderTextField.text
- settingsBackend.setConnectionContents(contents)
- }
+ Component.onCompleted: {
+ tryToConnect()
+ }
- Label {
- id: hostLabel
- text: i18n.tr("Host:")
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ Settings { //Here as it is not needed anywhere else (easier here)
+ id: settings
+ category: "connection"
+ property alias host: hostTextField.text
+ property alias port: portTextField.text
+ property alias password: passwordTextField.text
+ property alias musicfolder: musicfolderTextField.text
}
- fontSize: "medium"
- }
+ Label {
+ id: hostLabel
+ text: i18n.tr("Host:")
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
- TextField {
- id: hostTextField
- color: textFieldColor
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ fontSize: "medium"
}
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: portTextField
- }
+ TextField {
+ id: hostTextField
+ color: textFieldColor
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
- Label {
- id: portLabel
- text: i18n.tr("Port:")
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ KeyNavigation.priority: KeyNavigation.BeforeItem
+ KeyNavigation.tab: portTextField
}
- fontSize: "medium"
- }
+ Label {
+ id: portLabel
+ text: i18n.tr("Port:")
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
- TextField {
- id: portTextField
- color: textFieldColor
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ fontSize: "medium"
}
- validator: IntValidator { bottom: 1; top: 65535 }
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: passwordTextField
- KeyNavigation.backtab: hostTextField
+ TextField {
+ id: portTextField
+ color: textFieldColor
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
+ validator: IntValidator { bottom: 1; top: 65535 }
- placeholderText: "6600"
- }
+ KeyNavigation.priority: KeyNavigation.BeforeItem
+ KeyNavigation.tab: passwordTextField
+ KeyNavigation.backtab: hostTextField
- Label {
- id: passwordLabel
- text: i18n.tr("Password:")
+ placeholderText: "6600"
+ }
- fontSize: "medium"
- }
+ Label {
+ id: passwordLabel
+ text: i18n.tr("Password:")
- TextField {
- id: passwordTextField
- color: textFieldColor
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ fontSize: "medium"
}
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: musicfolderTextField
- KeyNavigation.backtab: portTextField
+ TextField {
+ id: passwordTextField
+ color: textFieldColor
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
- echoMode: TextInput.Password
+ KeyNavigation.priority: KeyNavigation.BeforeItem
+ KeyNavigation.tab: musicfolderTextField
+ KeyNavigation.backtab: portTextField
- onAccepted: { //Invoked when the enter key is pressed
- connectButton.clicked()
- }
- }
+ echoMode: TextInput.Password
- Label {
- id: musicfolderLabel
- text: i18n.tr("Music Folder:")
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ onAccepted: { //Invoked when the enter key is pressed
+ connectButton.clicked()
+ }
}
- fontSize: "medium"
- }
+ Label {
+ id: musicfolderLabel
+ text: i18n.tr("Music Folder:")
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
- TextField {
- id: musicfolderTextField
- color: textFieldColor
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ fontSize: "medium"
}
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.backtab: passwordTextField
- placeholderText: "http://HOST/music" // TODO: Update this when hostTextField changes?
- }
+ TextField {
+ id: musicfolderTextField
+ color: textFieldColor
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
+
+ KeyNavigation.priority: KeyNavigation.BeforeItem
+ KeyNavigation.backtab: passwordTextField
+ placeholderText: "http://HOST/music" // TODO: Update this when hostTextField changes?
+ }
- Item {
- height: units.gu(0.5)
- anchors {
- left: connectionDetailsColumn.left;
- right: connectionDetailsColumn.right;
+ Item {
+ height: units.gu(0.5)
+ anchors {
+ left: connectionDetailsColumn.left;
+ right: connectionDetailsColumn.right;
+ }
}
- }
- Button {
- id: connectButton
- text: i18n.tr("Connect")
+ Button {
+ id: connectButton
+ text: i18n.tr("Connect")
+ color: UbuntuColors.orange
- width: parent.width
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
+ width: parent.width
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ }
- onClicked: {
- tryToConnect()
- connectionDetailsColumn.saveDataToU1db()
+ onClicked: {
+ console.log("Org: " + Qt.application.organization)
+ connectionDetailsColumn.tryToConnect()
+ }
}
- }
- function tryToConnect() {
- backend.connectTo(hostTextField.text, (portTextField.text === "")?6600:portTextField.text, passwordTextField.text, musicfolderTextField.text)
+ function tryToConnect() {
+ backend.connectTo(settings.host, (settings.port === "")?6600:settings.port, settings.password, settings.musicfolder)
+ }
}
}
diff --git a/ubuntu/qml/cantata/settings/HostSettingsPage.qml b/ubuntu/qml/cantata/settings/HostSettingsPage.qml
index 37f1926..2a28505 100644
--- a/ubuntu/qml/cantata/settings/HostSettingsPage.qml
+++ b/ubuntu/qml/cantata/settings/HostSettingsPage.qml
@@ -25,31 +25,19 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
import U1db 1.0 as U1db
Page {
id: hostSettingsPage
- visible: false
width: parent.width
title: qsTr(i18n.tr("Connection %1")).arg(backend.isConnected?i18n.tr("(Connected)"):i18n.tr("(Not Connected)"))
- actions: [
- Action {
- id: backAction
- text: i18n.tr("Back")
- onTriggered: pageStack.pop()
- }
- ]
-
HostSettingsContent {
- width: Math.round(parent.width / 1.3)
- height: parent.height - root.header.height
- y: units.gu(2)
- anchors.horizontalCenter: parent.horizontalCenter
+ anchors.fill: parent
}
}
diff --git a/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml b/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml
index dc941df..cbf24d8 100644
--- a/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml
+++ b/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml
@@ -25,10 +25,9 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
-
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
Column {
id: column
spacing: units.gu(1)
diff --git a/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml b/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml
index 1e78f3c..560c82d 100644
--- a/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml
+++ b/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml
@@ -25,14 +25,13 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
Page {
id: playbackSettingsPage
- visible: false
anchors {
fill: parent
topMargin: root.header.height + units.gu(2)
@@ -41,14 +40,6 @@ Page {
property color textFieldColor: "#c2c2b8" //#f3f3e7 * 0.8 (#f3f3e7: label color)
- actions: [
- Action {
- id: backAction
- text: i18n.tr("Back")
- onTriggered: pageStack.pop()
- }
- ]
-
PlaybackSettingsContent {
anchors {
top: parent.top
diff --git a/ubuntu/qml/cantata/settings/SettingsCategories.qml b/ubuntu/qml/cantata/settings/SettingsCategories.qml
index 4c332ce..bda7ac0 100644
--- a/ubuntu/qml/cantata/settings/SettingsCategories.qml
+++ b/ubuntu/qml/cantata/settings/SettingsCategories.qml
@@ -25,16 +25,16 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
Flickable {
contentHeight: column.height
clip: true
property bool push: true
- property int selectedIndex: 0
+ property int selectedIndex: -1 //-1 indicates that the menu will be shown on phones, while the first entry is shown on tablets
Column {
id: column
@@ -45,7 +45,7 @@ Flickable {
id: connectionSettingsLabel
text: i18n.tr("Connection")
progression: true
- selected: !root.isPhone && selectedIndex === 0
+ selected: tabletSettings && (selectedIndex === 0 || selectedIndex === -1)
onClicked: {
selectedIndex = 0
if (push) pageStack.push(hostSettingsPage)
@@ -56,23 +56,25 @@ Flickable {
id: uiSettingsLabel
text: i18n.tr("UI")
progression: true
- selected: !root.isPhone && selectedIndex === 1
+ selected: tabletSettings && selectedIndex === 1
onClicked: {
selectedIndex = 1
if (push) pageStack.push(uiSettingsPage)
}
}
- ListItem.Standard {
- id: playbackSettingsLabel
- enabled: false
- text: i18n.tr("Playback")
- progression: true
- selected: !root.isPhone && selectedIndex === 2
- onClicked: {
- selectedIndex = 2
- if (push) pageStack.push(playbackSettingsPage)
- }
- }
+ //Let's hide those as long as they aren't implemented.
+
+// ListItem.Standard {
+// id: playbackSettingsLabel
+// enabled: false
+// text: i18n.tr("Playback")
+// progression: true
+// selected: tabletSettings && selectedIndex === 2
+// onClicked: {
+// selectedIndex = 2
+// if (push) pageStack.push(playbackSettingsPage)
+// }
+// }
}
}
diff --git a/ubuntu/qml/cantata/settings/SettingsPage.qml b/ubuntu/qml/cantata/settings/SettingsPage.qml
index fc9dd3d..8a54dac 100644
--- a/ubuntu/qml/cantata/settings/SettingsPage.qml
+++ b/ubuntu/qml/cantata/settings/SettingsPage.qml
@@ -25,146 +25,71 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
-import Ubuntu.Layouts 0.1
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Ubuntu.Layouts 1.0
Page {
id: settingsPage
+ objectName: "settingsPage"
- visible: false
- anchors.fill: parent
- title: qsTr(i18n.tr("Settings %1")).arg((layouts.currentLayout === "tablet" && tabletCategories !== undefined && tabletCategories.selectedIndex === 0) ? backend.isConnected?i18n.tr("(Connected)"):i18n.tr("(Not Connected)") : "")
+ title: qsTr(i18n.tr("Settings %1")).arg((layouts.currentLayout === "tablet" && (categories.selectedIndex === 0 || categories.selectedIndex === -1)) ? backend.isConnected?i18n.tr("(Connected)"):i18n.tr("(Not Connected)") : "")
- property HostSettingsPage hostSettings: hostSettingsPage
- property SettingsCategories tabletCategories
-
- actions: [
- Action {
- id: backAction
- text: i18n.tr("Back")
- onTriggered: pageStack.pop()
- }
- ]
+ property bool tabletSettings: layouts.width > units.gu(80)
Layouts {
id: layouts
- anchors {
- top: parent.top
- bottom: parent.bottom
- left: parent.left
- right: parent.right
- topMargin: root.header.height
- }
+ anchors.fill: parent
layouts: [
ConditionalLayout {
- name: "phone"
- when: layouts.width <= units.gu(80)
-
- Rectangle {
- anchors.fill: parent
- color: "transparent"
-
- SettingsCategories {
- id: phoneCategories
- push: true
- anchors.fill: parent
- }
-
- UbuntuShape {
- id: notReadyShape
- height: notReadyLabel.height + 2 * notReadyLabel.anchors.margins
- anchors {
- left: parent.left
- right: parent.right
- bottom: parent.bottom
- margins: units.gu(2)
- }
-
- color: "#88CCCCCC"
-
- Label {
- id: notReadyLabel
- text: i18n.tr("Not all functionality on this page has been implemented yet, partly due to constraints of the Ubuntu SDK.")
- wrapMode: Text.Wrap
- anchors {
- top: parent.top
- right: parent.right
- left: parent.left
- margins: units.gu(1)
- }
- }
- }
- }
- },
- ConditionalLayout {
name: "tablet"
- when: layouts.width > units.gu(80)
+ when: tabletSettings
Item {
anchors.fill: parent
- SettingsCategories {
+ ItemLayout {
id: tabletCategories
- push: false
+ item: "categories"
width: Math.min(parent.width / 3, units.gu(50))
- onSelectedIndexChanged: {
- switch (selectedIndex) {
- case 0:
- stack.setSource("HostSettingsContent.qml")
- break
- case 1:
- stack.setSource("UiSettingsContent.qml")
- break
- case 2:
- stack.setSource("PlaybackSettingsContent.qml")
- break
- }
- }
-
anchors {
top: parent.top
left: parent.left
bottom: parent.bottom
}
- Component.onCompleted: {
- settingsPage.tabletCategories = this
+ Connections {
+ target: categories
+
+ onSelectedIndexChanged: stack.updateSource()
}
}
- UbuntuShape {
- id: notReadyShape2
- height: notReadyLabel2.height + 2 * notReadyLabel2.anchors.margins
- anchors {
- left: parent.left
- right: tabletCategories.right
- bottom: parent.bottom
- margins: units.gu(1)
+ Loader {
+ id: stack
+
+ Component.onCompleted: {
+ updateSource()
}
- color: "#88CCCCCC"
-
- Label {
- id: notReadyLabel2
- text: i18n.tr("Not all functionality on this page has been implemented yet, partly due to constraints of the Ubuntu SDK.")
- wrapMode: Text.Wrap
- anchors {
- top: parent.top
- right: parent.right
- left: parent.left
- margins: units.gu(1)
+ function updateSource() {
+ switch (categories.selectedIndex) {
+ case -1:
+ case 0:
+ setSource("HostSettingsContent.qml")
+ break
+ case 1:
+ setSource("UiSettingsContent.qml")
+ break
+// case 2:
+// setSource("PlaybackSettingsContent.qml")
+// break
}
}
- }
-
- Loader {
- id: stack
- source: "HostSettingsContent.qml"
anchors {
top: parent.top
@@ -181,8 +106,57 @@ Page {
}
]
- }
+ onCurrentLayoutChanged: {
+ if (pageStack === null || pageStack.currentPage === null) { //TODO: Find out why this happens (quick fix here)
+ return
+ }
+ if (pageStack.currentPage.objectName === settingsPage.objectName) {
+ if (categories.selectedIndex >= 0 && currentLayout === "") {
+ switch (categories.selectedIndex) {
+ case 0:
+ pageStack.push(hostSettingsPage)
+ break
+ case 1:
+ pageStack.push(uiSettingsPage)
+ break
+// case 2:
+// pageStack.setSource(playbackSettingsPage)
+// break
+ }
+ }
+ } else if (tabletSettings) { //Not in foreground and tabletSettings
+ while (pageStack.currentPage.objectName !== settingsPage.objectName) {
+ pageStack.pop()
+ }
+ if (pageStack.currentPage.objectName === hostSettingsPage.objectName) {
+ categories.selectedIndex = 0
+ } else if (pageStack.currentPage.objectName === uiSettingsPage.objectName) {
+ categories.selectedIndex = 1
+// } else if (pageStack.currentPage.objectName === playbackSettingsPage.objectName) {
+// categories.selectedIndex = 2
+ }
+ }
+ }
+
+ Connections {
+ target: pageStack
+
+ onCurrentPageChanged: {
+ if (!tabletSettings && pageStack.currentPage.objectName === settingsPage.objectName) {
+ categories.selectedIndex = -1
+ }
+ }
+ }
+
+ SettingsCategories {
+ id: categories
+ Layouts.item: "categories"
+ push: layouts.currentLayout === ""
+ anchors.fill: parent
+ }
+
+ }
}
diff --git a/ubuntu/qml/cantata/settings/UiSettingsContent.qml b/ubuntu/qml/cantata/settings/UiSettingsContent.qml
index 27d27bb..7eac6e0 100644
--- a/ubuntu/qml/cantata/settings/UiSettingsContent.qml
+++ b/ubuntu/qml/cantata/settings/UiSettingsContent.qml
@@ -2,6 +2,7 @@
** Cantata
**
** Copyright (c) 2014 Craig Drummond <craig.p.drummond at gmail.com>
+** Copyright (c) 2014 Niklas Wenzel <nikwen.developer at gmail.com>
**
** $QT_BEGIN_LICENSE:GPL$
** This program is free software; you can redistribute it and/or modify
@@ -24,247 +25,59 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
-import U1db 1.0 as U1db
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
+import Qt.labs.settings 1.0
Flickable {
clip: true
contentHeight: column.height
- Column { //TODO: Find better solution for spacing
+ Column {
id: column
- spacing: units.gu(1)
height: childrenRect.height
- anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
- Component.onCompleted: {
- fillWithU1dbData()
- }
-
- function arrayContains(container, element) {
- for (var i = 0; i < container.length; i++) {
- if (container[i] === element) {
- return true
- }
- }
- return false
- }
-
- function fillWithU1dbData() {
- // TODO: albumSort
- var contents = settingsBackend.getUiContents()
- if (contents !== undefined) {
- artistYear.checked = contents["artistYear"]
- coverFetch.checked = contents["coverFetch"]
- playQueueScroll.checked = contents["playQueueScroll"]
- albumsView.checked = !arrayContains(contents["hiddenViews"], "albums")
- foldersView.checked = !arrayContains(contents["hiddenViews"], "folders")
- playlistsView.checked = !arrayContains(contents["hiddenViews"], "playlists")
- } else {
- artistYear.checked = false
- coverFetch.checked = true
- playQueueScroll.checked = true
- albumsView.checked = true
- foldersView.checked = true
- playlistsView.checked = true
- }
- }
-
- function saveDataToU1db() {
- var contents = {};
- contents["artistYear"] = artistYear.checked
- contents["coverFetch"] = coverFetch.checked
- contents["playQueueScroll"] = playQueueScroll.checked
- contents["hiddenViews"] = []
- if (!albumsView.checked) contents["hiddenViews"].push("albums")
- if (!foldersView.checked) contents["hiddenViews"].push("folders")
- if (!playlistsView.checked) contents["hiddenViews"].push("playlists")
- // TODO: albumSort
- settingsBackend.setUiContents(contents)
- }
-
- Item {
- id: topSpacer
- height: units.gu(2)
+ ListItem.Standard {
+ text: i18n.tr("Scroll play queue to active track")
width: parent.width
- }
- UbuntuShape {
- id: notReadyShape
- width: parent.width
- height: isPhone?notReadyLabel.height + 2 * notReadyLabel.anchors.margins:0
-
- color: "#88CCCCCC"
+ control: CheckBox {
+ id: scrollPlayQueueCheckBox
+ checked: true
+ KeyNavigation.priority: KeyNavigation.BeforeItem
+ KeyNavigation.tab: fetchCoversCheckBox
- visible: isPhone
+ Component.onCompleted: {
+ scrollPlayQueueCheckBox.checked = settingsBackend.scrollPlayQueue
+ }
- Label {
- id: notReadyLabel
- text: i18n.tr("Not all functionality on this page has been implemented yet, partly due to constraints of the Ubuntu SDK.")
- wrapMode: Text.Wrap
- anchors {
- top: parent.top
- right: parent.right
- left: parent.left
- margins: units.gu(1)
+ onCheckedChanged: {
+ settingsBackend.uiSettings.scrollPlayQueue = scrollPlayQueueCheckBox.checked
}
}
}
- Item {
- id: notReadySpacer
- height: units.gu(2)
+ ListItem.Standard {
+ text: i18n.tr("Fetch missing covers from last.fm")
width: parent.width
- }
- Grid {
- anchors.horizontalCenter: parent.horizontalCenter
- columns: 2
- rowSpacing: units.gu(2)
- columnSpacing: parent.width/10
- height: childrenRect.height
- //width: aboutTabLayout.width*0.25
- //height: iconTabletItem.height*0.75
+ control: CheckBox {
+ id: fetchCoversCheckBox
+ checked: true
+ KeyNavigation.priority: KeyNavigation.BeforeItem
+ KeyNavigation.backtab: scrollPlayQueueCheckBox
- Component.onCompleted: {
- for (var i = 0; i < children.length; i++) {
- if (children[i].checked !== undefined) { //Is CheckBox
- children[i].onCheckedChanged.connect(column.saveDataToU1db)
- }
+ Component.onCompleted: {
+ fetchCoversCheckBox.checked = settingsBackend.fetchCovers
}
- }
- Component.onDestruction: {
- for (var i = 0; i < children.length; i++) {
- if (children[i].checked !== undefined) { //Is CheckBox
- children[i].onCheckedChanged.disconnect(column.saveDataToU1db) //Needed when created dynamically
- }
+ onCheckedChanged: {
+ settingsBackend.uiSettings.fetchCovers = fetchCoversCheckBox.checked
}
}
-
- Label {
- id: playQueueScrollLabel
- text: i18n.tr("Scroll play queue to active track:")
- fontSize: "medium"
- verticalAlignment: Text.AlignVCenter
- height: playQueueScroll.height
- }
-
- CheckBox {
- id: playQueueScroll
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: coverFetch
- }
-
- Label {
- id: coverFetchLabel
- text: i18n.tr("Fetch missing covers from last.fm:")
- fontSize: "medium"
- verticalAlignment: Text.AlignVCenter
- height: coverFetch.height
- }
-
- CheckBox {
- id: coverFetch
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: artistYear
- KeyNavigation.backtab: playQueueScroll
- }
-
- Label {
- id: artistYearLabel
- text: i18n.tr("Sort albums in artists view by year:")
- fontSize: "medium"
- verticalAlignment: Text.AlignVCenter
- height: artistYear.height
- }
-
- CheckBox {
- id: artistYear
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: albumsView
- KeyNavigation.backtab: coverFetch
- enabled: false
- }
-
- Label {
- id: albumsViewLabel
- text: i18n.tr("Show albums view:")
- fontSize: "medium"
- verticalAlignment: Text.AlignVCenter
- height: albumsView.height
- }
-
- CheckBox {
- id: albumsView
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: foldersView
- KeyNavigation.backtab: coverFetch
- enabled: false
- }
-
- Label {
- id: foldersViewLabel
- text: i18n.tr("Show folders view:")
- fontSize: "medium"
- verticalAlignment: Text.AlignVCenter
- height: foldersView.height
- }
-
- CheckBox {
- id: foldersView
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: albumSort
- KeyNavigation.backtab: playlistsView
- enabled: false
- }
-
- Label {
- id: playlistsViewLabel
- text: i18n.tr("Show playlists view:")
- fontSize: "medium"
- verticalAlignment: Text.AlignVCenter
- height: playlistsView.height
- }
-
- CheckBox {
- id: playlistsView
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.tab: albumSort
- KeyNavigation.backtab: foldersView
- enabled: false
- }
- }
-
- Item {
- id: spacer
- height: units.gu(1)
- width: parent.width
- }
-
- OptionSelector {
- id: albumSort
- text: i18n.tr("Sort albums in albums view by:")
- model: [ i18n.tr("Album, Artist, Year"),
- i18n.tr("Album, Year, Artist"),
- i18n.tr("Artist, Album, Year"),
- i18n.tr("Artist, Year, Album"),
- i18n.tr("Year, Album, Artist"),
- i18n.tr("Year, Artist, Album") ]
- width: parent.width
- selectedIndex: 0
- KeyNavigation.priority: KeyNavigation.BeforeItem
- KeyNavigation.backtab: foldersView
- enabled: false
- }
-
- Item {
- id: bottomSpacer
- height: units.gu(2)
- width: parent.width
}
}
}
diff --git a/ubuntu/qml/cantata/settings/UiSettingsPage.qml b/ubuntu/qml/cantata/settings/UiSettingsPage.qml
index b1f5767..771b139 100644
--- a/ubuntu/qml/cantata/settings/UiSettingsPage.qml
+++ b/ubuntu/qml/cantata/settings/UiSettingsPage.qml
@@ -25,26 +25,17 @@
**
*************************************************************************/
-import QtQuick 2.0
-import Ubuntu.Components 0.1
-import Ubuntu.Components.ListItems 0.1 as ListItem
+import QtQuick 2.2
+import Ubuntu.Components 1.1
+import Ubuntu.Components.ListItems 1.0 as ListItem
import U1db 1.0 as U1db
Page {
id: uiSettingsPage
- visible: false
anchors.fill: parent
title: i18n.tr("UI Settings")
- actions: [
- Action {
- id: backAction
- text: i18n.tr("Back")
- onTriggered: pageStack.pop()
- }
- ]
-
UiSettingsContent {
anchors.fill: parent
}
diff --git a/ubuntu/ubuntu.qrc b/ubuntu/ubuntu.qrc
index ca01910..dd6d7b8 100644
--- a/ubuntu/ubuntu.qrc
+++ b/ubuntu/ubuntu.qrc
@@ -36,5 +36,7 @@
<file>qml/cantata/settings/UiSettingsPage.qml</file>
<file>qml/cantata/components/Notification.qml</file>
<file>qml/cantata/backend/SettingsBackend.qml</file>
+ <file>qml/cantata/components/PageWithBottomEdge.qml</file>
+ <file>qml/cantata/CurrentlyPlayingContent.qml</file>
</qresource>
</RCC>
diff --git a/widgets/actionitemdelegate.cpp b/widgets/actionitemdelegate.cpp
index 5d36fef..a2a7c3c 100644
--- a/widgets/actionitemdelegate.cpp
+++ b/widgets/actionitemdelegate.cpp
@@ -118,9 +118,18 @@ void ActionItemDelegate::drawIcons(QPainter *painter, const QRect &r, bool mouse
foreach (const QPointer<Action> &a, actions) {
QPixmap pix=a->icon().pixmap(QSize(iconSize, iconSize));
- if (!pix.isNull() && actionRect.width()>=pix.width()/* && r.x()>=0 && r.y()>=0*/) {
- painter->drawPixmap(actionRect.x()+(actionRect.width()-pix.width())/2,
- actionRect.y()+(actionRect.height()-pix.height())/2, pix);
+ #if QT_VERSION >= 0x050100
+ QSize pixSize = pix.isNull() ? QSize(0, 0) : (pix.size() / pix.devicePixelRatio());
+ #else
+ QSize pixSize = pix.size();
+ #endif
+
+ if (!pix.isNull() && actionRect.width()>=pixSize.width()/* && r.x()>=0 && r.y()>=0*/) {
+ painter->drawPixmap(actionRect.x()+(actionRect.width()-pixSize.width())/2,
+ actionRect.y()+(actionRect.height()-pixSize.height())/2, pix);
+ }
+ if (largeIcons && 2==actions.count() && AP_VTop==actionPos) {
+ adjustActionRect(rtl, actionPos, actionRect, iconSize>>4);
}
adjustActionRect(rtl, actionPos, actionRect, iconSize);
}
@@ -182,6 +191,9 @@ QAction * ActionItemDelegate::getAction(const QModelIndex &index) const
return a;
}
+ if (largeIcons && 2==actions.count() && AP_VTop==actionPos) {
+ adjustActionRect(rtl, actionPos, actionRect, iconSize>>4);
+ }
ActionItemDelegate::adjustActionRect(rtl, actionPos, actionRect, iconSize);
}
diff --git a/widgets/autohidingsplitter.cpp b/widgets/autohidingsplitter.cpp
index 7021899..f18e92d 100644
--- a/widgets/autohidingsplitter.cpp
+++ b/widgets/autohidingsplitter.cpp
@@ -41,13 +41,20 @@ static int splitterSize(const QWidget *w)
if (-1==size || !w || !w->isVisible()) {
if (Utils::touchFriendly()) {
size=4;
- } else if (qApp->style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents)) {
+ }
+ #if defined Q_OS_MAC || defined Q_OS_WIN
+ else {
+ size=0;
+ }
+ #else
+ else if (qApp->style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents)) {
int spacing=qApp->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarSpacing);
int splitterSize=qApp->style()->pixelMetric(QStyle::PM_SplitterWidth);
size=qMin(spacing+2, splitterSize);
} else {
size=GtkStyle::isActive() ? 0 : 1;
}
+ #endif
}
return size;
}
@@ -500,7 +507,7 @@ void AutohidingSplitter::setWidgetForHiding()
void AutohidingSplitter::updateAfterSplitterMoved(int pos, int index)
{
- Q_UNUSED(pos);
+ Q_UNUSED(pos)
if (!autoHideEnabled || index<=0 || index>count()) {
return;
}
diff --git a/widgets/coverwidget.cpp b/widgets/coverwidget.cpp
index 43fb1ec..ed201dc 100644
--- a/widgets/coverwidget.cpp
+++ b/widgets/coverwidget.cpp
@@ -24,6 +24,7 @@
#include "coverwidget.h"
#include "gui/currentcover.h"
#include "gui/covers.h"
+#include "gui/settings.h"
#include "mpd/song.h"
#include "context/view.h"
#include "support/localize.h"
@@ -32,6 +33,9 @@
#ifdef ENABLE_ONLINE_SERVICES
#include "online/onlineservice.h"
#endif
+#ifdef Q_OS_MAC
+#include "support/osxstyle.h"
+#endif
#include <QLinearGradient>
#include <QPen>
#include <QMouseEvent>
@@ -48,7 +52,6 @@ public:
CoverLabel(QWidget *p)
: QLabel(p)
, pressed(false)
- , pix(0)
{
}
@@ -109,79 +112,71 @@ public:
void paintEvent(QPaintEvent *)
{
- if (!pix) {
- return;
+ if (pix.isNull()) {
+ return;
}
QPainter p(this);
- QRect r((width()-pix->width())/2, (height()-pix->height())/2, pix->width(), pix->height());
- p.drawPixmap(r.x(), r.y(), *pix);
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = pix.size() / pix.devicePixelRatio();
+ #else
+ QSize layoutSize = pix.size();
+ #endif
+ QRect r((width()-layoutSize.width())/2, (height()-layoutSize.height())/2, layoutSize.width(), layoutSize.height());
+ p.drawPixmap(r, pix);
if (underMouse()) {
- QRectF rf(r.x()+0.5, r.y()+0.5, r.width()-1, r.height()-1);
- QColor col(palette().color(QPalette::Highlight));
- double radius=pix->width()>128 ? 6.0 : 4.0;
p.setRenderHint(QPainter::Antialiasing);
- col.setAlphaF(0.75);
- p.setPen(col);
- p.drawPath(Utils::buildPath(rf, radius));
- col.setAlphaF(0.35);
- p.setPen(col);
- p.drawPath(Utils::buildPath(rf.adjusted(-1, -1, 1, 1), radius+2));
+ #ifdef Q_OS_MAC
+ p.setPen(QPen(OSXStyle::self()->viewPalette().color(QPalette::Highlight), 2));
+ #else
+ p.setPen(QPen(palette().color(QPalette::Highlight), 2));
+ #endif
+ p.drawPath(Utils::buildPath(QRectF(r.x()+0.5, r.y()+0.5, r.width()-1, r.height()-1), layoutSize.width()>128 ? 4.5 : 3.5));
}
}
- void updatePix(const QImage &i)
+ void updatePix()
{
QImage img=CurrentCover::self()->image();
if (img.isNull()) {
return;
}
- int size=height()-(2*constBorder);
- img=img.scaled(size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- if (pix && pix->size()!=img.size()) {
- delete pix;
- pix=0;
+ int size=height();
+ int origSize=size;
+ double pixRatio=1.0;
+ #if QT_VERSION >= 0x050100
+ if (Settings::self()->retinaSupport()) {
+ pixRatio=qApp->devicePixelRatio();
+ size*=pixRatio;
}
- if (!pix) {
- pix=new QPixmap(img.size());
+ #endif
+ img=img.scaled(size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ #if QT_VERSION >= 0x050100
+ img.setDevicePixelRatio(pixRatio);
+ #endif
+ if (pix.isNull() || pix.size()!=img.size()) {
+ pix=QPixmap(img.size());
+ #if QT_VERSION >= 0x050100
+ pix.setDevicePixelRatio(pixRatio);
+ #endif
}
- pix->fill(Qt::transparent);
- QPainter painter(pix);
+ pix.fill(Qt::transparent);
+ QPainter painter(&pix);
painter.setRenderHint(QPainter::Antialiasing);
- QPainterPath path=Utils::buildPath(QRectF(0.5, 0.5, img.width()-1, img.height()-1), img.width()>128 ? 6.0 : 4.0);
- painter.fillPath(path, img);
-
- QColor col=palette().foreground().color();
- bool gradientBorder=col.red()>=196 && col.blue()>=196 && col.green()>=196;
- if (!gradientBorder && GtkStyle::isActive()) {
- QColor gtkCol=GtkStyle::symbolicColor();
- gradientBorder=gtkCol.red()>=196 && gtkCol.blue()>=196 && gtkCol.green()>=196;
- }
-
- int alpha=i.isNull() && !gradientBorder? 96 : 128;
- col.setAlpha(alpha);
-
- if (gradientBorder) {
- QLinearGradient grad(0, 0, 0, height());
- grad.setColorAt(0, QColor(0, 0, 0, alpha));
- grad.setColorAt(1, col);
- painter.strokePath(path, QPen(grad, 1));
- } else {
- painter.strokePath(path, QPen(col, 1));
- }
+ painter.setClipPath(Utils::buildPath(QRectF(0, 0, img.width()/pixRatio, img.height()/pixRatio), origSize>128 ? 4.5 : 3.5));
+ painter.drawImage(0, 0, img);
repaint();
}
void deletePix()
{
- if (pix) {
- delete pix;
- pix=0;
+ if (!pix.isNull()) {
+ pix=QPixmap();
}
}
private:
bool pressed;
- QPixmap *pix;
+ QPixmap pix;
};
CoverWidget::CoverWidget(QWidget *parent)
@@ -203,6 +198,9 @@ CoverWidget::~CoverWidget()
void CoverWidget::setSize(int min)
{
+ #ifdef Q_OS_MAC
+ min*=0.9;
+ #endif
label->setFixedSize(min, min);
}
@@ -219,8 +217,7 @@ void CoverWidget::setEnabled(bool e)
label->setEnabled(e);
}
-void CoverWidget::coverImage(const QImage &i)
+void CoverWidget::coverImage(const QImage &)
{
- label->updatePix(i);
+ label->updatePix();
}
-
diff --git a/widgets/groupedview.cpp b/widgets/groupedview.cpp
index 3167d95..cf8522f 100644
--- a/widgets/groupedview.cpp
+++ b/widgets/groupedview.cpp
@@ -32,7 +32,11 @@
#include "support/localize.h"
#include "gui/plurals.h"
#include "widgets/icons.h"
+#include "widgets/ratingwidget.h"
#include "support/gtkstyle.h"
+#ifdef Q_OS_MAC
+#include "support/osxstyle.h"
+#endif
#include "support/utils.h"
#include "models/roles.h"
#include <QStyledItemDelegate>
@@ -151,7 +155,7 @@ static Type getType(const QModelIndex &index)
{
QModelIndex prev=index.row()>0 ? index.sibling(index.row()-1, 0) : QModelIndex();
quint16 thisKey=index.data(Cantata::Role_Key).toUInt();
- quint16 prevKey=prev.isValid() ? prev.data(Cantata::Role_Key).toUInt() : Song::constNullKey;
+ quint16 prevKey=prev.isValid() ? prev.data(Cantata::Role_Key).toUInt() : (quint16)Song::Null_Key;
return thisKey==prevKey ? AlbumTrack : AlbumHeader;
}
@@ -190,11 +194,13 @@ public:
GroupedViewDelegate(GroupedView *p)
: ActionItemDelegate(p)
, view(p)
+ , ratingPainter(0)
{
}
virtual ~GroupedViewDelegate()
{
+ delete ratingPainter;
}
QSize sizeHint(Type type, bool isCollection) const
@@ -223,7 +229,7 @@ public:
Type type=getType(index);
bool isCollection=index.data(Cantata::Role_IsCollection).toBool();
- Song song=index.data(Cantata::Role_Song).value<Song>();
+ Song song=index.data(Cantata::Role_SongWithRating).value<Song>();
int state=index.data(Cantata::Role_Status).toInt();
quint32 collection=index.data(Cantata::Role_CollectionId).toUInt();
bool selected=option.state&QStyle::State_Selected;
@@ -237,7 +243,7 @@ public:
} else {
painter->save();
painter->setOpacity(0.75);
- QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0L);
+ QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, view);
painter->restore();
}
painter->save();
@@ -245,7 +251,7 @@ public:
if (mouseOver && gtk) {
GtkStyle::drawSelection(option, painter, selected ? 0.75 : 0.25);
} else {
- QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0L);
+ QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, view);
}
painter->restore();
if (!state && !view->isExpanded(song.key, collection) && view->isCurrentAlbum(song.key)) {
@@ -258,7 +264,7 @@ public:
if (mouseOver && gtk) {
GtkStyle::drawSelection(option, painter, selected ? 0.75 : 0.25);
} else {
- QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0L);
+ QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, view);
}
}
QString title;
@@ -284,7 +290,7 @@ public:
} else if (AlbumHeader==type) {
if (stream) {
QModelIndex next=index.sibling(index.row()+1, 0);
- quint16 nextKey=next.isValid() ? next.data(Cantata::Role_Key).toUInt() : Song::constNullKey;
+ quint16 nextKey=next.isValid() ? next.data(Cantata::Role_Key).toUInt() : (quint16)Song::Null_Key;
if (nextKey!=song.key && !song.name().isEmpty()) {
title=song.name();
track=streamText(song, trackTitle, false);
@@ -322,19 +328,30 @@ public:
if (song.priority>0) {
track=track+QLatin1String(" [")+QString::number(song.priority)+QChar(']');
}
+
painter->save();
painter->setFont(f);
+ #ifdef Q_OS_WIN
+ QColor col(option.palette.color(QPalette::Text));
+ #else
QColor col(option.palette.color(option.state&QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text));
+ #endif
QTextOption textOpt(Qt::AlignVCenter);
QRect r(option.rect.adjusted(constBorder+4, constBorder, -(constBorder+4), -constBorder));
if (state && GroupedView::State_StopAfterTrack!=state) {
QRectF border(option.rect.x()+1.5, option.rect.y()+1.5, option.rect.width()-3, option.rect.height()-3);
if (!title.isEmpty()) {
- border.adjust(0, textHeight+constBorder, 0, 0);
+ border.adjust(0, (border.height()/2)+1, 0, 0);
}
QLinearGradient g(border.topLeft(), border.bottomLeft());
+ #ifdef Q_OS_MAC
+ QColor gradCol(OSXStyle::self()->viewPalette().color(QPalette::Highlight));
+ QColor borderCol(OSXStyle::self()->viewPalette().color(QPalette::HighlightedText));
+ #else
QColor gradCol(QApplication::palette().color(QPalette::Highlight));
+ QColor borderCol(QApplication::palette().color(QPalette::HighlightedText));
+ #endif
gradCol.setAlphaF(option.state&QStyle::State_Selected ? 0.6 : 0.45);
g.setColorAt(0, gradCol.dark(165));
g.setColorAt(1, gradCol.light(165));
@@ -342,7 +359,7 @@ public:
painter->fillPath(Utils::buildPath(border, 3), g);
painter->setPen(QPen(gradCol, 1));
painter->drawPath(Utils::buildPath(border.adjusted(-1, -1, 1, 1), 3.5));
- painter->setPen(QPen(QApplication::palette().color(QPalette::HighlightedText), 1));
+ painter->setPen(QPen(borderCol, 1));
painter->drawPath(Utils::buildPath(border, 3));
painter->setRenderHint(QPainter::Antialiasing, false);
}
@@ -356,21 +373,34 @@ public:
if (isCollection) {
pix=index.data(Qt::DecorationRole).value<QIcon>().pixmap(constCoverSize, constCoverSize);
} else {
- QPixmap *cover=stream ? 0 : Covers::self()->get(song, constCoverSize);
+ QPixmap *cover=/*stream ? 0 : */Covers::self()->get(song, constCoverSize);
pix=cover ? *cover : (stream && !song.isCdda() ? Icons::self()->streamIcon : Icons::self()->albumIcon).pixmap(constCoverSize, constCoverSize);
}
- if (pix.width()>constCoverSize) {
- pix=pix.scaled(constCoverSize, constCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ #if QT_VERSION >= 0x050100
+ int maxSize=constCoverSize*pix.devicePixelRatio();
+ #else
+ int maxSize=constCoverSize;
+ #endif
+
+ if (pix.width()>maxSize) {
+ pix=pix.scaled(maxSize, maxSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
}
+ #if QT_VERSION >= 0x050100
+ QSize pixSize = pix.isNull() ? QSize(0, 0) : (pix.size() / pix.devicePixelRatio());
+ #else
+ QSize pixSize = pix.size();
+ #endif
+
if (rtl) {
- painter->drawPixmap(r.x()+r.width()-(pix.width()-constBorder), r.y()+((r.height()-pix.height())/2), pix.width(), pix.height(), pix);
+ painter->drawPixmap(r.x()+r.width()-(pixSize.width()-constBorder), r.y()+((r.height()-pixSize.height())/2), pixSize.width(), pixSize.height(), pix);
r.adjust(0, 0, -(constCoverSize+constBorder), 0);
} else {
- painter->drawPixmap(r.x()-2, r.y()+((r.height()-pix.height())/2), pix.width(), pix.height(), pix);
+ painter->drawPixmap(r.x()-2, r.y()+((r.height()-pixSize.height())/2), pixSize.width(), pixSize.height(), pix);
r.adjust(constCoverSize+constBorder, 0, 0, 0);
}
+
int td=index.data(Cantata::Role_AlbumDuration).toUInt();
QString totalDuration=td>0 ? Utils::formatTime(td) : QString();
QRect duratioRect(r.x(), r.y(), r.width(), textHeight);
@@ -405,9 +435,14 @@ public:
GroupedView::drawPlayState(painter, option, r, state);
painter->setPen(col);
+ int ratingsStart=rtl ? 0 : drawRatings(painter, song, r, fm, option.palette.color(QPalette::Active, QPalette::Text)); // TODO!!!
+
int durationWidth=showTrackDuration ? fm.width(duration)+8 : 0;
QRect duratioRect(r.x(), r.y(), r.width(), textHeight);
QRect textRect(r.x(), r.y(), r.width()-durationWidth, textHeight);
+ if (ratingsStart>0) {
+ textRect.setWidth(ratingsStart-r.x());
+ }
track = fm.elidedText(track, Qt::ElideRight, textRect.width(), QPalette::WindowText);
painter->drawText(textRect, track, textOpt);
if (showTrackDuration) {
@@ -421,8 +456,32 @@ public:
painter->restore();
}
+ int drawRatings(QPainter *painter, const Song &song, const QRect &r, const QFontMetrics &fm, const QColor &col) const
+ {
+ if (song.rating>0 && song.rating<=Song::Rating_Max) {
+ if (!ratingPainter) {
+ ratingPainter=new RatingPainter(r.height()-(constBorder*8));
+ ratingPainter->setColor(col);
+ }
+
+ painter->save();
+ painter->setOpacity(painter->opacity()*0.75);
+ const QSize &ratingSize=ratingPainter->size();
+ int spacing=constBorder*2;
+ int durationWidth=fm.width("0:00:00")+spacing;
+ QRect ratingRect(r.x()+r.width()-(durationWidth+ratingSize.width()+spacing),
+ r.y()+(r.height()-ratingSize.height())/2,
+ ratingSize.width(), ratingSize.height());
+ ratingPainter->paint(painter, ratingRect, song.rating);
+ painter->restore();
+ return ratingRect.x()-spacing;
+ }
+ return 0;
+ }
+
private:
GroupedView *view;
+ mutable RatingPainter *ratingPainter;
};
GroupedView::GroupedView(QWidget *parent, bool isPlayQueue)
@@ -432,7 +491,7 @@ GroupedView::GroupedView(QWidget *parent, bool isPlayQueue)
, autoExpand(true)
, filterActive(false)
, isMultiLevel(false)
- , currentAlbum(Song::constNullKey)
+ , currentAlbum(Song::Null_Key)
{
setContextMenuPolicy(Qt::CustomContextMenu);
setAcceptDrops(true);
@@ -540,7 +599,7 @@ void GroupedView::updateRows(const QModelIndex &parent)
}
qint32 count=model()->rowCount(parent);
- quint16 lastKey=Song::constNullKey;
+ quint16 lastKey=Song::Null_Key;
quint32 collection=parent.data(Cantata::Role_CollectionId).toUInt();
QSet<quint16> keys;
@@ -565,7 +624,7 @@ void GroupedView::updateCollectionRows()
return;
}
- currentAlbum=Song::constNullKey;
+ currentAlbum=Song::Null_Key;
qint32 count=model()->rowCount();
for (int i=0; i<count; ++i) {
updateRows(model()->index(i, 0));
@@ -703,7 +762,7 @@ void GroupedView::coverLoaded(const Song &song, int size)
return;
}
quint32 count=model()->rowCount();
- quint16 lastKey=Song::constNullKey;
+ quint16 lastKey=Song::Null_Key;
QString albumArtist=song.albumArtist();
QString album=song.album;
@@ -713,7 +772,7 @@ void GroupedView::coverLoaded(const Song &song, int size)
continue;
}
if (isMultiLevel && model()->hasChildren(index)) {
- lastKey=Song::constNullKey;
+ lastKey=Song::Null_Key;
quint32 childCount=model()->rowCount(index);
for (quint32 c=0; c<childCount; ++c) {
QModelIndex child=model()->index(c, 0, index);
diff --git a/widgets/icons.cpp b/widgets/icons.cpp
index 5b31e7c..21be86e 100644
--- a/widgets/icons.cpp
+++ b/widgets/icons.cpp
@@ -38,10 +38,14 @@
#if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined ENABLE_UBUNTU
#include "support/gtkstyle.h"
#endif
+#ifdef Q_OS_MAC
+#include "support/osxstyle.h"
+#endif
GLOBAL_STATIC(Icons, instance)
-static QList<int> constStdSizes=QList<int>() << 16 << 22 << 32 << 48;
+static QList<int> constStdSmallSizes=QList<int>() << 16 << 22 << 32 ;
+static QList<int> constStdSizes=QList<int>() << constStdSmallSizes << 48; // << 64;
static QList<int> constMonoSvgSizes=QList<int>() << constStdSizes << 64;
static const int constDarkLimit=80;
@@ -106,8 +110,10 @@ static QPixmap createConsumeIconPixmap(int size, const QColor &col, double opaci
border=4;
} else if (48==size) {
border=5;
- }
- p.setPen(QPen(col, size/10.0));
+ } /*else if (64==size) {
+ border=6;
+ }*/
+ p.setPen(QPen(col, size/8.0));
p.setOpacity(opacity);
p.setRenderHint(QPainter::Antialiasing, true);
QRectF rect(border+0.5, border+0.5, size-(2*border), size-(2*border));
@@ -146,7 +152,11 @@ static QPixmap createMenuIconPixmap(int size, QColor col, double opacity=1.0)
lineWidth=8;
space=6;
borderX=4;
- }
+ } /*else if (64==size) {
+ lineWidth=10;
+ space=10;
+ borderX=6;
+ }*/
int borderY=((size-((3*lineWidth)+(2*space)))/2.0)+0.5;
@@ -183,7 +193,7 @@ static QColor calcIconColor()
static Icon createSingleIcon(const QColor &stdColor)
{
Icon icon;
- foreach (int s, constStdSizes) {
+ foreach (int s, constStdSmallSizes) {
icon.addPixmap(createSingleIconPixmap(s, stdColor));
}
return icon;
@@ -192,7 +202,7 @@ static Icon createSingleIcon(const QColor &stdColor)
static Icon createConsumeIcon(const QColor &stdColor)
{
Icon icon;
- foreach (int s, constStdSizes) {
+ foreach (int s, constStdSmallSizes) {
icon.addPixmap(createConsumeIconPixmap(s, stdColor));
}
return icon;
@@ -253,7 +263,7 @@ static QPixmap recolour(const QImage &img, const QColor &col, double opacity=1.0
return QPixmap::fromImage(i);
}
-static Icon createRecolourableIcon(const QString &name, const QColor &stdColor)
+static Icon createRecolourableIcon(const QString &name, const QColor &stdColor, int extraSize=24)
{
if (QColor(Qt::black)==stdColor) {
// Text colour is black, so is icon, therefore no need to recolour!!!
@@ -262,7 +272,8 @@ static Icon createRecolourableIcon(const QString &name, const QColor &stdColor)
Icon icon;
- foreach (int s, constStdSizes) {
+ QList<int> sizes=QList<int>() << constStdSizes << extraSize;
+ foreach (int s, sizes) {
QImage img(QChar(':')+name+QString::number(s));
if (!img.isNull()) {
icon.addPixmap(recolour(img, stdColor));
@@ -320,7 +331,7 @@ static Icon loadSidebarIcon(const QString &name, const QColor &normal, const QCo
return loadMonoSvgIcon(QLatin1String("sidebar"), name, normal, selected);
}
-#if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined ENABLE_UBUNTU
+#if !defined Q_OS_WIN && !defined ENABLE_UBUNTU
static void setDisabledOpacity(Icon &icon)
{
static const double constDisabledOpacity=0.5;
@@ -401,8 +412,8 @@ Icons::Icons()
}
radioStreamIcon=Icon::create("radio", constStdSizes);
addRadioStreamIcon=Icon::create("addradio", constStdSizes);
- variousArtistsIcon=Icon::create("va", QList<int>() << 16 << 22 << 32 << 48 << 64 << 128, true);
- artistIcon=Icon::create("artist", QList<int>() << 16 << 22 << 32 << 48 << 64 << 128, true);
+ variousArtistsIcon.addFile(":va.svg");
+ artistIcon.addFile(":artist.svg");
lastFmIcon.addFile(":lastfm.svg");
#ifndef ENABLE_KDE_SUPPORT
#ifndef ENABLE_UBUNTU
@@ -474,8 +485,13 @@ void Icons::initSidebarIcons()
{
if (Settings::self()->monoSidebarIcons()) {
monoSb=true;
+ #ifdef Q_OS_MAC
+ QColor textCol=OSXStyle::self()->monoIconColor();
+ QColor highlightedTexCol=OSXStyle::self()->viewPalette().highlightedText().color();
+ #else
QColor textCol=QApplication::palette().color(QPalette::Active, QPalette::WindowText);
QColor highlightedTexCol=QApplication::palette().color(QPalette::Active, QPalette::HighlightedText);
+ #endif
playqueueIcon=loadSidebarIcon(QLatin1String("playqueue"), textCol, highlightedTexCol);
artistsIcon=loadSidebarIcon(QLatin1String("artists"), textCol, highlightedTexCol);
albumsIcon=loadSidebarIcon(QLatin1String("albums"), textCol, highlightedTexCol);
@@ -530,15 +546,21 @@ void Icons::initToolbarIcons(const QColor &toolbarText)
Q_UNUSED(toolbarText)
#endif
QColor stdColor=calcIconColor();
- #if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined ENABLE_UBUNTU
+ #if !defined Q_OS_WIN && !defined ENABLE_UBUNTU
+ #ifndef Q_OS_MAC
if (GtkStyle::useSymbolicIcons()) {
+ #endif
bool rtl=QApplication::isRightToLeft();
+ #ifdef Q_OS_MAC
+ QColor col=OSXStyle::self()->monoIconColor();
+ #else
QColor col=GtkStyle::symbolicColor();
- toolbarPrevIcon=loadMediaIcon(QLatin1String(rtl ? "prev-rtl" : "prev"), col, col);
+ #endif
+ toolbarPrevIcon=loadMediaIcon(QLatin1String(rtl ? "next" : "prev"), col, col);
toolbarPlayIcon=loadMediaIcon(QLatin1String(rtl ? "play-rtl" : "play"), col, col);
toolbarPauseIcon=loadMediaIcon(QLatin1String("pause"), col, col);
toolbarStopIcon=loadMediaIcon(QLatin1String("stop"), col, col);
- toolbarNextIcon=loadMediaIcon(QLatin1String(rtl ? "next-rtl" : "next"), col, col);
+ toolbarNextIcon=loadMediaIcon(QLatin1String(rtl ? "prev" : "next"), col, col);
infoIcon=loadSidebarIcon("info", col, col);
#ifdef USE_SYSTEM_MENU_ICON
toolbarMenuIcon=loadMonoSvgIcon(QLatin1String("menu"), QLatin1String("icon"), col, col);
@@ -550,8 +572,10 @@ void Icons::initToolbarIcons(const QColor &toolbarText)
toolbarMenuIcon=createMenuIcon(col);
}
#endif
+ #ifndef Q_OS_MAC
} else
#endif
+ #endif
{
#ifdef USE_SYSTEM_MENU_ICON
toolbarMenuIcon=menuIcon;
@@ -572,7 +596,7 @@ void Icons::initToolbarIcons(const QColor &toolbarText)
infoIcon=Icon("dialog-information");
}
- #if !defined ENABLE_KDE_SUPPORT && !defined Q_OS_WIN && !defined Q_OS_MAC
+ #if !defined ENABLE_KDE_SUPPORT && !defined Q_OS_WIN
if (QLatin1String("gnome")==Icon::currentTheme().toLower()) {
QColor col=QApplication::palette().color(QPalette::Active, QPalette::WindowText);
contextIcon=loadSidebarIcon("info", col, col);
diff --git a/widgets/itemview.cpp b/widgets/itemview.cpp
index 24f5b77..74e64fe 100644
--- a/widgets/itemview.cpp
+++ b/widgets/itemview.cpp
@@ -24,6 +24,7 @@
#include "itemview.h"
#include "groupedview.h"
#include "tableview.h"
+#include "messageoverlay.h"
#include "models/roles.h"
#include "gui/covers.h"
#include "models/proxymodel.h"
@@ -34,12 +35,12 @@
#include "support/icon.h"
#include "config.h"
#include "support/gtkstyle.h"
+#include "support/proxystyle.h"
#include "support/spinner.h"
-#include "messageoverlay.h"
#include "support/action.h"
#include "support/actioncollection.h"
#include "support/configuration.h"
-#include <QToolButton>
+#include "support/flattoolbutton.h"
#include <QStyle>
#include <QStyleOptionViewItem>
#include <QPainter>
@@ -48,20 +49,34 @@
#include <QKeyEvent>
#include <QProxyStyle>
-static int listDecorationSize=22;
-static int treeDecorationSize=16;
+static int detailedViewDecorationSize=22;
+static int simpleViewDecorationSize=16;
+static int listCoverSize=22;
+static int gridCoverSize=22;
+
+static inline int adjust(int v)
+{
+ if (v>48) {
+ static const int constStep=4;
+ return (((int)(v/constStep))*constStep)+((v%constStep) ? constStep : 0);
+ } else {
+ return Icon::stdSize(v);
+ }
+}
void ItemView::setup()
{
int height=QApplication::fontMetrics().height();
if (height>22) {
- listDecorationSize=Icon::stdSize(height*1.4);
- treeDecorationSize=Icon::stdSize(height);
+ detailedViewDecorationSize=Icon::stdSize(height*1.4);
+ simpleViewDecorationSize=Icon::stdSize(height);
} else {
- listDecorationSize=22;
- treeDecorationSize=16;
+ detailedViewDecorationSize=22;
+ simpleViewDecorationSize=16;
}
+ listCoverSize=qMax(32, adjust(2*height));
+ gridCoverSize=qMax(128, adjust(8*height));
}
KeyEventHandler::KeyEventHandler(QAbstractItemView *v, QAction *a)
@@ -115,7 +130,6 @@ bool ViewEventHandler::eventFilter(QObject *obj, QEvent *event)
return KeyEventHandler::eventFilter(obj, event);
}
-static const int constImageSize=22;
static const int constDevImageSize=32;
static inline double subTextAlpha(bool selected)
@@ -139,16 +153,10 @@ public:
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
Q_UNUSED(option)
- int imageSize = index.data(Cantata::Role_ImageSize).toInt();
-
- if (imageSize<0) {
- imageSize=constImageSize;
- }
-
if (view && QListView::IconMode==view->viewMode()) {
- // Use same calculation as in LibraryPage/AlbumsPage...
- return QSize(imageSize+8, imageSize+(QApplication::fontMetrics().height()*2.5));
+ return QSize(gridCoverSize+8, gridCoverSize+(QApplication::fontMetrics().height()*2.5));
} else {
+ int imageSize = index.data(Cantata::Role_ListImage).toBool() ? listCoverSize : 0;
// TODO: Any point to checking one-line here? All models return sub-text...
// Things will be quicker if we dont call SubText here...
bool oneLine = false ; // index.data(Cantata::Role_SubText).toString().isEmpty();
@@ -188,7 +196,7 @@ public:
if (mouseOver && gtk) {
GtkStyle::drawSelection(opt, painter, selected ? 0.75 : 0.25);
} else {
- QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, 0L);
+ QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, itemView());
}
}
@@ -204,17 +212,21 @@ public:
QRect r(option.rect);
QRect r2(r);
QString childText = index.data(Cantata::Role_SubText).toString();
- QVariant image = index.data(Cantata::Role_Image);
- if (image.isNull()) {
- image = index.data(Qt::DecorationRole);
+
+ QPixmap pix;
+ if (iconMode || index.data(Cantata::Role_ListImage).toBool()) {
+ Song cSong=index.data(Cantata::Role_CoverSong).value<Song>();
+ if (!cSong.isEmpty()) {
+ QPixmap *cp=Covers::self()->get(cSong, iconMode ? gridCoverSize : listCoverSize, getCoverInUiThread(index));
+ if (cp) {
+ pix=*cp;
+ }
+ }
+ }
+ if (!pix) {
+ pix=index.data(Qt::DecorationRole).value<QIcon>().pixmap(detailedViewDecorationSize, detailedViewDecorationSize);
}
- QPixmap pix = QVariant::Pixmap==image.type()
- ? image.value<QPixmap>()
- : QVariant::Image==image.type()
- ? QPixmap::fromImage(image.value<QImage>().scaled(listDecorationSize, listDecorationSize,
- Qt::KeepAspectRatio, Qt::SmoothTransformation))
- : image.value<QIcon>().pixmap(listDecorationSize, listDecorationSize);
bool oneLine = childText.isEmpty();
ActionPos actionPos = iconMode ? AP_VTop : AP_HMiddle;
bool rtl = QApplication::isRightToLeft();
@@ -241,13 +253,18 @@ public:
r.adjust(constBorder, 0, -constBorder, 0);
}
if (!pix.isNull()) {
- int adjust=qMax(pix.width(), pix.height());
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = pix.size() / pix.devicePixelRatio();
+ #else
+ QSize layoutSize = pix.size();
+ #endif
+ int adjust=qMax(layoutSize.width(), layoutSize.height());
if (AP_VTop==actionPos) {
- int xpos=r.x()+((r.width()-pix.width())/2);
- painter->drawPixmap(xpos, r.y(), pix.width(), pix.height(), pix);
+ int xpos=r.x()+((r.width()-layoutSize.width())/2);
+ painter->drawPixmap(xpos, r.y(), layoutSize.width(), layoutSize.height(), pix);
QColor color(option.palette.color(active ? QPalette::Active : QPalette::Inactive, QPalette::Text));
double alphas[]={0.25, 0.125, 0.061};
- QRect border(xpos, r.y(), pix.width(), pix.height());
+ QRect border(xpos, r.y(), layoutSize.width(), layoutSize.height());
QRect shadow(border);
for (int i=0; i<3; ++i) {
shadow.adjust(1, 1, 1, 1);
@@ -276,17 +293,21 @@ public:
r.adjust(0, adjust+3, 0, -3);
} else {
if (rtl) {
- painter->drawPixmap(r.x()+r.width()-pix.width(), r.y()+((r.height()-pix.height())/2), pix.width(), pix.height(), pix);
+ painter->drawPixmap(r.x()+r.width()-layoutSize.width(), r.y()+((r.height()-layoutSize.height())/2), layoutSize.width(), layoutSize.height(), pix);
r.adjust(3, 0, -(3+adjust), 0);
} else {
- painter->drawPixmap(r.x(), r.y()+((r.height()-pix.height())/2), pix.width(), pix.height(), pix);
+ painter->drawPixmap(r.x(), r.y()+((r.height()-layoutSize.height())/2), layoutSize.width(), layoutSize.height(), pix);
r.adjust(adjust+3, 0, -3, 0);
}
}
}
QRect textRect;
+ #ifdef Q_OS_WIN
+ QColor color(option.palette.color(active ? QPalette::Active : QPalette::Inactive, QPalette::Text));
+ #else
QColor color(option.palette.color(active ? QPalette::Active : QPalette::Inactive, selected ? QPalette::HighlightedText : QPalette::Text));
+ #endif
QTextOption textOpt(AP_VTop==actionPos ? Qt::AlignHCenter|Qt::AlignVCenter : Qt::AlignVCenter);
textOpt.setWrapMode(QTextOption::NoWrap);
@@ -353,6 +374,9 @@ public:
painter->restore();
}
+ virtual bool getCoverInUiThread(const QModelIndex &) const { return false; }
+ virtual QWidget * itemView() const { return view; }
+
protected:
ListView *view;
};
@@ -363,6 +387,7 @@ public:
TreeDelegate(QAbstractItemView *p)
: ListDelegate(0, p)
, simpleStyle(true)
+ , treeView(p)
{
}
@@ -372,19 +397,22 @@ public:
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
+ if (noIcons) {
+ return QStyledItemDelegate::sizeHint(option, index);
+ }
if (!simpleStyle || !index.data(Cantata::Role_CapacityText).toString().isEmpty()) {
return ListDelegate::sizeHint(option, index);
}
QSize sz(QStyledItemDelegate::sizeHint(option, index));
+
+ if (index.data(Cantata::Role_ListImage).toBool()) {
+ sz.setHeight(qMax(sz.height(), listCoverSize));
+ }
if (Utils::touchFriendly()) {
- int minH=option.fontMetrics.height()*2;
- if (sz.height()<minH) {
- sz.setHeight(minH);
- return sz;
- }
+ sz.setHeight(qMax(sz.height(), option.fontMetrics.height()*2));
}
- return QSize(sz.width(), sz.height()+2);
+ return QSize(sz.width(), sz.height()+(constBorder *2));
}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
@@ -405,76 +433,106 @@ public:
bool active=option.state&QStyle::State_Active;
bool mouseOver=underMouse && option.state&QStyle::State_MouseOver;
- if (!gtk && 1==text.count()) {
- QStyledItemDelegate::paint(painter, option, index);
+ if (mouseOver && gtk) {
+ GtkStyle::drawSelection(option, painter, selected ? 0.75 : 0.25);
} else {
- if (mouseOver && gtk) {
- GtkStyle::drawSelection(option, painter, selected ? 0.75 : 0.25);
- } else {
- QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0L);
- }
- QRect r(option.rect);
- r.adjust(4, 0, -4, 0);
- QPixmap pix=noIcons ? QPixmap() : index.data(Qt::DecorationRole).value<QIcon>().pixmap(treeDecorationSize, treeDecorationSize);
- if (gtk && pix.isNull()) {
- QVariant image = index.data(Cantata::Role_Image);
- if (!image.isNull()) {
- pix = QVariant::Pixmap==image.type() ? image.value<QPixmap>() : noIcons ? QPixmap() : image.value<QIcon>().pixmap(listDecorationSize, listDecorationSize);
+ QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, itemView());
+ }
+ QRect r(option.rect);
+ r.adjust(4, 0, -4, 0);
+
+ if (!noIcons) {
+ QPixmap pix;
+ if (index.data(Cantata::Role_ListImage).toBool()) {
+ Song cSong=index.data(Cantata::Role_CoverSong).value<Song>();
+ if (!cSong.isEmpty()) {
+ QPixmap *cp=Covers::self()->get(cSong, listCoverSize);
+ if (cp) {
+ pix=*cp;
+ }
}
}
+
+ if (pix.isNull()) {
+ pix=index.data(Qt::DecorationRole).value<QIcon>().pixmap(simpleViewDecorationSize, simpleViewDecorationSize);
+ }
+
if (!pix.isNull()) {
- int adjust=qMax(pix.width(), pix.height());
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = pix.size() / pix.devicePixelRatio();
+ #else
+ QSize layoutSize = pix.size();
+ #endif
+ int adjust=qMax(layoutSize.width(), layoutSize.height());
if (rtl) {
- painter->drawPixmap(r.x()+r.width()-pix.width(), r.y()+((r.height()-pix.height())/2), pix.width(), pix.height(), pix);
+ painter->drawPixmap(r.x()+r.width()-layoutSize.width(), r.y()+((r.height()-layoutSize.height())/2), layoutSize.width(), layoutSize.height(), pix);
r.adjust(3, 0, -(3+adjust), 0);
} else {
- painter->drawPixmap(r.x(), r.y()+((r.height()-pix.height())/2), pix.width(), pix.height(), pix);
+ painter->drawPixmap(r.x(), r.y()+((r.height()-layoutSize.height())/2), layoutSize.width(), layoutSize.height(), pix);
r.adjust(adjust+3, 0, -3, 0);
}
}
+ }
- if (text.count()>0) {
- QFont textFont(QApplication::font());
- QFontMetrics textMetrics(textFont);
- int textHeight=textMetrics.height();
- QColor color(option.palette.color(active ? QPalette::Active : QPalette::Inactive, selected ? QPalette::HighlightedText : QPalette::Text));
- QTextOption textOpt(Qt::AlignVCenter);
- QRect textRect(r.x(), r.y()+((r.height()-textHeight)/2), r.width(), textHeight);
- QString str=textMetrics.elidedText(text.at(0), Qt::ElideRight, textRect.width(), QPalette::WindowText);
-
- painter->save();
- painter->setPen(color);
- painter->setFont(textFont);
- painter->drawText(textRect, str, textOpt);
-
- if (text.count()>1) {
- int mainWidth=textMetrics.width(str);
- text.takeFirst();
- str=text.join(" - ");
- textRect=QRect(r.x()+(mainWidth+8), r.y()+((r.height()-textHeight)/2), r.width()-(mainWidth+8), textHeight);
- if (textRect.width()>4) {
- str = textMetrics.elidedText(str, Qt::ElideRight, textRect.width(), QPalette::WindowText);
- color.setAlphaF(subTextAlpha(selected));
- painter->setPen(color);
- painter->drawText(textRect, str, textOpt/*QTextOption(Qt::AlignVCenter|Qt::AlignRight)*/);
- }
+ if (text.count()>0) {
+ QFont textFont(QApplication::font());
+ QFontMetrics textMetrics(textFont);
+ int textHeight=textMetrics.height();
+ #ifdef Q_OS_WIN
+ QColor color(option.palette.color(active ? QPalette::Active : QPalette::Inactive, QPalette::Text));
+ #else
+ QColor color(option.palette.color(active ? QPalette::Active : QPalette::Inactive, selected ? QPalette::HighlightedText : QPalette::Text));
+ #endif
+ QTextOption textOpt(Qt::AlignVCenter);
+ QRect textRect(r.x(), r.y()+((r.height()-textHeight)/2), r.width(), textHeight);
+ QString str=textMetrics.elidedText(text.at(0), Qt::ElideRight, textRect.width(), QPalette::WindowText);
+
+ painter->save();
+ painter->setPen(color);
+ painter->setFont(textFont);
+ painter->drawText(textRect, str, textOpt);
+
+ if (text.count()>1) {
+ int mainWidth=textMetrics.width(str);
+ text.takeFirst();
+ str=text.join(" - ");
+ textRect=QRect(r.x()+(mainWidth+8), r.y()+((r.height()-textHeight)/2), r.width()-(mainWidth+8), textHeight);
+ if (textRect.width()>4) {
+ str = textMetrics.elidedText(str, Qt::ElideRight, textRect.width(), QPalette::WindowText);
+ color.setAlphaF(subTextAlpha(selected));
+ painter->setPen(color);
+ painter->drawText(textRect, str, textOpt/*QTextOption(Qt::AlignVCenter|Qt::AlignRight)*/);
}
- painter->restore();
}
+ painter->restore();
}
if (mouseOver || Utils::touchFriendly()) {
drawIcons(painter, option.rect, mouseOver || (selected && Utils::touchFriendly()), rtl, AP_HMiddle, index);
}
+ #ifdef Q_OS_WIN
+ BasicItemDelegate::drawLine(painter, option.rect, option.palette.color(active ? QPalette::Active : QPalette::Inactive,
+ QPalette::Text));
+ #else
BasicItemDelegate::drawLine(painter, option.rect, option.palette.color(active ? QPalette::Active : QPalette::Inactive,
selected ? QPalette::HighlightedText : QPalette::Text));
+ #endif
}
void setSimple(bool s) { simpleStyle=s; }
void setNoIcons(bool n) { noIcons=n; }
+ virtual bool getCoverInUiThread(const QModelIndex &idx) const
+ {
+ // Want album covers in artists view to load quickly...
+ return idx.isValid() && idx.parent().isValid() && !idx.parent().parent().isValid();
+ }
+
+ virtual QWidget * itemView() const { return treeView; }
+
bool simpleStyle;
bool noIcons;
+ QAbstractItemView *treeView;
};
#if 0
@@ -588,6 +646,13 @@ public:
int frameWidth=baseStyle()->pixelMetric(PM_DefaultFrameWidth, option, widget);
QFontMetrics fm(painter->fontMetrics());
copy.text=fm.elidedText(toolbutton->text, Qt::ElideRight, toolbutton->rect.width()-(iconWidth+8+(2*frameWidth)), QPalette::WindowText);
+ #ifdef Q_OS_MAC
+ if (!(option->state&State_Sunken || option->state&State_MouseOver)) {
+ int fw=baseStyle()->pixelMetric(PM_DefaultFrameWidth,option, widget);
+ copy.rect.adjust(fw, fw, -fw, -fw);
+ baseStyle()->drawControl(CE_ToolButtonLabel, ©, painter, widget);
+ } else
+ #endif
baseStyle()->drawComplexControl(control, ©, painter, widget);
return;
}
@@ -620,12 +685,10 @@ ItemView::ItemView(QWidget *p)
backButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
Icon::init(backButton);
backButton->setAutoRaise(true);
- #ifdef Q_OS_MAC
- backButton->setStyleSheet("QToolButton {border: 0}");
- #endif
backButton->setFocusPolicy(Qt::NoFocus);
backButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- backButton->setStyle(new BackButtonProxyStyle());
+ static BackButtonProxyStyle *backButtonStyle=new BackButtonProxyStyle();
+ backButton->setStyle(backButtonStyle);
Action::updateToolTip(backAction);
QAction *sep=new QAction(this);
sep->setSeparator(true);
@@ -638,8 +701,8 @@ ItemView::ItemView(QWidget *p)
TreeDelegate *td=new TreeDelegate(treeView);
listView->setItemDelegate(ld);
treeView->setItemDelegate(td);
- listView->setProperty(GtkStyle::constHideFrameProp, true);
- treeView->setProperty(GtkStyle::constHideFrameProp, true);
+ listView->setProperty(ProxyStyle::constModifyFrameProp, Utils::touchFriendly() ? ProxyStyle::VF_Top : (ProxyStyle::VF_Side|ProxyStyle::VF_Top));
+ treeView->setProperty(ProxyStyle::constModifyFrameProp, Utils::touchFriendly() ? ProxyStyle::VF_Top : (ProxyStyle::VF_Side|ProxyStyle::VF_Top));
ViewEventHandler *listViewEventHandler=new ViewEventHandler(ld, listView);
ViewEventHandler *treeViewEventHandler=new ViewEventHandler(td, treeView);
listView->installFilter(listViewEventHandler);
@@ -655,9 +718,13 @@ ItemView::ItemView(QWidget *p)
connect(listView, SIGNAL(activated(const QModelIndex &)), this, SLOT(activateItem(const QModelIndex &)));
connect(listView, SIGNAL(itemDoubleClicked(const QModelIndex &)), this, SIGNAL(doubleClicked(const QModelIndex &)));
connect(listView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(itemClicked(const QModelIndex &)));
- connect(backAction, SIGNAL(triggered(bool)), this, SLOT(backActivated()));
+ connect(backAction, SIGNAL(triggered()), this, SLOT(backActivated()));
connect(listViewEventHandler, SIGNAL(backspacePressed()), this, SLOT(backActivated()));
searchWidget->setVisible(false);
+ #ifdef Q_OS_MAC
+ treeView->setAttribute(Qt::WA_MacShowFocusRect, 0);
+ listView->setAttribute(Qt::WA_MacShowFocusRect, 0);
+ #endif
}
ItemView::~ItemView()
@@ -692,7 +759,10 @@ void ItemView::allowGroupedView()
connect(groupedView, SIGNAL(itemActivated(const QModelIndex &)), this, SLOT(itemActivated(const QModelIndex &)));
connect(groupedView, SIGNAL(doubleClicked(const QModelIndex &)), this, SIGNAL(doubleClicked(const QModelIndex &)));
connect(groupedView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(itemClicked(const QModelIndex &)));
- groupedView->setProperty(GtkStyle::constHideFrameProp, true);
+ groupedView->setProperty(ProxyStyle::constModifyFrameProp, Utils::touchFriendly() ? ProxyStyle::VF_Top : (ProxyStyle::VF_Side|ProxyStyle::VF_Top));
+ #ifdef Q_OS_MAC
+ groupedView->setAttribute(Qt::WA_MacShowFocusRect, 0);
+ #endif
}
}
@@ -709,7 +779,10 @@ void ItemView::allowTableView(TableView *v)
connect(tableView, SIGNAL(itemActivated(const QModelIndex &)), this, SLOT(itemActivated(const QModelIndex &)));
connect(tableView, SIGNAL(doubleClicked(const QModelIndex &)), this, SIGNAL(doubleClicked(const QModelIndex &)));
connect(tableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(itemClicked(const QModelIndex &)));
- tableView->setProperty(GtkStyle::constHideFrameProp, true);
+ tableView->setProperty(ProxyStyle::constModifyFrameProp, Utils::touchFriendly() ? ProxyStyle::VF_Top : (ProxyStyle::VF_Side|ProxyStyle::VF_Top));
+ #ifdef Q_OS_MAC
+ tableView->setAttribute(Qt::WA_MacShowFocusRect, 0);
+ #endif
}
}
@@ -725,6 +798,13 @@ void ItemView::addAction(QAction *act)
}
}
+void ItemView::addSeparator()
+{
+ QAction *act=new QAction(this);
+ act->setSeparator(true);
+ addAction(act);
+}
+
void ItemView::setMode(Mode m)
{
if (m<0 || m>=Mode_Count || (Mode_GroupedTree==m && !groupedView) || (Mode_Table==m && !tableView)) {
@@ -858,7 +938,7 @@ void ItemView::setLevel(int l, bool haveChildren)
// listView->setAlternatingRowColors(false);
listView->setWordWrap(true);
listView->setDragDropMode(QAbstractItemView::DragOnly);
- static_cast<ActionItemDelegate *>(listView->itemDelegate())->setLargeIcons(iconGridSize.width()>(ActionItemDelegate::constLargeActionIconSize*4));
+ static_cast<ActionItemDelegate *>(listView->itemDelegate())->setLargeIcons(true);
}
} else if(QListView::ListMode!=listView->viewMode()) {
listView->setGridSize(listGridSize);
@@ -1231,6 +1311,18 @@ void ItemView::hideSpinner()
}
}
+void ItemView::updating()
+{
+ showSpinner();
+ showMessage(i18n("Updating..."), -1);
+}
+
+void ItemView::updated()
+{
+ hideSpinner();
+ showMessage(QString(), 0);
+}
+
void ItemView::collectionRemoved(quint32 key)
{
if (groupedView) {
@@ -1366,6 +1458,9 @@ void ItemView::searchActive(bool a)
if (!a && view()->isVisible()) {
view()->setFocus();
}
+ view()->setProperty(ProxyStyle::constModifyFrameProp, Utils::touchFriendly()
+ ? (a ? 0 : ProxyStyle::VF_Top)
+ : (a ? ProxyStyle::VF_Side : (ProxyStyle::VF_Side|ProxyStyle::VF_Top)));
}
void ItemView::collapseToLevel()
diff --git a/widgets/itemview.h b/widgets/itemview.h
index b37ad5c..3b180d0 100644
--- a/widgets/itemview.h
+++ b/widgets/itemview.h
@@ -100,6 +100,7 @@ public:
void allowGroupedView();
void allowTableView(TableView *v);
void addAction(QAction *act);
+ void addSeparator();
void setMode(Mode m);
Mode viewMode() const { return mode; }
QAbstractItemView * view() const;
@@ -151,6 +152,8 @@ public Q_SLOTS:
void focusView();
void showSpinner(bool v=true);
void hideSpinner();
+ void updating();
+ void updated();
void collectionRemoved(quint32 key);
void updateRows();
void updateRows(const QModelIndex &idx);
diff --git a/widgets/itemview.ui b/widgets/itemview.ui
index 41ef8c0..538f128 100644
--- a/widgets/itemview.ui
+++ b/widgets/itemview.ui
@@ -44,7 +44,7 @@
<number>0</number>
</property>
<item>
- <widget class="QToolButton" name="backButton"/>
+ <widget class="FlatToolButton" name="backButton"/>
</item>
<item>
<widget class="ListView" name="listView"/>
@@ -57,6 +57,11 @@
</widget>
<customwidgets>
<customwidget>
+ <class>FlatToolButton</class>
+ <extends>QToolButton</extends>
+ <header>support/flattoolbutton.h</header>
+ </customwidget>
+ <customwidget>
<class>PaddedSqueezedTextLabel</class>
<extends>QLabel</extends>
<header>support/squeezedtextlabel.h</header>
diff --git a/widgets/listview.cpp b/widgets/listview.cpp
index 1e9b2af..f44e139 100644
--- a/widgets/listview.cpp
+++ b/widgets/listview.cpp
@@ -121,7 +121,9 @@ void ListView::setBackgroundImage(const QIcon &icon)
if (!icon.isNull()) {
pal.setColor(QPalette::Base, Qt::transparent);
}
+ #ifndef Q_OS_MAC
setPalette(pal);
+ #endif
viewport()->setPalette(pal);
bgnd=TreeView::createBgndPixmap(icon);
}
diff --git a/widgets/messageoverlay.cpp b/widgets/messageoverlay.cpp
index 63001c8..bb4f1c5 100644
--- a/widgets/messageoverlay.cpp
+++ b/widgets/messageoverlay.cpp
@@ -34,6 +34,11 @@
MessageOverlay::MessageOverlay(QObject *p)
: QWidget(0)
, timer(0)
+ #ifdef Q_OS_MAC
+ , closeOnLeft(true)
+ #else
+ , closeOnLeft(Utils::Unity==Utils::currentDe())
+ #endif
{
Q_UNUSED(p)
spacing=fontMetrics().height();
@@ -43,11 +48,7 @@ MessageOverlay::MessageOverlay(QObject *p)
cancelButton=new ToolButton(this);
Icon::init(cancelButton);
cancelButton->setToolTip(i18n("Cancel"));
- Icon icon=Icon("dialog-close");
- if (icon.isNull()) {
- icon=Icon("window-close");
- }
- cancelButton->setIcon(icon);
+ cancelButton->setIcon(Icon::std(Icon::Close));
cancelButton->adjustSize();
connect(cancelButton, SIGNAL(clicked()), SIGNAL(cancel()));
}
@@ -96,8 +97,15 @@ void MessageOverlay::paintEvent(QPaintEvent *)
p.drawPath(path);
int pad=r.height()/4;
- rf.adjust(pad, pad, cancelButton->isVisible() ? -((pad*2)+cancelButton->width()) : -pad, -pad);
-
+ if (cancelButton->isVisible()) {
+ if (Qt::LeftToRight==layoutDirection() && !closeOnLeft) {
+ rf.adjust(pad, pad, -((pad*2)+cancelButton->width()), -pad);
+ } else {
+ rf.adjust(((pad*2)+cancelButton->width()), pad, -pad, -pad);
+ }
+ } else {
+ rf.adjust(pad, pad, -pad, -pad);
+ }
QFont fnt(QApplication::font());
fnt.setBold(true);
QFontMetrics fm(fnt);
@@ -133,7 +141,7 @@ void MessageOverlay::setSizeAndPosition()
if (currentWidth!=desiredWidth) {
int pad=height()/4;
resize(desiredWidth, height());
- cancelButton->move(QPoint(Qt::LeftToRight==layoutDirection()
+ cancelButton->move(QPoint(Qt::LeftToRight==layoutDirection() && !closeOnLeft
? desiredWidth-(cancelButton->width()+pad)
: pad,
(height()-cancelButton->height())/2));
diff --git a/widgets/messageoverlay.h b/widgets/messageoverlay.h
index 146923a..863da9d 100644
--- a/widgets/messageoverlay.h
+++ b/widgets/messageoverlay.h
@@ -56,6 +56,7 @@ private:
QString text;
ToolButton *cancelButton;
QTimer *timer;
+ bool closeOnLeft;
};
#endif
diff --git a/widgets/notelabel.cpp b/widgets/notelabel.cpp
new file mode 100644
index 0000000..8281f27
--- /dev/null
+++ b/widgets/notelabel.cpp
@@ -0,0 +1,93 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "notelabel.h"
+#include "support/utils.h"
+#include "support/localize.h"
+#include <QVBoxLayout>
+#include <QFont>
+
+static void init(QLabel *label)
+{
+ static const int constMinFontSize=9;
+
+ label->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop);
+ label->setWordWrap(true);
+ label->setTextInteractionFlags(Qt::NoTextInteraction);
+ if (label->font().pointSize()>constMinFontSize) {
+ label->setFont(Utils::smallFont(label->font()));
+ }
+}
+
+static QLabel * init(QWidget *p, bool url)
+{
+ int layoutSpacing=Utils::layoutSpacing(p);
+ int spacing=p->fontMetrics().height()*(Utils::limitedHeight(p) ? 0.25 : 1.0)-layoutSpacing;
+ if (spacing<layoutSpacing) {
+ spacing=layoutSpacing;
+ }
+
+ QVBoxLayout *l=new QVBoxLayout(p);
+ l->setMargin(0);
+ l->setSpacing(0);
+ QLabel *label;
+ if (url) {
+ label=new UrlLabel(p);
+ } else {
+ label=new StateLabel(p);
+ }
+ init(label);
+ l->addItem(new QSpacerItem(2, spacing, QSizePolicy::Fixed, QSizePolicy::Fixed));
+ l->addWidget(label);
+ return label;
+}
+
+void NoteLabel::setText(QLabel *l, const QString &text)
+{
+ l->setText(i18n("<i><b>NOTE:</b> %1</i>", text));
+}
+
+NoteLabel::NoteLabel(QWidget *parent)
+ : QWidget(parent)
+{
+ label=static_cast<StateLabel *>(init(this, false));
+}
+
+UrlNoteLabel::UrlNoteLabel(QWidget *parent)
+ : QWidget(parent)
+{
+ label=static_cast<UrlLabel *>(init(this, true));
+ connect(label, SIGNAL(leftClickedUrl()), this, SIGNAL(leftClickedUrl()));
+}
+
+PlainNoteLabel::PlainNoteLabel(QWidget *parent)
+ : StateLabel(parent)
+{
+ init(this);
+}
+
+PlainUrlNoteLabel::PlainUrlNoteLabel(QWidget *parent)
+ : UrlLabel(parent)
+{
+ init(this);
+}
diff --git a/widgets/notelabel.h b/widgets/notelabel.h
new file mode 100644
index 0000000..b0fcdb2
--- /dev/null
+++ b/widgets/notelabel.h
@@ -0,0 +1,72 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef NOTELABEL_H
+#define NOTELABEL_H
+
+#include <QWidget>
+#include "statelabel.h"
+#include "support/urllabel.h"
+
+class NoteLabel : public QWidget
+{
+public:
+ static void setText(QLabel *l, const QString &text);
+ NoteLabel(QWidget *parent=0);
+ void setText(const QString &text) { setText(label, text); }
+ void appendText(const QString &text) { label->setText(label->text()+text); }
+ QString text() const { return label->text(); }
+ void setOn(bool o) { label->setOn(o); }
+private:
+ StateLabel *label;
+};
+
+class UrlNoteLabel : public QWidget
+{
+ Q_OBJECT
+public:
+ UrlNoteLabel(QWidget *parent=0);
+ void setText(const QString &text) { NoteLabel::setText(label, text); }
+ void appendText(const QString &text) { label->setText(label->text()+text); }
+ QString text() const { return label->text(); }
+Q_SIGNALS:
+ void leftClickedUrl();
+private:
+ UrlLabel *label;
+};
+
+class PlainNoteLabel : public StateLabel
+{
+public:
+ PlainNoteLabel(QWidget *parent=0);
+ void setText(const QString &text) { NoteLabel::setText(this, text); }
+};
+
+class PlainUrlNoteLabel : public UrlLabel
+{
+public:
+ PlainUrlNoteLabel(QWidget *parent=0);
+ void setText(const QString &text) { NoteLabel::setText(this, text); }
+};
+
+#endif
diff --git a/widgets/nowplayingwidget.cpp b/widgets/nowplayingwidget.cpp
index c71a9c7..08cb9ad 100644
--- a/widgets/nowplayingwidget.cpp
+++ b/widgets/nowplayingwidget.cpp
@@ -22,25 +22,31 @@
*/
#include "nowplayingwidget.h"
+#include "ratingwidget.h"
+#include "volumeslider.h"
#include "mpd/song.h"
#include "gui/settings.h"
#include "mpd/mpdconnection.h"
#include "support/squeezedtextlabel.h"
#include "support/utils.h"
#include "support/localize.h"
+#ifdef Q_OS_MAC
+#include "support/osxstyle.h"
+#endif
#include <QLabel>
-#include <QGridLayout>
+#include <QBoxLayout>
#include <QProxyStyle>
#include <QTimer>
#include <QApplication>
#include <QMouseEvent>
#include <QSlider>
#include <QToolTip>
+#include <QSpacerItem>
-class ProxyStyle : public QProxyStyle
+class PosSliderProxyStyle : public QProxyStyle
{
public:
- ProxyStyle()
+ PosSliderProxyStyle()
: QProxyStyle()
{
setBaseStyle(qApp->style());
@@ -116,7 +122,11 @@ public:
break;
case QEvent::HoverEnter:
if (isEnabled()) {
+ #ifdef Q_OS_MAC
+ setStyleSheet(QString("QLabel{color:%1;}").arg(OSXStyle::self()->viewPalette().highlight().color().name()));
+ #else
setStyleSheet(QLatin1String("QLabel{color:palette(highlight);}"));
+ #endif
}
break;
case QEvent::HoverLeave:
@@ -137,49 +147,44 @@ protected:
PosSlider::PosSlider(QWidget *p)
: QSlider(p)
- , shown(false)
{
setPageStep(0);
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
setFocusPolicy(Qt::NoFocus);
- setStyle(new ProxyStyle());
- int h=fontMetrics().height()*0.5;
+ setStyle(new PosSliderProxyStyle());
+ int h=qMax((int)(fontMetrics().height()*0.5), 8);
setMinimumHeight(h);
setMaximumHeight(h);
updateStyleSheet();
setMouseTracking(true);
}
-void PosSlider::showEvent(QShowEvent *e)
-{
- QSlider::showEvent(e);
- if (!shown) {
- updateStyleSheet();
- shown=true;
- }
-}
-
void PosSlider::updateStyleSheet()
{
int lineWidth=maximumHeight()>12 ? 2 : 1;
QString boderFormat=QLatin1String("QSlider::groove:horizontal { border: %1px solid rgba(%2, %3, %4, %5); "
- "background: solid rgba(%6, %7, %8, %9); "
- "border-radius: %10px } ");
+ "background: solid rgba(%2, %3, %4, %6); "
+ "border-radius: %7px } ");
QString fillFormat=QLatin1String("QSlider::")+QLatin1String(isRightToLeft() ? "add" : "sub")+
- QLatin1String("-page:horizontal {border: %1px solid palette(highlight); "
- "background: solid palette(highlight); "
- "border-radius: %2px; margin: %3px;}")+
+ QLatin1String("-page:horizontal {border: %1px solid rgb(%3, %4, %5); "
+ "background: solid rgb(%3, %4, %5); "
+ "border-radius: %1px; margin: %2px} ")+
QLatin1String("QSlider::")+QLatin1String(isRightToLeft() ? "add" : "sub")+
QLatin1String("-page:horizontal:disabled {border: 0px; background: solid rgba(0, 0, 0, 0)}");
QLabel lbl(parentWidget());
lbl.ensurePolished();
QColor textColor=lbl.palette().color(QPalette::Active, QPalette::Text);
+ #ifdef Q_OS_MAC
+ QColor fillColor=OSXStyle::self()->viewPalette().highlight().color();
+ #else
+ QColor fillColor=lbl.palette().highlight().color();
+ #endif
int alpha=textColor.value()<32 ? 96 : 64;
setStyleSheet(boderFormat.arg(lineWidth).arg(textColor.red()).arg(textColor.green()).arg(textColor.blue()).arg(alpha)
- .arg(textColor.red()).arg(textColor.green()).arg(textColor.blue()).arg(alpha/4).arg(lineWidth*2)+
- fillFormat.arg(lineWidth).arg(lineWidth).arg(lineWidth*2));
+ .arg(alpha/4).arg(lineWidth*2)+
+ fillFormat.arg(lineWidth).arg(lineWidth*2).arg(fillColor.red()).arg(fillColor.green()).arg(fillColor.blue()));
}
void PosSlider::mouseMoveEvent(QMouseEvent *e)
@@ -246,6 +251,7 @@ void PosSlider::setRange(int min, int max)
NowPlayingWidget::NowPlayingWidget(QWidget *p)
: QWidget(p)
+ , shown(false)
, timer(0)
, lastVal(0)
, pollCount(0)
@@ -255,6 +261,7 @@ NowPlayingWidget::NowPlayingWidget(QWidget *p)
artist=new SqueezedTextLabel(this);
slider=new PosSlider(this);
time=new TimeLabel(this, slider);
+ ratingWidget=new RatingWidget(this);
QFont f=track->font();
QFont small=Utils::smallFont(f);
f.setBold(true);
@@ -262,14 +269,28 @@ NowPlayingWidget::NowPlayingWidget(QWidget *p)
artist->setFont(small);
time->setFont(small);
slider->setOrientation(Qt::Horizontal);
- QGridLayout *layout=new QGridLayout(this);
+ QBoxLayout *layout=new QBoxLayout(QBoxLayout::TopToBottom, this);
+ QBoxLayout *topLayout=new QBoxLayout(QBoxLayout::LeftToRight, 0);
+ QBoxLayout *botLayout=new QBoxLayout(QBoxLayout::LeftToRight, 0);
int space=Utils::layoutSpacing(this);
+ #ifdef Q_OS_MAC
+ layout->setContentsMargins(space, 0, space, 0);
+ #else
layout->setMargin(space);
+ #endif
layout->setSpacing(space/2);
- layout->addWidget(track, 0, 0, 1, 2);
- layout->addWidget(artist, 1, 0);
- layout->addWidget(time, 1, 1);
- layout->addWidget(slider, 3, 0, 1, 2);
+ topLayout->setMargin(0);
+ botLayout->setMargin(0);
+ topLayout->setSpacing(space/2);
+ botLayout->setSpacing(space/2);
+ topLayout->addWidget(track);
+ topLayout->addWidget(ratingWidget);
+ layout->addLayout(topLayout);
+ botLayout->addWidget(artist);
+ botLayout->addWidget(time);
+ layout->addLayout(botLayout);
+ layout->addItem(new QSpacerItem(1, space/4, QSizePolicy::Fixed, QSizePolicy::Fixed));
+ layout->addWidget(slider);
connect(slider, SIGNAL(sliderPressed()), this, SLOT(pressed()));
connect(slider, SIGNAL(sliderReleased()), this, SLOT(released()));
connect(slider, SIGNAL(positionSet()), this, SIGNAL(sliderReleased()));
@@ -280,11 +301,18 @@ NowPlayingWidget::NowPlayingWidget(QWidget *p)
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
clearTimes();
update(Song());
+ connect(ratingWidget, SIGNAL(valueChanged(int)), SLOT(setRating(int)));
+ connect(this, SIGNAL(setRating(QString,quint8)), MPDConnection::self(), SLOT(setRating(QString,quint8)));
}
void NowPlayingWidget::update(const Song &song)
{
QString name=song.name();
+ currentSongFile=song.file;
+ ratingWidget->setEnabled(!song.isEmpty() && Song::Standard==song.type);
+ if (!ratingWidget->isEnabled()) {
+ ratingWidget->setValue(0);
+ }
if (song.isEmpty()) {
track->setText(" ");
artist->setText(" ");
@@ -361,11 +389,23 @@ int NowPlayingWidget::value() const
return slider->value();
}
+void NowPlayingWidget::readConfig()
+{
+ ratingWidget->setVisible(Settings::self()->showRatingWidget());
+}
+
void NowPlayingWidget::saveConfig()
{
time->saveConfig();
}
+void NowPlayingWidget::rating(const QString &file, quint8 r)
+{
+ if (file==currentSongFile) {
+ ratingWidget->setValue(r);
+ }
+}
+
void NowPlayingWidget::updateTimes()
{
if (slider->value()<172800 && slider->value() != slider->maximum()) {
@@ -400,3 +440,18 @@ void NowPlayingWidget::released()
}
emit sliderReleased();
}
+
+void NowPlayingWidget::setRating(int v)
+{
+ emit setRating(currentSongFile, v);
+}
+
+void NowPlayingWidget::showEvent(QShowEvent *e)
+{
+ QWidget::showEvent(e);
+ if (!shown) {
+ slider->updateStyleSheet();
+ shown=true;
+ ratingWidget->setColor(VolumeSlider::clampColor(track->palette().text().color()));
+ }
+}
diff --git a/widgets/nowplayingwidget.h b/widgets/nowplayingwidget.h
index 4139e87..f474b74 100644
--- a/widgets/nowplayingwidget.h
+++ b/widgets/nowplayingwidget.h
@@ -32,6 +32,7 @@ class QTimer;
class QLabel;
class SqueezedTextLabel;
class TimeLabel;
+class RatingWidget;
struct Song;
class PosSlider : public QSlider
@@ -41,7 +42,6 @@ public:
PosSlider(QWidget *p);
virtual ~PosSlider() { }
- void showEvent(QShowEvent *e);
void updateStyleSheet();
void mouseMoveEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *ev);
@@ -49,9 +49,6 @@ public:
Q_SIGNALS:
void positionSet();
-
-private:
- bool shown;
};
class NowPlayingWidget : public QWidget
@@ -67,6 +64,7 @@ public:
void setRange(int min, int max);
void clearTimes();
int value() const;
+ void readConfig();
void saveConfig();
void setEnabled(bool e) { slider->setEnabled(e); }
bool isEnabled() const { return slider->isEnabled(); }
@@ -75,20 +73,31 @@ Q_SIGNALS:
void sliderReleased();
void mpdPoll();
+ void setRating(const QString &file, quint8 r);
+
+public Q_SLOTS:
+ void rating(const QString &file, quint8 r);
private Q_SLOTS:
void updateTimes();
void updatePos();
void pressed();
void released();
+ void setRating(int v);
private:
+ void showEvent(QShowEvent *e);
+
+private:
+ bool shown;
SqueezedTextLabel *track;
SqueezedTextLabel *artist;
TimeLabel *time;
PosSlider *slider;
+ RatingWidget *ratingWidget;
QTimer *timer;
QTime startTime;
+ QString currentSongFile;
int lastVal;
int pollCount;
int pollMpd;
diff --git a/widgets/playqueueview.cpp b/widgets/playqueueview.cpp
index 6e8c4e6..3627b05 100644
--- a/widgets/playqueueview.cpp
+++ b/widgets/playqueueview.cpp
@@ -35,9 +35,11 @@
#include "basicitemdelegate.h"
#include "icons.h"
#include "support/gtkstyle.h"
+#include "support/proxystyle.h"
#include "support/actioncollection.h"
#include "support/action.h"
#include "models/roles.h"
+#include "widgets/ratingwidget.h"
#include <QFile>
#include <QPainter>
#include <QApplication>
@@ -49,8 +51,8 @@ void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bo
class PlayQueueTreeViewItemDelegate : public BasicItemDelegate
{
public:
- PlayQueueTreeViewItemDelegate(QObject *p) : BasicItemDelegate(p) { }
- virtual ~PlayQueueTreeViewItemDelegate() { }
+ PlayQueueTreeViewItemDelegate(QObject *p) : BasicItemDelegate(p), ratingPainter(0) { }
+ virtual ~PlayQueueTreeViewItemDelegate() { delete ratingPainter; }
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (!index.isValid()) {
@@ -67,7 +69,28 @@ public:
}
BasicItemDelegate::paint(painter, v4, index);
+
+ if (index.column()==PlayQueueModel::COL_RATING) {
+ Song song=index.data(Cantata::Role_SongWithRating).value<Song>();
+ if (song.rating>0 && song.rating<=Song::Rating_Max) {
+ const QRect &r=option.rect;
+ if (!ratingPainter) {
+ ratingPainter=new RatingPainter(r.height()-4);
+ ratingPainter->setColor(option.palette.color(QPalette::Active, QPalette::Text));
+ }
+ painter->save();
+ painter->setOpacity(painter->opacity()*0.75);
+ painter->setClipRect(r);
+ const QSize &ratingSize=ratingPainter->size();
+ QRect ratingRect(r.x()+(r.width()-ratingSize.width())/2, r.y()+(r.height()-ratingSize.height())/2,
+ ratingSize.width(), ratingSize.height());
+ ratingPainter->paint(painter, ratingRect, song.rating);
+ painter->restore();
+ }
+ }
}
+
+ mutable RatingPainter *ratingPainter;
};
PlayQueueTreeView::PlayQueueTreeView(PlayQueueView *parent)
@@ -190,15 +213,19 @@ void PlayQueueView::setMode(ItemView::Mode m)
case ItemView::Mode_GroupedTree:
if (!groupedView) {
groupedView=new PlayQueueGroupedView(this);
+ groupedView->setContextMenuPolicy(Qt::ActionsContextMenu);
groupedView->setIndentation(0);
groupedView->setItemsExpandable(false);
groupedView->setExpandsOnDoubleClick(false);
- groupedView->setContextMenuPolicy(Qt::ActionsContextMenu);
groupedView->installFilter(new KeyEventHandler(groupedView, removeFromAction));
addWidget(groupedView);
connect(groupedView, SIGNAL(itemsSelected(bool)), SIGNAL(itemsSelected(bool)));
connect(groupedView, SIGNAL(doubleClicked(const QModelIndex &)), SIGNAL(doubleClicked(const QModelIndex &)));
updatePalette();
+ #ifdef Q_OS_MAC
+ groupedView->setAttribute(Qt::WA_MacShowFocusRect, 0);
+ #endif
+ groupedView->setProperty(ProxyStyle::constModifyFrameProp, ProxyStyle::VF_Top);
}
break;
case ItemView::Mode_Table:
@@ -211,6 +238,10 @@ void PlayQueueView::setMode(ItemView::Mode m)
connect(treeView, SIGNAL(itemsSelected(bool)), SIGNAL(itemsSelected(bool)));
connect(treeView, SIGNAL(doubleClicked(const QModelIndex &)), SIGNAL(doubleClicked(const QModelIndex &)));
updatePalette();
+ #ifdef Q_OS_MAC
+ treeView->setAttribute(Qt::WA_MacShowFocusRect, 0);
+ #endif
+ treeView->setProperty(ProxyStyle::constModifyFrameProp, ProxyStyle::VF_Top);
}
default:
break;
@@ -408,11 +439,15 @@ void PlayQueueView::updatePalette()
pal.setColor(QPalette::Base, Qt::transparent);
}
if (groupedView) {
+ #ifndef Q_OS_MAC
groupedView->setPalette(pal);
+ #endif
groupedView->viewport()->setPalette(pal);
}
if (treeView) {
+ #ifndef Q_OS_MAC
treeView->setPalette(pal);
+ #endif
treeView->viewport()->setPalette(pal);
}
}
@@ -466,6 +501,11 @@ void PlayQueueView::streamFetchStatus(const QString &msg)
msgOverlay->setText(msg);
}
+void PlayQueueView::searchActive(bool a)
+{
+ view()->setProperty(ProxyStyle::constModifyFrameProp, a ? 0 : ProxyStyle::VF_Top);
+}
+
void PlayQueueView::drawBackdrop(QWidget *widget, const QSize &size)
{
if (BI_None==backgroundImageType) {
diff --git a/widgets/playqueueview.h b/widgets/playqueueview.h
index 262f262..f5fcd7e 100644
--- a/widgets/playqueueview.h
+++ b/widgets/playqueueview.h
@@ -41,7 +41,6 @@ class QAction;
class Action;
class QItemSelectionModel;
class QModelIndex;
-class QMenu;
class Spinner;
class PlayQueueView;
class MessageOverlay;
@@ -117,6 +116,7 @@ public Q_SLOTS:
void hideSpinner();
void setImage(const QImage &img);
void streamFetchStatus(const QString &msg);
+ void searchActive(bool a);
Q_SIGNALS:
void itemsSelected(bool);
diff --git a/widgets/ratingwidget.cpp b/widgets/ratingwidget.cpp
new file mode 100644
index 0000000..7b17fed
--- /dev/null
+++ b/widgets/ratingwidget.cpp
@@ -0,0 +1,207 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "ratingwidget.h"
+#include "support/icon.h"
+#include "mpd/song.h"
+#include <QMouseEvent>
+#include <QPainter>
+#include <QFontMetrics>
+#include <QSvgRenderer>
+#include <QApplication>
+#include <QLabel>
+
+static bool allowHalfStars=true; // TODO: Make this configurable???
+static const int constNumStars=Song::Rating_Max/Song::Rating_Step;
+static const int constBorder=2;
+
+RatingPainter::RatingPainter(int s)
+ : starSz(s)
+ , pixmapSize((starSz*constNumStars)+(constBorder*(constNumStars-1)), starSz)
+ , col(QApplication::palette().text().color())
+{
+ #if QT_VERSION >= 0x050100
+ pixelRatio=Icon("dialog-ok").pixmap(16, 16).devicePixelRatio();
+ #endif
+}
+
+void RatingPainter::paint(QPainter *p, const QRect &r, int rating)
+{
+ if (rating<0 || rating>Song::Rating_Max) {
+ return;
+ }
+
+ #if QT_VERSION >= 0x050100
+ if (!isNull() && !Utils::equal(pixelRatio, pixmaps[0].devicePixelRatio())) {
+ pixmaps[0]=QPixmap();
+ }
+ #endif
+
+ if (isNull()) {
+ QSvgRenderer renderer;
+ QFile f(":stars.svg");
+ QByteArray bytes;
+ if (f.open(QIODevice::ReadOnly)) {
+ bytes=f.readAll();
+ }
+ if (!bytes.isEmpty()) {
+ bytes.replace("#000", col.name().toLatin1());
+ #if QT_VERSION >= 0x050100
+ if (pixelRatio>1.25) {
+ bytes.replace("stroke-width=\"3\"", "stroke-width=\"6\"");
+ }
+ #endif
+ }
+ renderer.load(bytes);
+
+ #if QT_VERSION >= 0x050100
+ int pixSize=starSz*pixelRatio;
+ #else
+ int pixSize=starSz;
+ #endif
+
+ for (int p=0; p<2; ++p) {
+ pixmaps[p]=QPixmap(pixSize, pixSize);
+ pixmaps[p].fill(Qt::transparent);
+ QPainter painter(&(pixmaps[p]));
+ renderer.render(&painter, 1==p ? "on" : "off", QRectF(0, 0, pixSize, pixSize));
+ }
+ pixmaps[2]=QPixmap(pixSize, pixSize);
+ pixmaps[2].fill(Qt::transparent);
+ QPainter painter(&(pixmaps[2]));
+ int halfSz=(pixSize/2.0)+0.5;
+ painter.drawPixmap(0, 0, pixmaps[1], 0, 0, halfSz, pixSize);
+ painter.drawPixmap(halfSz, 0, pixmaps[0], halfSz, 0, pixSize-halfSz, pixSize);
+ #if QT_VERSION >= 0x050100
+ painter.end();
+ for (int p=0; p<3; ++p) {
+ pixmaps[p].setDevicePixelRatio(pixelRatio);
+ }
+ #endif
+ }
+
+ int fullStars=rating/Song::Rating_Step;
+ bool half=allowHalfStars && rating%Song::Rating_Step;
+ #if QT_VERSION >= 0x050100
+ QSize layoutSize = pixmaps[0].size() / pixmaps[0].devicePixelRatio();
+ #else
+ QSize layoutSize = pixmaps[0].size();
+ #endif
+ QRect pr(r.x(), r.y()+(r.height()-layoutSize.width())/2, layoutSize.width(), layoutSize.height());
+
+ for (int i=0; i<constNumStars; ++i) {
+ p->drawPixmap(pr, pixmaps[half && i==fullStars ? 2 : i<fullStars ? 1 : 0]);
+ pr.setX(pr.x()+layoutSize.width()+constBorder);
+ }
+}
+
+void RatingPainter::setColor(const QColor &c)
+{
+ if (col!=c) {
+ col=c;
+ if (!isNull()) {
+ pixmaps[0]=QPixmap();
+ }
+ }
+}
+
+RatingWidget::RatingWidget(QWidget *parent)
+ : QWidget(parent)
+ , rp(Icon::stdSize(QApplication::fontMetrics().height()*0.9))
+ , val(0)
+ , hoverVal(-1)
+ , showZeroForNull(false)
+{
+ setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ setMouseTracking(true);
+ setFixedSize(rp.size());
+}
+
+void RatingWidget::setValue(int v)
+{
+ val = v;
+ update();
+}
+
+void RatingWidget::setColor(const QColor &c)
+{
+ if (c!=rp.color()) {
+ rp.setColor(c);
+ if (!rp.isNull()) {
+ update();
+ }
+ }
+}
+
+void RatingWidget::paintEvent(QPaintEvent *e)
+{
+ Q_UNUSED(e)
+ QPainter p(this);
+ if (!isEnabled()) {
+ p.setOpacity(0.5);
+ }
+ rp.paint(&p, rect(), -1==hoverVal ? (showZeroForNull && val==Song::Rating_Null ? 0 : val) : hoverVal);
+}
+
+void RatingWidget::mousePressEvent(QMouseEvent *e)
+{
+ Q_UNUSED(e)
+ val = valueForPos(e->pos());
+ emit valueChanged(val);
+}
+
+void RatingWidget::mouseMoveEvent(QMouseEvent *e)
+{
+ Q_UNUSED(e)
+ hoverVal = valueForPos(e->pos());
+ update();
+}
+
+void RatingWidget::leaveEvent(QEvent *e)
+{
+ Q_UNUSED(e)
+ hoverVal = -1;
+ update();
+}
+
+QRect RatingWidget::contentsRect() const
+{
+ const QRect &r=rect();
+ const int width = rp.size().width();
+ const int x = r.x() + (r.width() - width) / 2;
+ return QRect(x, r.y(), width, r.height());
+}
+
+int RatingWidget::valueForPos(const QPoint &pos) const
+{
+ const QRect contents = contentsRect();
+ const double raw = double(pos.x() - contents.left()) / contents.width();
+ if (!allowHalfStars) {
+ int v=(raw*Song::Rating_Max);
+ if (v%Song::Rating_Step) {
+ v++;
+ }
+ return v;
+ }
+ return (raw*Song::Rating_Max)+0.5;
+}
diff --git a/widgets/ratingwidget.h b/widgets/ratingwidget.h
new file mode 100644
index 0000000..570b520
--- /dev/null
+++ b/widgets/ratingwidget.h
@@ -0,0 +1,87 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef RATINGWIDGET_H
+#define RATINGWIDGET_H
+
+#include <QWidget>
+#include <QPixmap>
+
+class RatingPainter
+{
+public:
+ RatingPainter(int s);
+
+ void paint(QPainter *p, const QRect &r, int rating);
+ int starSize() const { return starSz; }
+ void setColor(const QColor &c);
+ const QColor & color() const { return col; }
+ const QSize & size() const { return pixmapSize; }
+ bool isNull() const { return pixmaps[0].isNull(); }
+
+private:
+ int starSz;
+ QSize pixmapSize;
+ QColor col;
+ QPixmap pixmaps[3];
+ #if QT_VERSION >= 0x050100
+ double pixelRatio;
+ #endif
+};
+
+class RatingWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+
+ RatingWidget(QWidget *parent = 0);
+
+ QSize sizeHint() const { return rp.size(); }
+ int value() const { return val; }
+ void setValue(int v);
+ void setColor(const QColor &c);
+ void setShowZeroForNull(bool s) { showZeroForNull=s; }
+
+Q_SIGNALS:
+ void valueChanged(int v);
+
+protected:
+ void paintEvent(QPaintEvent *e);
+ void mousePressEvent(QMouseEvent *e);
+ void mouseMoveEvent(QMouseEvent *e);
+ void leaveEvent(QEvent *e);
+
+private:
+ QRect contentsRect() const;
+ int valueForPos(const QPoint &pos) const;
+ QColor getColor() const;
+
+private:
+ RatingPainter rp;
+ int val;
+ int hoverVal;
+ bool showZeroForNull;
+};
+
+#endif
diff --git a/widgets/searchwidget.cpp b/widgets/searchwidget.cpp
index c92db4c..cf20290 100644
--- a/widgets/searchwidget.cpp
+++ b/widgets/searchwidget.cpp
@@ -28,6 +28,7 @@
#include <QGridLayout>
#include <QKeyEvent>
#include <QKeySequence>
+#include <QSpacerItem>
class EscKeyEventHandler : public QObject
{
@@ -57,20 +58,29 @@ SearchWidget::SearchWidget(QWidget *p)
{
QGridLayout *l=new QGridLayout(this);
l->setMargin(0);
+ #ifdef Q_OS_MAC
+ l->setSpacing(2);
+ bool closeOnLeft=true;
+ #else
l->setSpacing(0);
+ bool closeOnLeft=Utils::Unity==Utils::currentDe();
+ #endif
label=new SqueezedTextLabel(this);
edit=new LineEdit(this);
edit->setPlaceholderText(i18n("Search..."));
- l->addWidget(label, 0, 0, 1, 3);
- l->addWidget(edit, 1, 1);
closeButton=new ToolButton(this);
closeButton->setToolTip(i18n("Close Search Bar")+QLatin1String(" (")+QKeySequence(Qt::Key_Escape).toString()+QLatin1Char(')'));
- l->addWidget(closeButton, 1, 2);
- Icon icon=Icon("dialog-close");
- if (icon.isNull()) {
- icon=Icon("window-close");
+
+ l->addWidget(label, 0, 0, 1, 3);
+ if (closeOnLeft) {
+ l->addWidget(closeButton, 1, 1);
+ l->addWidget(edit, 1, 2);
+ } else {
+ l->addWidget(edit, 1, 1);
+ l->addWidget(closeButton, 1, 2);
}
- closeButton->setIcon(icon);
+
+ closeButton->setIcon(Icon::std(Icon::Close));
Icon::init(closeButton);
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
connect(edit, SIGNAL(textChanged(QString)), SIGNAL(textChanged(QString)));
@@ -103,10 +113,12 @@ void SearchWidget::setCategories(const QList<QPair<QString, QString> > &categori
{
QString currentCat;
if (!cat) {
- cat=new ComboBox(this);
- ((QGridLayout *)layout())->addWidget(cat, 1, 0);
- connect(cat, SIGNAL(currentIndexChanged(int)), SIGNAL(returnPressed()));
+ cat=new SelectorLabel(this);
+ QGridLayout *l=static_cast<QGridLayout *>(layout());
+ l->addWidget(cat, 1, 0);
+ connect(cat, SIGNAL(activated(int)), SIGNAL(returnPressed()));
setTabOrder(cat, edit);
+ cat->setFixedHeight(edit->height());
} else {
currentCat=category();
if (!currentCat.isEmpty()) {
@@ -124,15 +136,15 @@ void SearchWidget::setCategories(const QList<QPair<QString, QString> > &categori
if (!currentCat.isEmpty()) {
for (int i=0; i<cat->count(); ++i) {
- if (cat->itemData(i).toString()==currentCat) {
+ if (cat->itemData(i)==currentCat) {
cat->setCurrentIndex(i);
cat->blockSignals(false);
return;
}
}
- cat->blockSignals(false);
- cat->setCurrentIndex(0);
}
+ cat->blockSignals(false);
+ cat->setCurrentIndex(0);
}
void SearchWidget::setCategory(const QString &id)
@@ -141,7 +153,7 @@ void SearchWidget::setCategory(const QString &id)
return;
}
for (int i=0; i<cat->count(); ++i) {
- if (cat->itemData(i).toString()==id) {
+ if (cat->itemData(i)==id) {
cat->setCurrentIndex(i);
return;
}
diff --git a/widgets/searchwidget.h b/widgets/searchwidget.h
index 92cda95..5e27e5a 100644
--- a/widgets/searchwidget.h
+++ b/widgets/searchwidget.h
@@ -27,7 +27,7 @@
#include "support/lineedit.h"
#include "toolbutton.h"
#include "support/squeezedtextlabel.h"
-#include "support/combobox.h"
+#include "selectorlabel.h"
#include <QSet>
#include <QList>
#include <QPair>
@@ -44,7 +44,7 @@ public:
void setLabel(const QString &s);
void setText(const QString &t) { edit->setText(t); }
QString text() const { return edit->text(); }
- QString category() const { return cat ? cat->itemData(cat->currentIndex()).toString() : QString(); }
+ QString category() const { return cat ? cat->itemData(cat->currentIndex()) : QString(); }
void setFocus() { edit->setFocus(); }
bool hasFocus() const { return edit->hasFocus() || (closeButton && closeButton->hasFocus()); }
bool isActive() const { return widgetIsActive; }
@@ -66,7 +66,7 @@ public Q_SLOTS:
private:
SqueezedTextLabel *label;
- ComboBox *cat;
+ SelectorLabel *cat;
LineEdit *edit;
ToolButton *closeButton;
bool widgetIsActive;
diff --git a/widgets/selectorlabel.cpp b/widgets/selectorlabel.cpp
new file mode 100644
index 0000000..0dccbae
--- /dev/null
+++ b/widgets/selectorlabel.cpp
@@ -0,0 +1,138 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "selectorlabel.h"
+#include "support/osxstyle.h"
+#include "support/utils.h"
+#include <QAction>
+#include <QEvent>
+#include <QMouseEvent>
+
+SelectorLabel::SelectorLabel(QWidget *p)
+ : QLabel(p)
+ , current(0)
+ , useArrow(false)
+ , menu(0)
+{
+ setAttribute(Qt::WA_Hover, true);
+ menu=new QMenu(this);
+ #ifdef Q_OS_MAC
+ // Mac text seems to be 2px too high. margin-top fixes this
+ setStyleSheet(QString("QLabel { margin-top: 2px} QLabel:hover {color:%1;}").arg(OSXStyle::self()->viewPalette().highlight().color().name()));
+ #else
+ setStyleSheet(QLatin1String("QLabel:hover {color:palette(highlight);}"));
+ #endif
+ //setMargin(Utils::scaleForDpi(2));
+}
+
+static QString addMarkup(const QString &s, bool arrow)
+{
+ return QLatin1String("<b>")+s+(arrow ? QLatin1String(" ")+QChar(0x25BE) : QString())+QLatin1String("</b>");
+}
+
+void SelectorLabel::addItem(const QString &text, const QString &data)
+{
+ menu->addAction(text, this, SLOT(itemSelected()))->setData(data);
+ setText(addMarkup(text, useArrow));
+ current=menu->actions().count();
+}
+
+void SelectorLabel::itemSelected()
+{
+ QAction *act=qobject_cast<QAction *>(sender());
+ if (act) {
+ setCurrentIndex(menu->actions().indexOf(act));
+ }
+}
+
+bool SelectorLabel::event(QEvent *e)
+{
+ if (!menu) {
+ return QLabel::event(e);
+ }
+ QList<QAction *> actions=menu->actions();
+
+ switch (e->type()) {
+ case QEvent::MouseButtonPress:
+ if (Qt::NoModifier==static_cast<QMouseEvent *>(e)->modifiers() && Qt::LeftButton==static_cast<QMouseEvent *>(e)->button()) {
+ menu->exec(mapToGlobal(QPoint(0, 0)));
+ update();
+ }
+ break;
+ case QEvent::Wheel: {
+ int numDegrees = static_cast<QWheelEvent *>(e)->delta() / 8;
+ int numSteps = numDegrees / 15;
+ int newIndex = current;
+ if (numSteps > 0) {
+ for (int i = 0; i < numSteps; ++i) {
+ newIndex++;
+ if (newIndex>=actions.count()) {
+ newIndex=0;
+ }
+ }
+ } else {
+ for (int i = 0; i > numSteps; --i) {
+ newIndex--;
+ if (newIndex<0) {
+ newIndex=actions.count()-1;
+ }
+ }
+ }
+ setCurrentIndex(newIndex);
+ break;
+ }
+ default:
+ break;
+ }
+ return QLabel::event(e);
+}
+
+void SelectorLabel::setCurrentIndex(int v)
+{
+ if (!menu || v<0 || v==current) {
+ return;
+ }
+
+ QList<QAction *> actions=menu->actions();
+
+ if (v>=actions.count()) {
+ return;
+ }
+ current=v;
+ setText(addMarkup(Utils::strippedText(actions.at(current)->text()), useArrow));
+ emit activated(current);
+}
+
+QString SelectorLabel::itemData(int index) const
+{
+ if (!menu) {
+ return QString();
+ }
+
+ QList<QAction *> actions=menu->actions();
+
+ if (index>=actions.count()) {
+ return QString();
+ }
+ return actions.at(index)->data().toString();
+}
diff --git a/support/buddylabel.h b/widgets/selectorlabel.h
similarity index 59%
copy from support/buddylabel.h
copy to widgets/selectorlabel.h
index 407ffa3..03c4306 100644
--- a/support/buddylabel.h
+++ b/widgets/selectorlabel.h
@@ -21,21 +21,38 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef BUDDYLABEL_H
-#define BUDDYLABEL_H
+#ifndef SELECTOR_LABEL_H
+#define SELECTOR_LABEL_H
#include <QLabel>
+#include <QString>
+#include <QMenu>
-class BuddyLabel : public QLabel
+class QMenu;
+class SelectorLabel : public QLabel
{
+ Q_OBJECT
public:
- BuddyLabel(const QString &text, QWidget *p, QWidget *b=0);
- BuddyLabel(QWidget *p, QWidget *b=0);
- virtual ~BuddyLabel() { }
-
-protected:
+ SelectorLabel(QWidget *p);
+ void setUseArrow(bool a) { useArrow=a; }
+ void clear() { if (menu) menu->clear(); }
+ void addItem(const QString &text, const QString &data);
bool event(QEvent *e);
- void mouseReleaseEvent(QMouseEvent *);
+ int currentIndex() const { return current; }
+ void setCurrentIndex(int v);
+ QString itemData(int index) const;
+ int count() const { return menu ? menu->actions().count() : 0; }
+
+Q_SIGNALS:
+ void activated(int);
+
+private Q_SLOTS:
+ void itemSelected();
+
+private:
+ int current;
+ bool useArrow;
+ QMenu *menu;
};
#endif
diff --git a/widgets/sizewidget.cpp b/widgets/sizewidget.cpp
index d6be074..0cb9074 100644
--- a/widgets/sizewidget.cpp
+++ b/widgets/sizewidget.cpp
@@ -38,5 +38,5 @@ SizeWidget::SizeWidget(QWidget *parent)
void SizeWidget::paintEvent(QPaintEvent *e)
{
- Q_UNUSED(e);
+ Q_UNUSED(e)
}
diff --git a/widgets/songdialog.cpp b/widgets/songdialog.cpp
index 8be5640..fb0db01 100644
--- a/widgets/songdialog.cpp
+++ b/widgets/songdialog.cpp
@@ -46,11 +46,11 @@ bool SongDialog::songsOk(const QList<Song> &songs, const QString &base, bool isM
if (!QFile::exists(base+file)) {
DBUG << QString(base+file) << "does not exist";
if (isMpd) {
- MessageBox::error(wid, i18n("<p>Cannot access song files!<br/><br/>"
- "Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory\" setting.</p>"));
+ MessageBox::error(wid, i18n("Cannot access song files!\n\n"
+ "Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory\" setting."));
} else {
- MessageBox::error(wid, i18n("<p>Cannot access song files!<br/><br/>"
- "Please check that the device is still attached.</p>"));
+ MessageBox::error(wid, i18n("Cannot access song files!\n\n"
+ "Please check that the device is still attached."));
}
deleteLater();
return false;
diff --git a/widgets/tableview.cpp b/widgets/tableview.cpp
index f9ef2da..8a53f28 100644
--- a/widgets/tableview.cpp
+++ b/widgets/tableview.cpp
@@ -55,6 +55,7 @@ void TableView::initHeader()
StretchHeaderView *hdr=qobject_cast<StretchHeaderView *>(header());
QList<int> hideable;
+ QList<int> initiallyHidden;
if (!menu) {
hdr->SetStretchEnabled(true);
stretchToggled(true);
@@ -64,6 +65,9 @@ void TableView::initHeader()
if (model()->headerData(i, Qt::Horizontal, Cantata::Role_Hideable).toBool()) {
hideable.append(i);
}
+ if (model()->headerData(i, Qt::Horizontal, Cantata::Role_InitiallyHidden).toBool()) {
+ initiallyHidden.append(i);
+ }
}
#if QT_VERSION >= 0x050000
hdr->setSectionsMovable(true);
@@ -76,7 +80,7 @@ void TableView::initHeader()
//Restore state
QByteArray state=Settings::self()->headerState(configName);
if (state.isEmpty()) {
- foreach (int i, hideable) {
+ foreach (int i, initiallyHidden) {
hdr->HideSection(i);
}
} else {
diff --git a/widgets/toolbutton.cpp b/widgets/toolbutton.cpp
index fe8daea..0719881 100644
--- a/widgets/toolbutton.cpp
+++ b/widgets/toolbutton.cpp
@@ -35,7 +35,7 @@
ToolButton::ToolButton(QWidget *parent)
: QToolButton(parent)
- #ifdef USE_SYSTEM_MENU_ICON
+ #if defined USE_SYSTEM_MENU_ICON && !defined Q_OS_MAC
, hideMenuIndicator(GtkStyle::isActive())
#else
, hideMenuIndicator(true)
@@ -55,15 +55,17 @@ void ToolButton::paintEvent(QPaintEvent *e)
QPainter p(this);
QColor col(palette().color(QPalette::WindowText));
QRect r(rect());
- QPainterPath path=Utils::buildPath(QRectF(r.x()+1.5, r.y()+0.5, r.width()-2, r.height()-1), 2.5);
+ QPainterPath path=Utils::buildPath(QRectF(r.x()+1.5, r.y()+1.5, r.width()-3, r.height()-3), 2.5);
p.setRenderHint(QPainter::Antialiasing, true);
+ col.setAlphaF(0.4);
p.setPen(col);
p.drawPath(path);
col.setAlphaF(0.1);
p.fillPath(path, col);
}
#endif
- #if QT_VERSION > 0x050000
+ #if QT_VERSION > 0x050000 || defined UNITY_MENU_HACK
+ Q_UNUSED(e)
// Hack to work-around Qt5 sometimes leaving toolbutton in 'raised' state.
QStylePainter p(this);
QStyleOptionToolButton opt;
@@ -74,8 +76,14 @@ void ToolButton::paintEvent(QPaintEvent *e)
if (opt.state&QStyle::State_MouseOver && this!=QApplication::widgetAt(QCursor::pos())) {
opt.state&=~QStyle::State_MouseOver;
}
+ #ifdef UNITY_MENU_HACK
+ if (!icon.isNull()) {
+ opt.icon=icon;
+ opt.toolButtonStyle=Qt::ToolButtonIconOnly;
+ }
+ #endif
p.drawComplexControl(QStyle::CC_ToolButton, opt);
- #else
+ #else // QT_VERSION > 0x050000 || defined UNITY_MENU_HACK
if (menu() && hideMenuIndicator) {
QStylePainter p(this);
QStyleOptionToolButton opt;
@@ -91,7 +99,18 @@ void ToolButton::paintEvent(QPaintEvent *e)
QSize ToolButton::sizeHint() const
{
if (!hideMenuIndicator) {
- QSize sz=QToolButton::sizeHint();
+ QSize sz;
+ #ifdef UNITY_MENU_HACK
+ if (!icon.isNull()) {
+ QStyleOptionToolButton opt;
+ opt.icon=icon;
+ opt.toolButtonStyle=Qt::ToolButtonIconOnly;
+ initStyleOption(&opt);
+ opt.features=QStyleOptionToolButton::None;
+ sz = style()->sizeFromContents(QStyle::CT_ToolButton, &opt, opt.iconSize, this).expandedTo(QApplication::globalStrut());
+ } else
+ #endif
+ sz = QToolButton::sizeHint();
return Utils::touchFriendly() ? QSize(sz.width()*TouchProxyStyle::constScaleFactor, sz.height()) : sz;
}
@@ -111,6 +130,11 @@ QSize ToolButton::sizeHint() const
}
bool touchFriendly=Utils::touchFriendly();
sh=QSize(qMax(sh.width(), sh.height())*(touchFriendly ? TouchProxyStyle::constScaleFactor : 1.0), touchFriendly ? sh.height() : qMax(sh.width(), sh.height()));
+ #ifdef Q_OS_MAC
+ if (!touchFriendly) {
+ sh=QSize(qMax(sh.width(), 22), qMax(sh.height(), 20));
+ }
+ #endif
return sh;
}
diff --git a/widgets/toolbutton.h b/widgets/toolbutton.h
index a77e4ac..8f500ce 100644
--- a/widgets/toolbutton.h
+++ b/widgets/toolbutton.h
@@ -25,6 +25,8 @@
#define TOOLBUTTON_H
#include <QToolButton>
+#include "support/icon.h"
+#include "config.h"
class QMenu;
class ToolButton : public QToolButton
@@ -35,10 +37,16 @@ public:
void setMenu(QMenu *m);
void paintEvent(QPaintEvent *e);
void setHideMenuIndicator(bool h) { hideMenuIndicator=h; }
+ #ifdef UNITY_MENU_HACK
+ void setIcon(const Icon &i) { icon=i; }
+ #endif
private:
bool hideMenuIndicator;
mutable QSize sh;
+ #ifdef UNITY_MENU_HACK
+ Icon icon;
+ #endif
};
#endif // MENUBUTTON_H
diff --git a/widgets/treeview.cpp b/widgets/treeview.cpp
index a2fd743..fa0feba 100644
--- a/widgets/treeview.cpp
+++ b/widgets/treeview.cpp
@@ -162,23 +162,8 @@ void TreeView::drag(Qt::DropActions supportedActions, QAbstractItemView *view, c
}
QDrag *drag = new QDrag(view);
drag->setMimeData(data);
- QPixmap pix;
-
- if (1==items.count()) {
- QVariant var=view->model()->data(items.first(), Cantata::Role_Image);
- QImage img=var.value<QImage>();
- if (img.isNull()) {
- pix=var.value<QPixmap>();
- } else {
- pix=QPixmap::fromImage(img);
- }
- }
int pixSize=Icon::stdSize(Utils::scaleForDpi(32));
- if (pix.isNull()) {
- drag->setPixmap(Icons::self()->audioFileIcon.pixmap(pixSize, pixSize));
- } else {
- drag->setPixmap(pix.width()<pixSize ? pix : pix.scaled(QSize(pixSize, pixSize), Qt::KeepAspectRatio, Qt::SmoothTransformation));
- }
+ drag->setPixmap(Icons::self()->audioFileIcon.pixmap(pixSize, pixSize));
drag->start(supportedActions);
}
}
@@ -337,7 +322,9 @@ void TreeView::setBackgroundImage(const QIcon &icon)
if (!icon.isNull()) {
pal.setColor(QPalette::Base, Qt::transparent);
}
+ #ifndef Q_OS_MAC
setPalette(pal);
+ #endif
viewport()->setPalette(pal);
bgnd=createBgndPixmap(icon);
}
diff --git a/widgets/volumeslider.cpp b/widgets/volumeslider.cpp
index 92877ea..21c1529 100644
--- a/widgets/volumeslider.cpp
+++ b/widgets/volumeslider.cpp
@@ -43,10 +43,10 @@
#include <KDE/KShortcut>
#endif
-class ProxyStyle : public QProxyStyle
+class VolumeSliderProxyStyle : public QProxyStyle
{
public:
- ProxyStyle()
+ VolumeSliderProxyStyle()
: QProxyStyle()
{
setBaseStyle(qApp->style());
@@ -66,7 +66,7 @@ public:
static int widthStep=4;
static int constHeightStep=2;
-static QColor clampColor(const QColor &col)
+QColor VolumeSlider::clampColor(const QColor &col)
{
static const int constMin=64;
static const int constMax=240;
@@ -100,7 +100,7 @@ VolumeSlider::VolumeSlider(QWidget *p)
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
setOrientation(Qt::Horizontal);
setFocusPolicy(Qt::NoFocus);
- setStyle(new ProxyStyle());
+ setStyle(new VolumeSliderProxyStyle());
setStyleSheet(QString("QSlider::groove:horizontal {border: 0px;} "
"QSlider::sub-page:horizontal {border: 0px;} "
"QSlider::handle:horizontal {width: 0px; height:0px; margin:0;}"));
@@ -120,10 +120,10 @@ void VolumeSlider::initActions()
StdActions::self()->increaseVolumeAction->setGlobalShortcut(KShortcut(Qt::Key_VolumeUp));
StdActions::self()->decreaseVolumeAction->setGlobalShortcut(KShortcut(Qt::Key_VolumeDown));
#endif
- connect(muteAction, SIGNAL(triggered(bool)), MPDConnection::self(), SLOT(toggleMute()));
+ connect(muteAction, SIGNAL(triggered()), MPDConnection::self(), SLOT(toggleMute()));
connect(MPDStatus::self(), SIGNAL(updated()), this, SLOT(updateMpdStatus()));
- connect(StdActions::self()->increaseVolumeAction, SIGNAL(triggered(bool)), this, SLOT(increaseVolume()));
- connect(StdActions::self()->decreaseVolumeAction, SIGNAL(triggered(bool)), this, SLOT(decreaseVolume()));
+ connect(StdActions::self()->increaseVolumeAction, SIGNAL(triggered()), this, SLOT(increaseVolume()));
+ connect(StdActions::self()->decreaseVolumeAction, SIGNAL(triggered()), this, SLOT(decreaseVolume()));
connect(this, SIGNAL(valueChanged(int)), MPDConnection::self(), SLOT(setVolume(int)));
addAction(StdActions::self()->increaseVolumeAction);
addAction(StdActions::self()->decreaseVolumeAction);
diff --git a/widgets/volumeslider.h b/widgets/volumeslider.h
index 5f2be81..aeb4c80 100644
--- a/widgets/volumeslider.h
+++ b/widgets/volumeslider.h
@@ -37,6 +37,8 @@ class VolumeSlider : public QSlider
Q_OBJECT
public:
+ static QColor clampColor(const QColor &col);
+
VolumeSlider(QWidget *p=0);
virtual ~VolumeSlider() { }
diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt
index 4aff606..febf933 100644
--- a/windows/CMakeLists.txt
+++ b/windows/CMakeLists.txt
@@ -1,33 +1,66 @@
set(WINDOWS_APP_NAME Cantata)
set(WINDOWS_COMPANY_NAME Cantata)
-set(WINDOWS_URL "http://cantata.googlecode.com")
-configure_file(cantata.nsi.cmake ${CMAKE_CURRENT_BINARY_DIR}/cantata.nsi)
-configure_file(cantata.iss.cmake ${CMAKE_CURRENT_BINARY_DIR}/cantata.iss)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cantata.nsi cantata.ico LICENSE.txt "Cantata README.txt" "Qt4 README.txt" "Qt License (LGPL V2).txt" "TagLib README.txt" DESTINATION ${CMAKE_INSTALL_PREFIX})
-install(FILES LICENSE.txt DESTINATION ${CMAKE_INSTALL_PREFIX} RENAME "Cantata License (GPL V3).txt")
+set(WINDOWS_URL "http://${PROJECT_URL}")
+
+if (CANTATA_SSL_LIBS)
+ set(EXTRA_WIN_LIBS ${EXTRA_WIN_LIBS} ${CANTATA_SSL_LIBS})
+ set(CANTATA_SSL_WIN_NSIS_INSTALL "file \"libeay32.dll\"\n file \"ssleay32.dll\"")
+endif (CANTATA_SSL_LIBS)
+
+if (ENABLE_QT5)
+ FILE(TO_CMAKE_PATH $ENV{QTDIR} QT_DIR)
+ set(QT_BINARY_DIR ${QT_DIR}/bin)
+ set(QT_PLUGINS_DIR ${QT_DIR}/plugins)
+ set(QT_TRANSLATIONS_DIR ${QT_DIR}/translations)
+
+ configure_file(cantata-qt5.nsi.cmake ${CMAKE_CURRENT_BINARY_DIR}/cantata.nsi)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cantata.nsi cantata.ico LICENSE.txt "Cantata README.txt" "Qt License (LGPL V2).txt" "TagLib README.txt" DESTINATION ${CMAKE_INSTALL_PREFIX})
+
+ # Qt image formats...
+ install(FILES ${QT_PLUGINS_DIR}/imageformats/qjpeg.dll ${QT_PLUGINS_DIR}/imageformats/qsvg.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/imageformats/)
+
+ # Qt iconengines...
+ install(FILES ${QT_PLUGINS_DIR}/iconengines/qsvgicon.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/iconengines/)
+
+ # Qt windows platform plugin...
+ install(FILES ${QT_PLUGINS_DIR}/platforms/qwindows.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/platforms/)
+
+ # Qt, taglib, and zlib libraries...
+ set(EXTRA_WIN_LIBS ${EXTRA_WIN_LIBS}
+ ${QT_BINARY_DIR}/Qt5Core.dll ${QT_BINARY_DIR}/Qt5Gui.dll ${QT_BINARY_DIR}/Qt5Network.dll ${QT_BINARY_DIR}/Qt5Svg.dll ${QT_BINARY_DIR}/Qt5Xml.dll
+ ${QT_BINARY_DIR}/Qt5Widgets.dll ${QT_BINARY_DIR}/Qt5WinExtras.dll
+ ${CMAKE_CURRENT_SOURCE_DIR}/icu/icudt52.dll ${QT_BINARY_DIR}/icuin52.dll ${QT_BINARY_DIR}/icuuc52.dll
+ ${QT_BINARY_DIR}/libgcc_s_dw2-1.dll ${QT_BINARY_DIR}/libstdc++-6.dll ${QT_BINARY_DIR}/libwinpthread-1.dll
+ ${ZLIB_INCLUDE_DIR}/../bin/libz-1.dll ${TAGLIB_INCLUDES}/../bin/libtag.dll)
+else (ENABLE_QT5)
+ configure_file(cantata.nsi.cmake ${CMAKE_CURRENT_BINARY_DIR}/cantata.nsi)
+ configure_file(cantata.iss.cmake ${CMAKE_CURRENT_BINARY_DIR}/cantata.iss)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cantata.nsi cantata.ico LICENSE.txt "Cantata README.txt" "Qt4 README.txt" "Qt License (LGPL V2).txt" "TagLib README.txt" DESTINATION ${CMAKE_INSTALL_PREFIX})
+
+ # Qt image formats...
+ install(FILES ${QT_PLUGINS_DIR}/imageformats/qjpeg4.dll ${QT_PLUGINS_DIR}/imageformats/qsvg4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/imageformats/)
+
+ # Qt iconengines...
+ install(FILES ${QT_PLUGINS_DIR}/iconengines/qsvgicon4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/iconengines/)
+
+ # Qt, taglib, and zlib libraries...
+ set(EXTRA_WIN_LIBS ${EXTRA_WIN_LIBS}
+ ${QT_BINARY_DIR}/QtCore4.dll ${QT_BINARY_DIR}/QtGui4.dll ${QT_BINARY_DIR}/QtNetwork4.dll ${QT_BINARY_DIR}/QtSvg4.dll ${QT_BINARY_DIR}/QtXml4.dll
+ ${ZLIB_INCLUDE_DIR}/../bin/libz-1.dll ${TAGLIB_INCLUDES}/../bin/libtag.dll ${CANTATA_MINGW_LIBS})
+endif (ENABLE_QT5)
# Qt translation files...
file(GLOB qt_trans ${QT_TRANSLATIONS_DIR}/qt_*.qm)
foreach(qm ${qt_trans})
if (NOT ${qm} MATCHES "(${QT_TRANSLATIONS_DIR}/qt_help*)")
- list(APPEND qt_translations "${qm}")
+ list(APPEND qt_translations "${qm}")
endif (NOT ${qm} MATCHES "(${QT_TRANSLATIONS_DIR}/qt_help*)")
endforeach(qm ${qt_trans})
install(FILES ${qt_translations} DESTINATION ${CMAKE_INSTALL_PREFIX}/translations/)
-# Qt image formats...
-install(FILES ${QT_PLUGINS_DIR}/imageformats/qjpeg4.dll ${QT_PLUGINS_DIR}/imageformats/qsvg4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/imageformats/)
-
-# Qt iconengines...
-install(FILES ${QT_PLUGINS_DIR}/iconengines/qsvgicon4.dll DESTINATION ${CMAKE_INSTALL_PREFIX}/iconengines/)
-
-# Qt, taglib, and zlib libraries...
-set (CANTATA_WIN_LIBS
- ${QT_BINARY_DIR}/QtCore4.dll ${QT_BINARY_DIR}/QtGui4.dll ${QT_BINARY_DIR}/QtNetwork4.dll ${QT_BINARY_DIR}/QtSvg4.dll ${QT_BINARY_DIR}/QtXml4.dll
- ${ZLIB_INCLUDE_DIR}/../bin/zlib1.dll ${TAGLIB_INCLUDES}/../bin/libtag.dll ${CANTATA_MINGW_LIBS})
-install(FILES ${CANTATA_WIN_LIBS} DESTINATION ${CMAKE_INSTALL_PREFIX})
+install(FILES ${EXTRA_WIN_LIBS} DESTINATION ${CMAKE_INSTALL_PREFIX})
+install(FILES LICENSE.txt DESTINATION ${CMAKE_INSTALL_PREFIX} RENAME "Cantata License (GPL V3).txt")
if (CANTATA_OXYGEN_DIR)
add_subdirectory(icons)
endif (CANTATA_OXYGEN_DIR)
-
diff --git a/windows/cantata.nsi.cmake b/windows/cantata-qt5.nsi.cmake
similarity index 93%
copy from windows/cantata.nsi.cmake
copy to windows/cantata-qt5.nsi.cmake
index 3ef56ce..633c536 100644
--- a/windows/cantata.nsi.cmake
+++ b/windows/cantata-qt5.nsi.cmake
@@ -3,7 +3,7 @@
!define DESCRIPTION "MPD Client"
!define VERSIONMAJOR @CPACK_PACKAGE_VERSION_MAJOR@
!define VERSIONMINOR @CPACK_PACKAGE_VERSION_MINOR@
-!define VERSIONBUILD @CPACK_PACKAGE_VERSION_PATCH@
+!define VERSIONBUILD @CPACK_PACKAGE_VERSION_PATCH@@CPACK_PACKAGE_VERSION_SPIN@
#!define HELPURL "http://..." # "Support Information" link
#!define UPDATEURL "http://..." # "Product Updates" link
!define ABOUTURL "http://cantata.googlecode.com" # "Publisher" link
@@ -17,7 +17,7 @@ InstallDir "$PROGRAMFILES\@WINDOWS_APP_NAME@"
# This will be in the installer/uninstaller's title bar
Name "@WINDOWS_APP_NAME@"
Icon "cantata.ico"
-outFile "Cantata- at CANTATA_VERSION_FULL@-Setup.exe"
+outFile "@WINDOWS_APP_NAME at -@CANTATA_VERSION_WITH_SPIN at -Setup.exe"
!define MUI_ABORTWARNING
!define MUI_ICON "cantata.ico"
@@ -94,30 +94,36 @@ section "install"
setOutPath $INSTDIR
# Files added here should be removed by the uninstaller (see section "uninstall")
file "cantata.exe"
+ file "cantata-tags.exe"
file "Cantata License (GPL V3).txt"
file "Cantata README.txt"
- file "zlib1.dll"
- file "libgcc_s_dw2-1.dll"
- file "libtag.dll"
- file "mingwm10.dll"
- file "Qt4 README.txt"
- file "QtCore4.dll"
- file "QtGui4.dll"
file "Qt License (LGPL V2).txt"
- file "QtNetwork4.dll"
- file "QtSvg4.dll"
- file "QtXml4.dll"
file "TagLib README.txt"
+ file "Qt5Core.dll"
+ file "Qt5Gui.dll"
+ file "Qt5Network.dll"
+ file "Qt5Svg.dll"
+ file "Qt5Widgets.dll"
+ file "Qt5WinExtras.dll"
+ file "icudt52.dll"
+ file "icuin52.dll"
+ file "icuuc52.dll"
+ file "libgcc_s_dw2-1.dll"
+ file "libstdc++-6.dll"
+ file "libtag.dll"
+ file "libwinpthread-1.dll"
+ file "libz-1.dll"
+ @CANTATA_SSL_WIN_NSIS_INSTALL@
setOutPath $INSTDIR\config
file "config\lyrics_providers.xml"
file "config\podcast_directories.xml"
file "config\scrobblers.xml"
file "config\tag_fixes.xml"
file "config\weblinks.xml"
- setOutPath $INSTDIR\helpers
- file "helpers\cantata-tags.exe"
setOutPath $INSTDIR\iconengines
- file "iconengines\qsvgicon4.dll"
+ file "iconengines\qsvgicon.dll"
+ setOutPath $INSTDIR\platforms
+ file "platforms\qwindows.dll"
setOutPath $INSTDIR\icons
file "icons\bbc.svg"
file "icons\cbc.svg"
@@ -174,6 +180,7 @@ section "install"
file "icons\oxygen\16x16\actions\view-refresh.png"
setOutPath $INSTDIR\icons\oxygen\16x16\apps
file "icons\oxygen\16x16\apps\cantata.png"
+ file "icons\oxygen\16x16\apps\clock.png"
file "icons\oxygen\16x16\apps\preferences-desktop-keyboard.png"
file "icons\oxygen\16x16\apps\system-file-manager.png"
setOutPath $INSTDIR\icons\oxygen\16x16\categories
@@ -240,6 +247,7 @@ section "install"
file "icons\oxygen\22x22\actions\view-refresh.png"
setOutPath $INSTDIR\icons\oxygen\22x22\apps
file "icons\oxygen\22x22\apps\cantata.png"
+ file "icons\oxygen\22x22\apps\clock.png"
file "icons\oxygen\22x22\apps\preferences-desktop-keyboard.png"
file "icons\oxygen\22x22\apps\system-file-manager.png"
setOutPath $INSTDIR\icons\oxygen\22x22\categories
@@ -311,6 +319,7 @@ section "install"
file "icons\oxygen\32x32\actions\view-refresh.png"
setOutPath $INSTDIR\icons\oxygen\32x32\apps
file "icons\oxygen\32x32\apps\cantata.png"
+ file "icons\oxygen\32x32\apps\clock.png"
file "icons\oxygen\32x32\apps\preferences-desktop-keyboard.png"
file "icons\oxygen\32x32\apps\system-file-manager.png"
setOutPath $INSTDIR\icons\oxygen\32x32\categories
@@ -337,9 +346,11 @@ section "install"
file "icons\oxygen\32x32\status\object-locked.png"
setOutPath $INSTDIR\icons\oxygen\48x48\actions
file "icons\oxygen\48x48\actions\bookmark-new.png"
+ file "icons\oxygen\48x48\actions\go-down.png"
file "icons\oxygen\48x48\actions\view-fullscreen.png"
setOutPath $INSTDIR\icons\oxygen\48x48\apps
file "icons\oxygen\48x48\apps\cantata.png"
+ file "icons\oxygen\48x48\apps\clock.png"
file "icons\oxygen\48x48\apps\preferences-desktop-keyboard.png"
setOutPath $INSTDIR\icons\oxygen\48x48\categories
file "icons\oxygen\48x48\categories\applications-internet.png"
@@ -350,6 +361,7 @@ section "install"
file "icons\oxygen\48x48\devices\multimedia-player.png"
setOutPath $INSTDIR\icons\oxygen\48x48\places
file "icons\oxygen\48x48\places\bookmarks.png"
+ file "icons\oxygen\48x48\places\document-multiple.png"
setOutPath $INSTDIR\icons\oxygen\48x48\status
file "icons\oxygen\48x48\status\dialog-error.png"
file "icons\oxygen\48x48\status\dialog-information.png"
@@ -358,8 +370,10 @@ section "install"
file "icons\oxygen\48x48\status\object-locked.png"
setOutPath $INSTDIR\icons\oxygen\64x64\actions
file "icons\oxygen\64x64\actions\bookmark-new.png"
+ file "icons\oxygen\64x64\actions\go-down.png"
setOutPath $INSTDIR\icons\oxygen\64x64\apps
file "icons\oxygen\64x64\apps\cantata.png"
+ file "icons\oxygen\64x64\apps\clock.png"
file "icons\oxygen\64x64\apps\preferences-desktop-keyboard.png"
setOutPath $INSTDIR\icons\oxygen\64x64\categories
file "icons\oxygen\64x64\categories\applications-internet.png"
@@ -370,6 +384,7 @@ section "install"
file "icons\oxygen\64x64\devices\multimedia-player.png"
setOutPath $INSTDIR\icons\oxygen\64x64\places
file "icons\oxygen\64x64\places\bookmarks.png"
+ file "icons\oxygen\64x64\places\document-multiple.png"
setOutPath $INSTDIR\icons\oxygen\64x64\status
file "icons\oxygen\64x64\status\dialog-error.png"
file "icons\oxygen\64x64\status\dialog-information.png"
@@ -377,28 +392,32 @@ section "install"
setOutPath $INSTDIR\icons\oxygen\scalable\apps
file "icons\oxygen\scalable\apps\cantata.svg"
setOutPath $INSTDIR\imageformats
- file "imageformats\qjpeg4.dll"
- file "imageformats\qsvg4.dll"
+ file "imageformats\qjpeg.dll"
+ file "imageformats\qsvg.dll"
setOutPath $INSTDIR\translations
file "translations\cantata_cs.qm"
file "translations\cantata_de.qm"
file "translations\cantata_en_GB.qm"
file "translations\cantata_es.qm"
+ file "translations\cantata_fr.qm"
file "translations\cantata_hu.qm"
file "translations\cantata_ko.qm"
file "translations\cantata_pl.qm"
file "translations\cantata_ru.qm"
file "translations\cantata_zh_CN.qm"
+
file "translations\qt_ar.qm"
file "translations\qt_cs.qm"
file "translations\qt_da.qm"
file "translations\qt_de.qm"
file "translations\qt_es.qm"
file "translations\qt_fa.qm"
+ file "translations\qt_fi.qm"
file "translations\qt_fr.qm"
file "translations\qt_gl.qm"
file "translations\qt_he.qm"
file "translations\qt_hu.qm"
+ file "translations\qt_it.qm"
file "translations\qt_ja.qm"
file "translations\qt_ko.qm"
file "translations\qt_lt.qm"
@@ -427,7 +446,7 @@ section "install"
# WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "HelpLink" "$\"${HELPURL}$\""
# WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "URLUpdateInfo" "$\"${UPDATEURL}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "URLInfoAbout" "$\"@WINDOWS_URL@$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "DisplayVersion" "@CANTATA_VERSION_FULL@"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "DisplayVersion" "@CANTATA_VERSION_WITH_SPIN@"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "VersionMajor" @CPACK_PACKAGE_VERSION_MAJOR@
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "VersionMinor" @CPACK_PACKAGE_VERSION_MINOR@
# There is no option for modifying or repairing the install
@@ -444,6 +463,7 @@ section "uninstall"
delete "$SMPROGRAMS\@WINDOWS_APP_NAME at .lnk"
delete "$INSTDIR\cantata.exe"
+ delete "$INSTDIR\cantata-tags.exe"
delete "$INSTDIR\Cantata README.txt"
delete "$INSTDIR\Cantata License (GPL V3).txt"
delete "$INSTDIR\config\lyrics_providers.xml"
@@ -453,6 +473,7 @@ section "uninstall"
delete "$INSTDIR\config\weblinks.xml"
delete "$INSTDIR\helpers\cantata-tags.exe"
delete "$INSTDIR\iconengines\qsvgicon4.dll"
+ delete "$INSTDIR\iconengines\qsvgicon.dll"
delete "$INSTDIR\icons\bbc.svg"
delete "$INSTDIR\icons\cbc.svg"
delete "$INSTDIR\icons\npr.svg"
@@ -503,6 +524,7 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\16x16\actions\view-media-playlist.png"
delete "$INSTDIR\icons\oxygen\16x16\actions\view-refresh.png"
delete "$INSTDIR\icons\oxygen\16x16\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\16x16\apps\clock.png"
delete "$INSTDIR\icons\oxygen\16x16\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\16x16\apps\system-file-manager.png"
delete "$INSTDIR\icons\oxygen\16x16\categories\applications-internet.png"
@@ -562,6 +584,7 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\22x22\actions\view-media-playlist.png"
delete "$INSTDIR\icons\oxygen\22x22\actions\view-refresh.png"
delete "$INSTDIR\icons\oxygen\22x22\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\22x22\apps\clock.png"
delete "$INSTDIR\icons\oxygen\22x22\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\22x22\apps\system-file-manager.png"
delete "$INSTDIR\icons\oxygen\22x22\categories\applications-internet.png"
@@ -623,6 +646,7 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\32x32\actions\view-media-playlist.png"
delete "$INSTDIR\icons\oxygen\32x32\actions\view-refresh.png"
delete "$INSTDIR\icons\oxygen\32x32\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\32x32\apps\clock.png"
delete "$INSTDIR\icons\oxygen\32x32\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\32x32\apps\system-file-manager.png"
delete "$INSTDIR\icons\oxygen\32x32\categories\applications-internet.png"
@@ -643,8 +667,10 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\32x32\status\media-playlist-shuffle.png"
delete "$INSTDIR\icons\oxygen\32x32\status\object-locked.png"
delete "$INSTDIR\icons\oxygen\48x48\actions\bookmark-new.png"
+ delete "$INSTDIR\icons\oxygen\48x48\actions\go-down.png"
delete "$INSTDIR\icons\oxygen\48x48\actions\view-fullscreen.png"
delete "$INSTDIR\icons\oxygen\48x48\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\48x48\apps\clock.png"
delete "$INSTDIR\icons\oxygen\48x48\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\48x48\categories\applications-internet.png"
delete "$INSTDIR\icons\oxygen\48x48\categories\preferences-other.png"
@@ -652,13 +678,16 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\48x48\devices\media-optical.png"
delete "$INSTDIR\icons\oxygen\48x48\devices\multimedia-player.png"
delete "$INSTDIR\icons\oxygen\48x48\places\bookmarks.png"
+ delete "$INSTDIR\icons\oxygen\48x48\places\document-multiple.png"
delete "$INSTDIR\icons\oxygen\48x48\status\dialog-error.png"
delete "$INSTDIR\icons\oxygen\48x48\status\dialog-information.png"
delete "$INSTDIR\icons\oxygen\48x48\status\dialog-warning.png"
delete "$INSTDIR\icons\oxygen\48x48\status\media-playlist-shuffle.png"
delete "$INSTDIR\icons\oxygen\48x48\status\object-locked.png"
delete "$INSTDIR\icons\oxygen\64x64\actions\bookmark-new.png"
+ delete "$INSTDIR\icons\oxygen\64x64\actions\go-down.png"
delete "$INSTDIR\icons\oxygen\64x64\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\64x64\apps\clock.png"
delete "$INSTDIR\icons\oxygen\64x64\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\64x64\categories\applications-internet.png"
delete "$INSTDIR\icons\oxygen\64x64\categories\preferences-other.png"
@@ -666,27 +695,52 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\64x64\devices\media-optical.png"
delete "$INSTDIR\icons\oxygen\64x64\devices\multimedia-player.png"
delete "$INSTDIR\icons\oxygen\64x64\places\bookmarks.png"
+ delete "$INSTDIR\icons\oxygen\64x64\places\document-multiple.png"
delete "$INSTDIR\icons\oxygen\64x64\status\dialog-error.png"
delete "$INSTDIR\icons\oxygen\64x64\status\dialog-information.png"
delete "$INSTDIR\icons\oxygen\64x64\status\dialog-warning.png"
delete "$INSTDIR\icons\oxygen\scalable\apps\cantata.svg"
delete "$INSTDIR\imageformats\qjpeg4.dll"
delete "$INSTDIR\imageformats\qsvg4.dll"
- delete "$INSTDIR\libgcc_s_dw2-1.dll"
- delete "$INSTDIR\libtag.dll"
- delete "$INSTDIR\mingwm10.dll"
+ delete "$INSTDIR\imageformats\qjpeg.dll"
+ delete "$INSTDIR\imageformats\qsvg.dll"
+ delete "$INSTDIR\platforms\qwindows.dll"
delete "$INSTDIR\Qt4 README.txt"
- delete "$INSTDIR\QtCore4.dll"
- delete "$INSTDIR\QtGui4.dll"
delete "$INSTDIR\Qt License (LGPL V2).txt"
delete "$INSTDIR\QtNetwork4.dll"
+ delete "$INSTDIR\TagLib README.txt"
+
+ delete "$INSTDIR\QtNetwork4.dll"
delete "$INSTDIR\QtSvg4.dll"
delete "$INSTDIR\QtXml4.dll"
- delete "$INSTDIR\TagLib README.txt"
+ delete "$INSTDIR\QtCore4.dll"
+ delete "$INSTDIR\QtGui4.dll"
+ delete "$INSTDIR\libgcc_s_dw2-1.dll"
+ delete "$INSTDIR\libtag.dll"
+ delete "$INSTDIR\mingwm10.dll"
+
+ delete "$INSTDIR\Qt5Core.dll"
+ delete "$INSTDIR\Qt5Gui.dll"
+ delete "$INSTDIR\Qt5Network.dll"
+ delete "$INSTDIR\Qt5Svg.dll"
+ delete "$INSTDIR\Qt5Widgets.dll"
+ delete "$INSTDIR\Qt5WinExtras.dll"
+ delete "$INSTDIR\icudt52.dll"
+ delete "$INSTDIR\icuin52.dll"
+ delete "$INSTDIR\icuuc52.dll"
+ delete "$INSTDIR\libgcc_s_dw2-1.dll"
+ delete "$INSTDIR\libstdc++-6.dll"
+ delete "$INSTDIR\libwinpthread-1.dll"
+ delete "$INSTDIR\zlib1.dll"
+ delete "$INSTDIR\libz-1.dll"
+ delete "$INSTDIR\libeay32.dll"
+ delete "$INSTDIR\ssleay32.dll"
+
delete "$INSTDIR\translations\cantata_cs.qm"
delete "$INSTDIR\translations\cantata_de.qm"
delete "$INSTDIR\translations\cantata_en_GB.qm"
delete "$INSTDIR\translations\cantata_es.qm"
+ delete "$INSTDIR\translations\cantata_fr.qm"
delete "$INSTDIR\translations\cantata_hu.qm"
delete "$INSTDIR\translations\cantata_ko.qm"
delete "$INSTDIR\translations\cantata_pl.qm"
@@ -698,10 +752,12 @@ section "uninstall"
delete "$INSTDIR\translations\qt_de.qm"
delete "$INSTDIR\translations\qt_es.qm"
delete "$INSTDIR\translations\qt_fa.qm"
+ delete "$INSTDIR\translations\qt_fi.qm"
delete "$INSTDIR\translations\qt_fr.qm"
delete "$INSTDIR\translations\qt_gl.qm"
delete "$INSTDIR\translations\qt_he.qm"
delete "$INSTDIR\translations\qt_hu.qm"
+ delete "$INSTDIR\translations\qt_it.qm"
delete "$INSTDIR\translations\qt_ja.qm"
delete "$INSTDIR\translations\qt_ko.qm"
delete "$INSTDIR\translations\qt_lt.qm"
@@ -714,8 +770,7 @@ section "uninstall"
delete "$INSTDIR\translations\qt_uk.qm"
delete "$INSTDIR\translations\qt_zh_CN.qm"
delete "$INSTDIR\translations\qt_zh_TW.qm"
- delete "$INSTDIR\zlib1.dll"
-
+
rmDir $INSTDIR\config
rmDir $INSTDIR\helpers
rmDir $INSTDIR\iconengines
@@ -769,6 +824,7 @@ section "uninstall"
rmDir $INSTDIR\icons\oxygen
rmDir $INSTDIR\icons
rmDir $INSTDIR\imageformats
+ rmDir $INSTDIR\platforms
rmDir $INSTDIR\translations
# Always delete uninstaller as the last action
diff --git a/windows/cantata.nsi.cmake b/windows/cantata.nsi.cmake
index 3ef56ce..e73a659 100644
--- a/windows/cantata.nsi.cmake
+++ b/windows/cantata.nsi.cmake
@@ -3,7 +3,7 @@
!define DESCRIPTION "MPD Client"
!define VERSIONMAJOR @CPACK_PACKAGE_VERSION_MAJOR@
!define VERSIONMINOR @CPACK_PACKAGE_VERSION_MINOR@
-!define VERSIONBUILD @CPACK_PACKAGE_VERSION_PATCH@
+!define VERSIONBUILD @CPACK_PACKAGE_VERSION_PATCH@@CPACK_PACKAGE_VERSION_SPIN@
#!define HELPURL "http://..." # "Support Information" link
#!define UPDATEURL "http://..." # "Product Updates" link
!define ABOUTURL "http://cantata.googlecode.com" # "Publisher" link
@@ -17,7 +17,7 @@ InstallDir "$PROGRAMFILES\@WINDOWS_APP_NAME@"
# This will be in the installer/uninstaller's title bar
Name "@WINDOWS_APP_NAME@"
Icon "cantata.ico"
-outFile "Cantata- at CANTATA_VERSION_FULL@-Setup.exe"
+outFile "@WINDOWS_APP_NAME at -@CANTATA_VERSION_WITH_SPIN at -Setup.exe"
!define MUI_ABORTWARNING
!define MUI_ICON "cantata.ico"
@@ -94,28 +94,29 @@ section "install"
setOutPath $INSTDIR
# Files added here should be removed by the uninstaller (see section "uninstall")
file "cantata.exe"
+ file "cantata-tags.exe"
file "Cantata License (GPL V3).txt"
file "Cantata README.txt"
- file "zlib1.dll"
+ file "Qt4 README.txt"
+ file "Qt License (LGPL V2).txt"
+ file "TagLib README.txt"
+ file "libz-1.dll"
+ @CANTATA_SSL_WIN_NSIS_INSTALL@
file "libgcc_s_dw2-1.dll"
file "libtag.dll"
file "mingwm10.dll"
- file "Qt4 README.txt"
file "QtCore4.dll"
file "QtGui4.dll"
- file "Qt License (LGPL V2).txt"
file "QtNetwork4.dll"
file "QtSvg4.dll"
file "QtXml4.dll"
- file "TagLib README.txt"
+ file "libtag.dll"
setOutPath $INSTDIR\config
file "config\lyrics_providers.xml"
file "config\podcast_directories.xml"
file "config\scrobblers.xml"
file "config\tag_fixes.xml"
file "config\weblinks.xml"
- setOutPath $INSTDIR\helpers
- file "helpers\cantata-tags.exe"
setOutPath $INSTDIR\iconengines
file "iconengines\qsvgicon4.dll"
setOutPath $INSTDIR\icons
@@ -174,6 +175,7 @@ section "install"
file "icons\oxygen\16x16\actions\view-refresh.png"
setOutPath $INSTDIR\icons\oxygen\16x16\apps
file "icons\oxygen\16x16\apps\cantata.png"
+ file "icons\oxygen\16x16\apps\clock.png"
file "icons\oxygen\16x16\apps\preferences-desktop-keyboard.png"
file "icons\oxygen\16x16\apps\system-file-manager.png"
setOutPath $INSTDIR\icons\oxygen\16x16\categories
@@ -240,6 +242,7 @@ section "install"
file "icons\oxygen\22x22\actions\view-refresh.png"
setOutPath $INSTDIR\icons\oxygen\22x22\apps
file "icons\oxygen\22x22\apps\cantata.png"
+ file "icons\oxygen\22x22\apps\clock.png"
file "icons\oxygen\22x22\apps\preferences-desktop-keyboard.png"
file "icons\oxygen\22x22\apps\system-file-manager.png"
setOutPath $INSTDIR\icons\oxygen\22x22\categories
@@ -311,6 +314,7 @@ section "install"
file "icons\oxygen\32x32\actions\view-refresh.png"
setOutPath $INSTDIR\icons\oxygen\32x32\apps
file "icons\oxygen\32x32\apps\cantata.png"
+ file "icons\oxygen\32x32\apps\clock.png"
file "icons\oxygen\32x32\apps\preferences-desktop-keyboard.png"
file "icons\oxygen\32x32\apps\system-file-manager.png"
setOutPath $INSTDIR\icons\oxygen\32x32\categories
@@ -337,9 +341,11 @@ section "install"
file "icons\oxygen\32x32\status\object-locked.png"
setOutPath $INSTDIR\icons\oxygen\48x48\actions
file "icons\oxygen\48x48\actions\bookmark-new.png"
+ file "icons\oxygen\48x48\actions\go-down.png"
file "icons\oxygen\48x48\actions\view-fullscreen.png"
setOutPath $INSTDIR\icons\oxygen\48x48\apps
file "icons\oxygen\48x48\apps\cantata.png"
+ file "icons\oxygen\48x48\apps\clock.png"
file "icons\oxygen\48x48\apps\preferences-desktop-keyboard.png"
setOutPath $INSTDIR\icons\oxygen\48x48\categories
file "icons\oxygen\48x48\categories\applications-internet.png"
@@ -350,6 +356,7 @@ section "install"
file "icons\oxygen\48x48\devices\multimedia-player.png"
setOutPath $INSTDIR\icons\oxygen\48x48\places
file "icons\oxygen\48x48\places\bookmarks.png"
+ file "icons\oxygen\48x48\places\document-multiple.png"
setOutPath $INSTDIR\icons\oxygen\48x48\status
file "icons\oxygen\48x48\status\dialog-error.png"
file "icons\oxygen\48x48\status\dialog-information.png"
@@ -358,8 +365,10 @@ section "install"
file "icons\oxygen\48x48\status\object-locked.png"
setOutPath $INSTDIR\icons\oxygen\64x64\actions
file "icons\oxygen\64x64\actions\bookmark-new.png"
+ file "icons\oxygen\64x64\actions\go-down.png"
setOutPath $INSTDIR\icons\oxygen\64x64\apps
file "icons\oxygen\64x64\apps\cantata.png"
+ file "icons\oxygen\64x64\apps\clock.png"
file "icons\oxygen\64x64\apps\preferences-desktop-keyboard.png"
setOutPath $INSTDIR\icons\oxygen\64x64\categories
file "icons\oxygen\64x64\categories\applications-internet.png"
@@ -370,6 +379,7 @@ section "install"
file "icons\oxygen\64x64\devices\multimedia-player.png"
setOutPath $INSTDIR\icons\oxygen\64x64\places
file "icons\oxygen\64x64\places\bookmarks.png"
+ file "icons\oxygen\64x64\places\document-multiple.png"
setOutPath $INSTDIR\icons\oxygen\64x64\status
file "icons\oxygen\64x64\status\dialog-error.png"
file "icons\oxygen\64x64\status\dialog-information.png"
@@ -384,6 +394,7 @@ section "install"
file "translations\cantata_de.qm"
file "translations\cantata_en_GB.qm"
file "translations\cantata_es.qm"
+ file "translations\cantata_fr.qm"
file "translations\cantata_hu.qm"
file "translations\cantata_ko.qm"
file "translations\cantata_pl.qm"
@@ -427,7 +438,7 @@ section "install"
# WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "HelpLink" "$\"${HELPURL}$\""
# WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "URLUpdateInfo" "$\"${UPDATEURL}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "URLInfoAbout" "$\"@WINDOWS_URL@$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "DisplayVersion" "@CANTATA_VERSION_FULL@"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "DisplayVersion" "@CANTATA_VERSION_WITH_SPIN@"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "VersionMajor" @CPACK_PACKAGE_VERSION_MAJOR@
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "VersionMinor" @CPACK_PACKAGE_VERSION_MINOR@
# There is no option for modifying or repairing the install
@@ -444,6 +455,7 @@ section "uninstall"
delete "$SMPROGRAMS\@WINDOWS_APP_NAME at .lnk"
delete "$INSTDIR\cantata.exe"
+ delete "$INSTDIR\cantata-tags.exe"
delete "$INSTDIR\Cantata README.txt"
delete "$INSTDIR\Cantata License (GPL V3).txt"
delete "$INSTDIR\config\lyrics_providers.xml"
@@ -503,6 +515,7 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\16x16\actions\view-media-playlist.png"
delete "$INSTDIR\icons\oxygen\16x16\actions\view-refresh.png"
delete "$INSTDIR\icons\oxygen\16x16\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\16x16\apps\clock.png"
delete "$INSTDIR\icons\oxygen\16x16\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\16x16\apps\system-file-manager.png"
delete "$INSTDIR\icons\oxygen\16x16\categories\applications-internet.png"
@@ -562,6 +575,7 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\22x22\actions\view-media-playlist.png"
delete "$INSTDIR\icons\oxygen\22x22\actions\view-refresh.png"
delete "$INSTDIR\icons\oxygen\22x22\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\22x22\apps\clock.png"
delete "$INSTDIR\icons\oxygen\22x22\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\22x22\apps\system-file-manager.png"
delete "$INSTDIR\icons\oxygen\22x22\categories\applications-internet.png"
@@ -623,6 +637,7 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\32x32\actions\view-media-playlist.png"
delete "$INSTDIR\icons\oxygen\32x32\actions\view-refresh.png"
delete "$INSTDIR\icons\oxygen\32x32\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\32x32\apps\clock.png"
delete "$INSTDIR\icons\oxygen\32x32\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\32x32\apps\system-file-manager.png"
delete "$INSTDIR\icons\oxygen\32x32\categories\applications-internet.png"
@@ -643,8 +658,10 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\32x32\status\media-playlist-shuffle.png"
delete "$INSTDIR\icons\oxygen\32x32\status\object-locked.png"
delete "$INSTDIR\icons\oxygen\48x48\actions\bookmark-new.png"
+ delete "$INSTDIR\icons\oxygen\48x48\actions\go-down.png"
delete "$INSTDIR\icons\oxygen\48x48\actions\view-fullscreen.png"
delete "$INSTDIR\icons\oxygen\48x48\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\48x48\apps\clock.png"
delete "$INSTDIR\icons\oxygen\48x48\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\48x48\categories\applications-internet.png"
delete "$INSTDIR\icons\oxygen\48x48\categories\preferences-other.png"
@@ -652,13 +669,16 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\48x48\devices\media-optical.png"
delete "$INSTDIR\icons\oxygen\48x48\devices\multimedia-player.png"
delete "$INSTDIR\icons\oxygen\48x48\places\bookmarks.png"
+ delete "$INSTDIR\icons\oxygen\48x48\places\document-multiple.png"
delete "$INSTDIR\icons\oxygen\48x48\status\dialog-error.png"
delete "$INSTDIR\icons\oxygen\48x48\status\dialog-information.png"
delete "$INSTDIR\icons\oxygen\48x48\status\dialog-warning.png"
delete "$INSTDIR\icons\oxygen\48x48\status\media-playlist-shuffle.png"
delete "$INSTDIR\icons\oxygen\48x48\status\object-locked.png"
delete "$INSTDIR\icons\oxygen\64x64\actions\bookmark-new.png"
+ delete "$INSTDIR\icons\oxygen\64x64\actions\go-down.png"
delete "$INSTDIR\icons\oxygen\64x64\apps\cantata.png"
+ delete "$INSTDIR\icons\oxygen\64x64\apps\clock.png"
delete "$INSTDIR\icons\oxygen\64x64\apps\preferences-desktop-keyboard.png"
delete "$INSTDIR\icons\oxygen\64x64\categories\applications-internet.png"
delete "$INSTDIR\icons\oxygen\64x64\categories\preferences-other.png"
@@ -666,27 +686,29 @@ section "uninstall"
delete "$INSTDIR\icons\oxygen\64x64\devices\media-optical.png"
delete "$INSTDIR\icons\oxygen\64x64\devices\multimedia-player.png"
delete "$INSTDIR\icons\oxygen\64x64\places\bookmarks.png"
+ delete "$INSTDIR\icons\oxygen\64x64\places\document-multiple.png"
delete "$INSTDIR\icons\oxygen\64x64\status\dialog-error.png"
delete "$INSTDIR\icons\oxygen\64x64\status\dialog-information.png"
delete "$INSTDIR\icons\oxygen\64x64\status\dialog-warning.png"
delete "$INSTDIR\icons\oxygen\scalable\apps\cantata.svg"
delete "$INSTDIR\imageformats\qjpeg4.dll"
delete "$INSTDIR\imageformats\qsvg4.dll"
- delete "$INSTDIR\libgcc_s_dw2-1.dll"
- delete "$INSTDIR\libtag.dll"
- delete "$INSTDIR\mingwm10.dll"
delete "$INSTDIR\Qt4 README.txt"
- delete "$INSTDIR\QtCore4.dll"
- delete "$INSTDIR\QtGui4.dll"
delete "$INSTDIR\Qt License (LGPL V2).txt"
+ delete "$INSTDIR\TagLib README.txt"
delete "$INSTDIR\QtNetwork4.dll"
delete "$INSTDIR\QtSvg4.dll"
delete "$INSTDIR\QtXml4.dll"
- delete "$INSTDIR\TagLib README.txt"
+ delete "$INSTDIR\QtCore4.dll"
+ delete "$INSTDIR\QtGui4.dll"
+ delete "$INSTDIR\libgcc_s_dw2-1.dll"
+ delete "$INSTDIR\libtag.dll"
+ delete "$INSTDIR\mingwm10.dll"
delete "$INSTDIR\translations\cantata_cs.qm"
delete "$INSTDIR\translations\cantata_de.qm"
delete "$INSTDIR\translations\cantata_en_GB.qm"
delete "$INSTDIR\translations\cantata_es.qm"
+ delete "$INSTDIR\translations\cantata_fr.qm"
delete "$INSTDIR\translations\cantata_hu.qm"
delete "$INSTDIR\translations\cantata_ko.qm"
delete "$INSTDIR\translations\cantata_pl.qm"
@@ -715,6 +737,9 @@ section "uninstall"
delete "$INSTDIR\translations\qt_zh_CN.qm"
delete "$INSTDIR\translations\qt_zh_TW.qm"
delete "$INSTDIR\zlib1.dll"
+ delete "$INSTDIR\libz-1.dll"
+ delete "$INSTDIR\libeay32.dll"
+ delete "$INSTDIR\ssleay32.dll"
rmDir $INSTDIR\config
rmDir $INSTDIR\helpers
diff --git a/windows/icons/CMakeLists.txt b/windows/icons/CMakeLists.txt
index de2e906..ccb9995 100644
--- a/windows/icons/CMakeLists.txt
+++ b/windows/icons/CMakeLists.txt
@@ -197,9 +197,23 @@ set(OXYGEN_ICONS
32x32/actions/go-up.png
22x22/actions/go-up.png
16x16/actions/go-up.png
+64x64/actions/go-down.png
+48x48/actions/go-down.png
32x32/actions/go-down.png
22x22/actions/go-down.png
16x16/actions/go-down.png
+22x22/apps/clock.png
+48x48/apps/clock.png
+32x32/apps/clock.png
+64x64/apps/clock.png
+16x16/apps/clock.png
+48x48/actions/document-save-as.png
+48x48/mimetypes/inode-directory.png
+64x64/mimetypes/inode-directory.png
+48x48/mimetypes/audio-x-generic.png
+64x64/mimetypes/audio-x-generic.png
+48x48/places/document-multiple.png
+64x64/places/document-multiple.png
)
foreach(ICON ${OXYGEN_ICONS})
diff --git a/windows/icons/LICENSE.LGPL_V3 b/windows/icons/LICENSE.LGPL_V3
index fc8a5de..b87303c 100644
--- a/windows/icons/LICENSE.LGPL_V3
+++ b/windows/icons/LICENSE.LGPL_V3
@@ -1,165 +1,165 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
- 0. Additional Definitions.
-
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
- 1. Exception to Section 3 of the GNU GPL.
-
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
- 2. Conveying Modified Versions.
-
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
-
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
-
- 3. Object Code Incorporating Material from Library Header Files.
-
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
-
- 4. Combined Works.
-
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
-
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
-
- d) Do one of the following:
-
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
-
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
-
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
-
- 5. Combined Libraries.
-
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
-
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
-
- 6. Revised Versions of the GNU Lesser General Public License.
-
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/windows/icons/README b/windows/icons/README
index a00cf2f..7c5f32d 100644
--- a/windows/icons/README
+++ b/windows/icons/README
@@ -1,6 +1,6 @@
-The icons included here are (apart from the cantata icon) are taken from the
-Oxygen icon project (http://www.oxygen-icons.org/). Only the minimum set of
-icons needed for Cantata are included.
-
-Oxygen icon theme is dual licensed. To facilitate this, a copy of each license
-is included.
+The icons included here are (apart from the cantata icon) are taken from the
+Oxygen icon project (http://www.oxygen-icons.org/). Only the minimum set of
+icons needed for Cantata are included.
+
+Oxygen icon theme is dual licensed. To facilitate this, a copy of each license
+is included.
diff --git a/windows/icons/index.theme b/windows/icons/index.theme
index 86ac146..5f4a563 100644
--- a/windows/icons/index.theme
+++ b/windows/icons/index.theme
@@ -17,7 +17,7 @@ PanelSizes=16,22,32,48,64,128,256
DialogDefault=32
DialogSizes=16,22,32,48,64,128,256
-Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/mimetypes,22x22/places,22x22/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/status,64x64/apps,64x64/categories,64x64/devices,64x64/status,128x128/categories,128x128/devices,256x256/categories,256x256/devices,scalable/apps
+Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/mimetypes,22x22/places,22x22/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/mimetypes,48x48/places,48x48/status,64x64/apps,64x64/categories,64x64/devices,64x64/mimetypes,64x64/places,64x64/status,128x128/categories,128x128/devices,256x256/categories,256x256/devices,scalable/apps
[16x16/actions]
Size=16
@@ -149,6 +149,16 @@ Size=48
Context=Devices
Type=Threshold
+[48x48/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Threshold
+
+[48x48/places]
+Size=48
+Context=Places
+Type=Threshold
+
[48x48/status]
Size=48
Context=Status
@@ -169,6 +179,16 @@ Size=64
Context=Devices
Type=Threshold
+[64x64/mimetypes]
+Size=64
+Context=MimeTypes
+Type=Threshold
+
+[64x64/places]
+Size=64
+Context=Places
+Type=Threshold
+
[64x64/status]
Size=64
Context=Status
diff --git a/windows/icu/README b/windows/icu/README
new file mode 100644
index 0000000..79f105a
--- /dev/null
+++ b/windows/icu/README
@@ -0,0 +1,6 @@
+01234567890123456789012345678901234567890123456789012345678901234567890123456789
+This is a *much* reduced version of icudt52.dll - which probably only works with
+Qt5.3
+
+It has been downloaded from: http://qlcplus.sourceforge.net/icudt52.dll
+Which was linked from: http://qt-project.org/forums/viewthread/38489
diff --git a/windows/icu/icudt52.dll b/windows/icu/icudt52.dll
new file mode 100644
index 0000000..cd368c8
Binary files /dev/null and b/windows/icu/icudt52.dll differ
diff --git a/windows/thumbnailtoolbar.cpp b/windows/thumbnailtoolbar.cpp
new file mode 100644
index 0000000..9dcf017
--- /dev/null
+++ b/windows/thumbnailtoolbar.cpp
@@ -0,0 +1,85 @@
+/*
+ * Cantata
+ *
+ * Copyright (c) 2011-2014 Craig Drummond <craig.p.drummond at gmail.com>
+ *
+ * ----
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "thumbnailtoolbar.h"
+#include "gui/stdactions.h"
+#include "gui/settings.h"
+#include "widgets/icons.h"
+#include "support/action.h"
+#include "mpd/mpdstatus.h"
+#include <QWinThumbnailToolButton>
+
+ThumbnailToolBar::ThumbnailToolBar(QWidget *p)
+ : QWinThumbnailToolBar(p)
+{
+ setWindow(p->windowHandle());
+ prevButton=createButton(StdActions::self()->prevTrackAction);
+ playPauseButton=createButton(StdActions::self()->playPauseTrackAction);
+ stopButton=createButton(StdActions::self()->stopPlaybackAction);
+ nextButton=createButton(StdActions::self()->nextTrackAction);
+ readSettings();
+ update(MPDStatus::self());
+}
+
+void ThumbnailToolBar::readSettings()
+{
+ stopButton->setVisible(Settings::self()->showStopButton());
+}
+
+void ThumbnailToolBar::update(MPDStatus * const status)
+{
+ playPauseButton->setEnabled(status->playlistLength()>0);
+ switch (status->state()) {
+ case MPDState_Playing:
+ playPauseButton->setIcon(Icons::self()->toolbarPauseIcon);
+ stopButton->setEnabled(true);
+ nextButton->setEnabled(status->playlistLength()>1);
+ prevButton->setEnabled(status->playlistLength()>1);
+ break;
+ case MPDState_Inactive:
+ case MPDState_Stopped:
+ playPauseButton->setIcon(Icons::self()->toolbarPlayIcon);
+ stopButton->setEnabled(false);
+ nextButton->setEnabled(false);
+ prevButton->setEnabled(false);
+ break;
+ case MPDState_Paused:
+ playPauseButton->setIcon(Icons::self()->toolbarPlayIcon);
+ stopButton->setEnabled(0!=status->playlistLength());
+ nextButton->setEnabled(status->playlistLength()>1);
+ prevButton->setEnabled(status->playlistLength()>1);
+ default:
+ break;
+ }
+}
+
+QWinThumbnailToolButton * ThumbnailToolBar::createButton(Action *act)
+{
+ QWinThumbnailToolButton *btn = new QWinThumbnailToolButton(this);
+ btn->setToolTip(act->text());
+ btn->setIcon(act->icon());
+ btn->setEnabled(false);
+ QObject::connect(btn, SIGNAL(clicked()), act, SIGNAL(triggered()));
+ addButton(btn);
+ return btn;
+}
diff --git a/devices/syncdialog.h b/windows/thumbnailtoolbar.h
similarity index 61%
copy from devices/syncdialog.h
copy to windows/thumbnailtoolbar.h
index 5e1ca8a..f7a413b 100644
--- a/devices/syncdialog.h
+++ b/windows/thumbnailtoolbar.h
@@ -21,39 +21,31 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef _SYNC_DIALOG_H_
-#define _SYNC_DIALOG_H_
+#ifndef WINTHUMBNAILTOOLBAR_H
+#define WINTHUMBNAILTOOLBAR_H
-#include "support/dialog.h"
-#include "mpd/song.h"
+#include <QWinThumbnailToolBar>
-class Device;
-class SyncCollectionWidget;
-
-class SyncDialog : public Dialog
+class QWinThumbnailToolButton;
+class MPDStatus;
+class Action;
+class ThumbnailToolBar : public QWinThumbnailToolBar
{
- Q_OBJECT
-
public:
- static int instanceCount();
-
- SyncDialog(QWidget *parent);
- virtual ~SyncDialog();
-
- void sync(const QString &udi);
+ ThumbnailToolBar(QWidget *w);
+ virtual ~ThumbnailToolBar() { }
-private Q_SLOTS:
- void copy(const QList<Song> &songs);
- bool updateSongs(bool firstRun=false);
+ void readSettings();
+ void update(MPDStatus * const status);
private:
- Device * getDevice();
+ QWinThumbnailToolButton * createButton(Action *act);
private:
- QString devUdi;
- Device *currentDev;
- SyncCollectionWidget *devWidget;
- SyncCollectionWidget *libWidget;
+ QWinThumbnailToolButton *prevButton;
+ QWinThumbnailToolButton *playPauseButton;
+ QWinThumbnailToolButton *stopButton;
+ QWinThumbnailToolButton *nextButton;
};
#endif
--
cantata packaging
More information about the pkg-multimedia-commits
mailing list